(57)【要約】【課題】シグナルに対するシグナルハンドラの即応性を保証しつつ、タスクの優先度設計の自由を妨げないタスクスケジューリング技術を提供する。【解決手段】各タスク＃１、＃２は、自身に属するシグナルハンドラを、ＯＳ１００内のハンドラ登録部１１１を通じてシグナルハンドラテーブル１１２に登録する。各タスク＃１、＃２は、自身とその優先度とを、タスク登録部を通じてタスク・ハンドラ優先度テーブル１０１へ登録する。シグナルの発生があると、シグナル通知部１３１は、シグナルハンドラテーブル１１２を参照することにより、シグナルに対応するシグナルハンドラとその優先度とを特定し、タスク・ハンドラ優先度テーブル１０１へ記録する。タスク・ハンドラ選択部１４１は、タスク・ハンドラ優先度テーブル１０１内の最も優先度の高いタスク又はシグナルハンドラを選択する。【選択図】図１
2007519061.tif 000002
【特許請求の範囲】
【請求項１】
優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置であって、
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録部と、
シグナルを発生させるシグナル発生部と、
前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行部と、を備えるタスクスケジューリング装置。
【請求項２】
前記複数のタスクの各々とその優先度とを関連づけて記録するとともに前記対象シグナルハンドラとその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、
前記選択実行部は、
前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラとその優先度とを特定するとともに、前記優先度テーブルに前記対象シグナルハンドラとその優先度とを関連づけて記録するシグナル通知部と、
前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスク又はシグナルハンドラを実行対象として選択する選択部と、
前記選択部に選択されたタスク又はシグナルハンドラを実行する実行部と、を備える請求項１記載のタスクスケジューリング装置。
【請求項３】
前記シグナル通知部は、前記実行部がシグナルハンドラの実行を終了すると、実行が終了した当該シグナルハンドラについての記録を前記優先度テーブルから消去する請求項２記載のタスクスケジューリング装置。
【請求項４】
前記複数のタスクの各々とその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、
前記シグナルハンドラ登録部は、前記１以上のタスクが有するシグナルハンドラの前記各々と当該各々に対応するシグナルと当該各々の優先度とに加えて、当該各々に対応するタスクを互いに関連づけて登録するものであり、
前記選択実行部は、
前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラとその優先度である対象優先度と当該対象シグナルハンドラに対応するタスクである対象タスクとを特定するシグナル通知部と、
前記優先度テーブルに記録される前記複数のタスクのうち前記対象タスクの優先度を、前記対象優先度に変更する優先度変更部と、
前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスクを実行対象として選択する選択部と、
前記選択部に選択された前記タスクが前記対象タスクでなければ選択された前記タスクを実行するとともに、選択された前記タスクが前記対象タスクであれば前記対象シグナルハンドラを実行する実行部と、を備える請求項１記載のタスクスケジューリング装置。
【請求項５】
前記優先度変更部は、前記実行部が前記対象シグナルハンドラの実行を終了すると、前記優先度テーブルに記録される前記複数のタスクのうち、実行が終了した前記対象シグナルハンドラに対応する前記対象タスクの優先度を、前記対象優先度に変更する前の優先度に戻す請求項４記載のタスクスケジューリング装置。
【請求項６】
前記複数のタスクの各々とその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、
前記複数のタスクが、
可変の優先度を付与され、実行すべきシグナルハンドラを登録するためのキューを有し、呼び出されて実行される際には前記キューに登録されたシグナルハンドラのうち優先度の最も高い最高優先度ハンドラを実行させるシグナルハンドラ処理タスクを含み、
前記選択実行部は、
前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラを特定するとともに、当該対象シグナルハンドラを前記キューへ登録するシグナル通知部と、
前記キューの登録内容に変更があったときに、前記シグナルハンドラ登録部が登録した内容を参照することにより、前記キューに登録されているシグナルハンドラの中から前記最高優先度ハンドラを特定するとともに、前記優先度テーブルに記録される前記シグナルハンドラ処理タスクの優先度を、特定された前記最高優先度ハンドラの優先度に変更する優先度変更部と、
前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスクを実行対象として選択する選択部と、
前記選択部が選択したタスクを実行する実行部と、を備える請求項１記載のタスクスケジューリング装置。
【請求項７】
前記シグナルハンドラ処理タスクは、前記最高優先度ハンドラの実行が終了すると、前記キューから実行の終了した前記最高優先度ハンドラの登録を消去する請求項６記載のタスクスケジューリング装置。
【請求項８】
前記１以上のタスクからの登録指示により当該１以上のタスクの優先度を前記優先度テーブルに登録するタスク登録部を、さらに備える請求項２ないし７の何れかに記載のタスクスケジューリング装置。
【請求項９】
前記タスク登録部は、前記優先度テーブルに登録されている前記１以上のタスクの優先度を、当該１以上のタスクからの変更指示により変更する請求項８記載のタスクスケジューリング装置。
【請求項１０】
前記１以上のタスクのうちの一つである特定タスクが出力するデータを一時保持するバッファと、
前記バッファが保持するデータの量が所定の基準量を超えて減少したときに前記シグナル発生部に通知をするバッファ管理部と、を更に備え、
前記特定タスクは、前記タスク登録部に指示することにより前記優先度テーブルに登録されている当該特定タスクの優先度を高く変更させる特定シグナルハンドラを有しており、
前記シグナル発生部は前記通知を受けると前記特定ハンドラに対応するシグナルを発生させる請求項９記載のタスクスケジューリング装置。
【請求項１１】
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて前記シグナルハンドラ登録部が登録するためのシグナルハンドラテーブルをさらに備え、
前記選択実行部は、前記シグナルハンドラ登録部が登録した内容として前記シグナルハンドラテーブルを参照する請求項１ないし１０の何れに記載のタスクスケジューリング装置。
【請求項１２】
優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング方法であって、
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録工程と、
シグナルを発生させるシグナル発生工程と、
前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行工程と、を備えるタスクスケジューリング方法。
【請求項１３】
優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムであって、
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、
シグナルを発生させるシグナル発生手段と、
前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのタスクスケジューリングプログラム。
【請求項１４】
優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、
シグナルを発生させるシグナル発生手段と、
前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのタスクスケジューリングプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項１５】
優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムを保持する伝送媒体であって、
前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、
シグナルを発生させるシグナル発生手段と、
前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのタスクスケジューリングプログラムを保持する伝送媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチタスク環境においてタスクスケジューリングを行うタスクスケジューリング装置、方法、プログラム、記録媒体、及び伝送媒体に関する。
【背景技術】
【０００２】
マルチタスク処理を行う計算機において、オペレーティングシステム（ＯＳ）からタスクに何らかの通知を行う手法としてシグナルが知られている。シグナルは、イベント毎に用意されており、特定のタスクに特定のイベントの発生を通知する仕組みである。シグナルの通知は、例えばプログラム中のある変数を変更する等により、ソフトウェア的に実現することができる。ＯＳによっては、シグナルを受信した際にタスクが行うべき処理を登録できる仕組みを提供している場合がある。このシグナル受信に対応した処理は、シグナルハンドラと呼ばれることが多い。
【０００３】
シグナルとシグナルハンドラの一般的な仕組みを具体的に例示する。まず、あるタスク＃１が、例えば、シグナルａに対してシグナルハンドラＡ、シグナルｂに対してシグナルハンドラＢとして、シグナルの種類毎にシグナルハンドラを登録する。その後、ＯＳからタスク＃１にシグナルａが通知されると、通常のタスク＃１の実行を一時中止した上で、シグナルハンドラＡが実行される。同様に、シグナルｂが通知された場合は、シグナルハンドラＢが実行される。シグナルの発生は、前述の通り何らかのイベント、例えばユーザによるコマンドの入力等に対応しており、個々のタスク毎にそのイベントに応じた処理をシグナルハンドラとして定義（登録）することができる。
【０００４】
更に、ＯＳによっては、タスクが設定した時刻に特定のシグナルを通知するような仕組みを設けているものもある。このようなＯＳでは、タスクが実時間に応じた処理を行うためにシグナルの仕組みを利用することができる。つまり、要求される処理をシグナルハンドラの形とし、その処理を行うべき時刻にＯＳからタスクへシグナルを送り、シグナルハンドラを実行することが可能である。この場合、実時間に対する処理の正確さが要求され、シグナルが通知されてから即時にシグナルハンドラを実行する必要がある。
【０００５】
一般に、何らかのイベントの発生に対し定められた処理を即時に行うことが要求されることは多く、その為の発明も知られている。例えば、特許文献１では、特定のユーザ、端末等から与えられるコマンドに対応するプロセスの優先度を高い固定値とすることで、コマンドの即時性を改善する方法が記載されている。
【０００６】
通常、シグナルハンドラはそのタスクのコンテキストで実行されることが多い。つまり、そのタスクが優先度に応じてスケジュールされ、タスクが実行される時に初めて通知を受けたシグナルに応じたシグナルハンドラが実行される。その為、前記従来の技術では、優先度の低いタスクのシグナルハンドラはシグナルの通知より遅れて実行される可能性が高く、シグナル通知に即応した処理ができない。この問題を避けるためには、タスクの優先度を十分高く設定する必要がある。その結果、シグナルハンドラに即応性を要求されるタスクは高優先度を持ち、シグナルハンドラの実行以外でも低優先度プロセスより優先的に実行されることになる。
【０００７】
しかし、シグナルハンドラに即応性を要求されるタスクが、それ以外の処理においても優先的な実行が必要であるとは限らない。シグナルハンドラ以外の処理に関しては他のタスクを優先する設計としたい場合もある。従って、シグナルハンドラの即応性を保証する為にタスクの優先度を高く設定することは、タスク間の優先度設計の自由を妨げる場合があり、シグナルハンドラを用いる際の課題であった。
【特許文献１】特開平４−３３５４４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は上記課題を鑑みてなされたものであり、シグナルに対するシグナルハンドラの即応性を保証しつつ、タスクの優先度設計の自由を妨げないタスクスケジューリング技術を提供するものである。
【課題を解決するための手段】
【０００９】
前記課題を解決する為、本発明の一態様は、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置であって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録部と、シグナルを発生させるシグナル発生部と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行部と、を備えるものである。
【００１０】
この構成により、シグナルハンドラは自身が属するタスクと独立した優先度で実行され、優先度の高いシグナルハンドラはシグナル発生時に即応性をもって実行される。
【００１１】
本発明の目的、特徴、局面、及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【発明を実施するための最良の形態】
【００１２】
以下本発明の実施の形態について、図面を参照しながら説明する。
【００１３】
（実施の形態１）
図１は、本発明の実施の形態１によるタスクスケジューリング装置の構成を示すブロック図である。このタスクスケジューリング装置５１は、計算機装置（コンピュータ）の一部を構成している。計算機装置は、少なくとも１つの中央演算装置（ＣＰＵ）１及びメモリ装置２を備えている。また、計算機装置は、入力装置、出力装置のような他の機器を備えていてもよい。図１の例では、計算機装置は入力装置４及び入力インタフェース５をさらに備えている。入力装置４は、例えばキーボード、或いは計算機装置が携帯電話機に適用された場合の操作ボタンである。
【００１４】
ＣＰＵ１は、処理性能が十分であれば任意のタイプのものを用いることができる。メモリ装置２には、一つ以上のタスク１０、計算機装置のオペレーティングシステム（ＯＳ）１００を含むプログラムやデータが格納されている。タスク１０に含まれる個々のタスク＃１、＃２等は、一つのプログラム即ちプロセスであっても良く、プログラムの一部であるスレッドであっても良い。メモリ装置２は、十分な機能及び容量があればランダムアクセスメモリ（ＲＡＭ）、フラッシュメモリのような任意のタイプのものを使用することができる。また、メモリ装置２は、単一のメモリ装置で構成されている必要はなく、同種の複数のメモリ装置又はリードオンリーメモリ（ＲＯＭ）を含む異なる種類のメモリ装置の組み合わせであってもよい。さらに、計算機装置は、メモリ装置２以外に、例えばハードディスクのような外部記憶装置を備えていても良く、計算機装置の動作に問題の無い範囲で外部記憶装置にプログラムやデータを移動させてもよい。
【００１５】
上記のプログラム及びデータは、ＲＯＭ、フレキシブルディスク、ＣＤ−ＲＯＭ等の記録媒体３１を通じて供給することも、電話回線、ネットワーク等の伝送媒体３３を通じて供給することも可能である。このことは、他の実施の形態についても同様である。図１には、記録媒体３１としてＣＤ−ＲＯＭが描かれており、伝送媒体３３として電話回線が描かれている。ＣＤ−ＲＯＭに記録されたプログラム及びデータは、例えば計算装置の外部装置としてのＣＤ−ＲＯＭ読取装置３２を計算装置本体へ接続することによって読み出すことができ、例えばＲＡＭ或いは不図示のハードディスクに格納することができる。記録媒体３１としてＲＯＭの形態でプログラム及びデータが供給される場合には、当該ＲＯＭを計算装置に搭載することにより、計算装置はプログラム及びデータに従った処理を実行可能となる。この場合、当該ＲＯＭはメモリ装置２に含まれる。伝送媒体３３を通じて供給されるプログラム及びデータは、通信装置３４によって受信され、例えばＲＡＭ或いは不図示のハードディスクに格納される。伝送媒体３３は、有線の伝送媒体に限らず無線の伝送媒体であっても良い。また、伝送媒体３３は通信線路のみでなく、通信線路を中継する中継装置、例えばルータ等の通信リンクをも含む。
【００１６】
タスク１０に含まれる各タスク＃１、＃２等は、通常のマルチタスク型の計算機装置において管理されるタスクと同様に、それぞれ優先度を持ち、優先度に応じた順番で時分割的に並列処理される。図１では各タスクを＃１、＃２・・・、＃Ｎ（Ｎは自然数）のように表している。
【００１７】
タスク＃１、＃２・・・＃Ｎの各々は、一つ以上の種類のシグナルに対応するシグナルハンドラを、後述するＯＳ１００のシグナルハンドラ登録部（図１以下の図では、「ハンドラ登録部」と記す）１１１を用い、優先度を指定して登録する。図１では、模式的に優先度「４」のタスク＃１がシグナルａに対応する優先度「１」のシグナルハンドラＡ１を、シグナルｂに対応する優先度「３」のシグナルハンドラＢ１を登録している場合を示している。また、同様に優先度「２」のタスク＃２は、シグナルａに対し優先度「５」でシグナルハンドラＡ２を登録している。ここで、優先度を示す数値が低いほど優先度は高いものとし、優先度「１」は優先度が最高であることを意味するものとする。但し、一般にはこれに限定されるものではない。本発明においては、優先度は高低の区別がつくのであれば、任意の形式で表現しても良い。このことは、図１の例だけでなく、以下の全ての図についても同様である。
【００１８】
ＯＳ１００は、ＣＰＵ１と協働してタスクスケジューリング装置５１を実現するために、主要な要素として、シグナルハンドラ登録部１１１、シグナル通知部１３１、シグナル発生部１２１，タスク・ハンドラ選択部１４１、シグナルハンドラ実行部（図１以下の図では、「ハンドラ実行部」と記す）１５１、及びタスク実行部１５０を備えている。
【００１９】
シグナルハンドラ登録部１１１は、タスクの要求に応じて任意のシグナルに応じたシグナルハンドラをＯＳに登録する。また、登録されるシグナルハンドラにはタスクの要求に応じて任意の優先度が設定される。つまり、登録されたシグナルハンドラは、自身が属するタスクと、対応するシグナルと、固有の優先度を属性として持った上で、ＯＳに登録される。
【００２０】
登録を容易に実現するために、ＯＳ１００はシグナルハンドラテーブル（図２以下の図では「ハンドラテーブル」と記す）１１２を有している。シグナルハンドラ登録部１１１は、シグナルハンドラテーブル１１２に、タスク、ハンドラ、優先度、シグナルを互いに関連づけて登録する。
【００２１】
各タスクは、自身がメモリ装置２へ書き込まれた以後であって、自身が有するシグナルハンドラを実行可能状態にすべき時期に、シグナルハンドラ登録部１１１に要求を送ることにより自身のシグナルハンドラを、シグナルハンドラテーブル１１２に登録することが可能である。また、各タスクは、自身が有するシグナルハンドラの実行可能状態を解除すべき時期が到来すれば、その時期にシグナルハンドラ登録部１１１に要求を送ることにより自身のシグナルハンドラを、シグナルハンドラテーブル１１２から抹消することも可能である。また、各タスクは登録されているシグナルハンドラの優先度を変更すべき時期が到来すれば、その時期にシグナルハンドラ登録部１１１に要求を送ることにより、優先度を変更することも可能である。すなわち各タスクは、自身がメモリ装置２へ書き込まれた時に自身のシグナルハンドラを登録することも可能であるとともに、その後の必要に応じて、適時に登録、変更、抹消することも可能である。
【００２２】
ハンドラ登録部１１１は、システムコールとして構成することができる。この場合、例えばタスク＃１が、システムコールとしてのハンドラ登録部１１１を呼出し、タスクを特定する標識（「タスク標識」と仮称する）「＃１」、シグナルハンドラを特定する標識（「ハンドラ標識」と仮称する）「Ａ１」、優先度、及びシグナルを特定する標識（「シグナル標識」と仮称する）「ａ」等の記録すべき内容を引数としてハンドラ登録部１１１へ引き渡すと、ハンドラ登録部１１１は引き渡された内容をシグナルハンドラテーブル１１２へ登録する。また、タスク＃１が、ハンドラ登録部１１１を呼出し、タスク標識「＃１」、ハンドラ標識「Ａ１」、シグナル標識「ａ」に加えて、優先度として新たな優先度の値を引数としてハンドラ登録部１１１へ引き渡すと、ハンドラ登録部１１１は引き渡された内容に従って、シグナルハンドラテーブル１１２内の対応する優先度を新たな値に変更する。さらに、タスク＃１が、ハンドラ登録部１１１を呼出し、タスク標識「＃１」、ハンドラ標識「Ａ１」、シグナル標識「ａ」に加えて、優先度として特定の値、例えば「０」を引数としてハンドラ登録部１１１へ引き渡すと、ハンドラ登録部１１１は引き渡された内容に従って、シグナルハンドラテーブル１１２内のタスク標識「＃１」、ハンドラ標識「Ａ１」等に対応するタプル（行）の内容を抹消する。
【００２３】
シグナル発生部１２１は、イベントに応じてシグナルを発生させる。イベントにシグナルをどのように対応させるかは、ＯＳ１００の設計により決定される。例えば、入力装置４の操作を通じてユーザが特定コマンドを入力したことに対応してシグナルａを発生させ、特定デバイスからの割り込み発生に対しシグナルｂを発生させる、といった様に必要に応じ自由に設計することができる。シグナル発生部１２１は、シグナルとともに、当該シグナルに対応するタスクを指定する情報をも同時に発生させる。例えば、シグナルハンドラＡ１を実行させるべきときには、シグナル発生部１２１は、タスク＃１を指定してシグナルａを発生させる。指定されたタスクを、以下において「対象タスク」と称する。シグナル発生部１２１は、シグナルを発生させると共に、当該シグナルをタスク＃１を指定する情報と共にシグナル通知部１３１に伝える。
【００２４】
シグナル通知部１３１は、シグナル発生部１２１が発生させたシグナルに対応するシグナルハンドラを、タスク・ハンドラ選択部１４１が選択すべき対象に加える。タスク・ハンドラ選択部１４１は、実行可能状態にある全てのタスク及びシグナル通知部１３１によって通知されたシグナルに対応するシグナルハンドラの優先度を比較し、最も優先度の高いものを選択する。タスク・ハンドラ選択部１４１は、タスクを選択した場合には、タスク実行部１５０を呼出す。このときタスク・ハンドラ選択部１４１は、選択したタスクをタスク実行部１５０へ通知する。呼び出されたタスク実行部１５０は、選択されたタスクを実行する。タスク・ハンドラ選択部１４１は、シグナルハンドラを選択した場合には、シグナルハンドラ実行部１５１を呼出す。このときタスク・ハンドラ選択部１４１は、選択したシグナルハンドラをシグナルハンドラ実行部１５１へ通知する。呼び出されたシグナルハンドラ実行部１５１は、選択されたシグナルハンドラを実行する。
【００２５】
タスク・ハンドラ選択部１４１が、実行可能状態にある全てのタスク及び通知されたシグナルに対応するシグナルハンドラのうち、最も優先度の高いものを選択することを容易化するために、ＯＳ１００はタスク・ハンドラ優先度テーブル１０１を有している。タスク・ハンドラ優先度テーブル１０１は、実行可能状態にあるタスクとその優先度とを関連づけて記録するとともに、シグナルが通知されているシグナルハンドラとその優先度とを関連づけて記録するためのテーブルである。したがって、タスク・ハンドラ優先度テーブル１０１に記録される内容は、タスク標識、ハンドラ標識、及びそれらの優先度である。タスク・ハンドラ選択部１４１は、タスク・ハンドラ優先度テーブル１０１を参照することにより、タスク・ハンドラ優先度テーブル１０１に記録されている優先度のうち、参照した時点で最も優先度の高いタスク又はシグナルハンドラを選択する。
【００２６】
タスク・ハンドラ優先度テーブル１０１に記録された内容のうち、タスクに関するものは、新たなタスクがメモリ装置２へ書き込まれたとき、あるいはそれ以後であって当該新たなタスクの処理を最初に実行すべき時までに、新たなタスクがＯＳ１００へ記録要求を送ることにより記録される。例えば、タスク＃１及び＃２が、メモリ装置２へ書き込まれたときに、タスク＃１及び＃２に関する内容が、タスク・ハンドラ優先度テーブル１０１へ記録される。その後、新たにタスク＃３がメモリ装置２へ書き込まれると、その時にタスク＃３に関する内容がタスク・ハンドラ優先度テーブル１０１へ記録される。
【００２７】
タスク１０に関する内容をタスク・ハンドラ優先度テーブル１０１へ記録するために、ＯＳ１００はタスク登録部１１３を有している。タスク１０の各々はタスク登録部１１３へ要求を送ることにより、自身に関する内容をタスク・ハンドラ優先度テーブル１０１に記録することができる。タスク登録部１１３は、ハンドラ登録部１１１と同様に、システムコールとして構成することができる。この場合、例えばタスク＃１が、システムコールとしてのタスク登録部１１３を呼出し、タスク標識「＃１」及びその優先度「４」等の記録すべき内容を引数としてタスク登録部１１３へ引き渡すと、タスク登録部１１３は引き渡された内容をタスク・ハンドラ優先度テーブル１０１へ記録する。タスク１０の各々は、タスク・ハンドラ優先度テーブル１０１に登録した自己の優先度を、タスク登録部１１３を通じて、変更することも可能である。
【００２８】
タスク実行部１５０は、選択されたタスクの実行が終了すると、実行が終了したタスクに関する内容を、タスク・ハンドラ優先度テーブル１０１から消去する。
【００２９】
タスク・ハンドラ優先度テーブル１０１に記録された内容のうち、シグナルハンドラに関するものは、シグナル通知部１３１によって記録される。シグナル通知部１３１は、シグナル発生部１２１によるシグナルの発生があると、シグナルハンドラテーブル１１２を参照することにより、シグナルハンドラテーブル１１２内のシグナルに対応するハンドラ（「対象ハンドラ」と称する）及びその優先度をタスク・ハンドラ優先度テーブル１０１へ記録する。例えば、シグナル発生部１２１が、タスク＃１を指定してシグナルａを発生させると、シグナル通知部１３１は、シグナルハンドラテーブル１１２を参照することにより、タスク＃１及びシグナルａに対応する対象ハンドラの識別標識「Ａ１」及びその優先度「１」を、互いに関連づけてタスク・ハンドラ優先度テーブル１０１へ記録する。
【００３０】
あるシグナルハンドラの実行が終了すると、シグナルハンドラ実行部１５１は実行の終了したシグナルハンドラをシグナル通知部１３１に通知する。通知を受けたシグナル通知部１３１は、タスク・ハンドラ優先度テーブル１０１内の実行の終了したシグナルハンドラに対応する内容を消去する。
【００３１】
図２及び図３は、本実施の形態のタスクスケジューリング装置５１による処理の流れを示すフローチャートである。図２及び図３の処理が行われる前に、図１に例示したように、シグナルハンドラテーブル１１２には、１以上のシグナルハンドラが登録されており、タスク・ハンドラ優先度テーブル１０１には、１以上のタスクが登録されているものとする。
【００３２】
図２は、シグナルの発生にともなって実行される処理の流れを表している。入力装置４の操作を通じてユーザが特定コマンドを入力するなどのイベントが発生すると、ステップＳ１の処理が実行される。ステップＳ１では、シグナル発生部１２１がシグナルを発生させるとともに、当該シグナルをシグナル通知部１３１に伝える。
【００３３】
次にステップＳ２において、シグナル通知部１３１は、発生したシグナルに対応する対象タスクがシグナルハンドラを登録しているか否かを、シグナルハンドラテーブル１１２を参照することにより判定する。対象タスクがシグナルハンドラを登録しておれば（ステップＳ２でＹＥＳ）、ステップＳ３において、シグナル通知部１３１は対象ハンドラとその優先度とをタスク・ハンドラ優先度テーブル１０１に記録する。ステップＳ４が終了すると、図２の処理全体が終了する。また、ステップＳ２の判定において、対象タスクがシグナルハンドラを登録していなければ（ステップＳ２でＮＯ）、図２の処理全体が終了する。なお、図２の処理の終了時（図２中のリターン）に続いて、ＯＳ１００はタスク・ハンドラ選択部１４１を呼び出しても良い。この場合は、即時に図３のステップＳ１１の処理が開始される。
【００３４】
図３は、タスク・ハンドラ選択部１４１の呼出しにともなって実行される処理の流れを示している。ステップＳ１１は、タスク・ハンドラ選択部１４１の呼び出しを表している。タスク・ハンドラ選択部１４１は、従来周知のタスクスケジューリングと同様のタイミングでＯＳ１００によって呼び出される。一例を挙げると、ＯＳ１００の処理に伴ってその内部データが変更される毎に、ＯＳ１００によってタスク・ハンドラ選択部１４１が呼び出される。或いは、ＣＰＵ１に不図示のタイマー回路が接続されており、当該タイマー回路によって、例えば一定周期毎にＣＰＵ１に割り込みがかけられ、当該割り込みがある毎にタスク・ハンドラ選択部１４１が呼び出される。或いは上述の通り、タスク・ハンドラ選択部１４１は、図２の処理の終了とともに呼び出されても良い。また、図３の処理全体が終了すると、処理がステップＳ１１に戻ることにより、タスク・ハンドラ選択部１４１の呼出しが即時に行われても良い。
【００３５】
続くステップＳ１２では、タスク・ハンドラ選択部１４１は、タスク・ハンドラ優先度テーブル１０１に記録されたタスク及び、もしあればシグナルハンドラの内、最も優先度の高いものを選択する。次のステップＳ１３では、タスク・ハンドラ選択部１４１は、選択したものがタスクであるか否かを判定する。選択されたものがタスクである場合は（ステップＳ１３でＹＥＳ）、ステップＳ１８において、タスク・ハンドラ選択部１４１はタスク実行部１５０を呼び出す。続くステップＳ１９において、タスク実行部１５０は、選択されたタスクを実行する。続くステップＳ２０において、タスク実行部１５０は、実行の終了したタスクに関する記録を、タスク・ハンドラ優先度テーブル１０１から消去する。ステップＳ２０の処理が終了すると、図３の処理全体が終了する。
【００３６】
ステップＳ１３の判定において、選択されたものがシグナルハンドラである場合は（ステップＳ１３でＮＯ）、ステップＳ１４において、タスク・ハンドラ選択部１４１はシグナルハンドラ実行部１５１を呼び出す。続くステップＳ１５において、シグナルハンドラ実行部１５１は、選択されたシグナルハンドラを実行する。ステップＳ１５の処理、すなわち選択されたシグナルハンドラの実行が終了すると、ステップＳ１６において、シグナルハンドラ実行部１５１は、当該シグナルハンドラの実行が終了したことをシグナル通知部１３１へ通知する。すると、シグナル通知部１３１は、通知されたシグナルハンドラに対応する内容をタスク・ハンドラ優先度テーブル１０１から消去する。ステップＳ１６の処理が終了すると、図３の処理全体が終了する。前述の通り、図３の処理全体が終了すると、処理がステップＳ１１に戻ることにより、タスク・ハンドラ選択部１４１の呼出しが即時に行われても良い。
【００３７】
図４は、本実施の形態における処理の一例を説明するタイミングチャートである。図４の例では、タスク１０としてタスク＃１とタスク＃２との２つがメモリ装置２に存在するものとしている。また、シグナルハンドラテーブル１１２の内容、及びタスク・ハンドラ優先度テーブル１０１のうちタスクに関する内容は、図１に例示したとおりであるとする。すなわち、タスク＃２はタスク＃１より優先すべきものであり、それを反映してタスク＃１は優先度「４」、タスク＃２は優先度「２」と設定されている。但し、タスク＃１はシグナルａに対しシグナルハンドラＡ１を登録しており、このシグナルハンドラＡ１は特にシグナルに対し即時性を要求される処理である。その為、シグナルハンドラＡ１には優先度「１」が設定されている。なお、太実線は、対応するタスクがＣＰＵ１を確保することにより実行されている状態であることを示している。また、斜線太線は、シグナルハンドラがＣＰＵ１を確保することにより実行されている状態であることを示している。また、白抜き太線は、ＯＳ１００の処理がＣＰＵ１により実行されていることを示している。
【００３８】
まず、時刻０においては優先度の高いタスク＃２が実行されている。時刻ｔ１１にタスク＃１に対するシグナルａが発生する（ステップＳ１）。時刻ｔ１２にシグナルａに対応するシグナルハンドラＡ１が登録されていることが、タスク・ハンドラ選択部１４１に通知される（ステップＳ２、Ｓ３）。より具体的には、シグナルハンドラＡ１とその優先度とが、タスク・ハンドラ優先度テーブル１０１に記録される。
【００３９】
時刻ｔ１３からシグナルハンドラとタスクのスケジューリングが行われる（ステップＳ１１、Ｓ１２）。すなわち、タスク・ハンドラ優先度テーブル１０１に記録された選択対象の中から、優先度の最も高いタスク又はシグナルハンドラが選択される。ここでのスケジューリングの対象は、優先度「１」のシグナルハンドラＡ１、優先度「２」のタスク＃２、優先度「４」のタスク＃１である。その結果、最も優先度の高いシグナルハンドラＡ１が選択される。その後、時刻ｔ１４より選択されたシグナルハンドラＡ１の処理が開始される（ステップＳ１３〜Ｓ１５）。
【００４０】
時刻ｔ１５にシグナルハンドラＡ１の処理が終了すると（ステップＳ１６）、再びスケジューリングが行われる（ステップＳ１１、Ｓ１２）。このときのスケジューリングの対象は、優先度「２」のタスク＃２、及び優先度「４」のタスク＃１である。その結果、優先度の高いタスク＃２が選択される。時刻ｔ１６より、選択されたタスク＃２の処理が開始される（ステップＳ１３、Ｓ１８、Ｓ１９）。時刻ｔ１７にタスク＃２の処理が終了すると、再びスケジューリングが行われる（ステップＳ１１、Ｓ１２）。その結果、時刻ｔ１８よりタスク＃１が実行される（ステップＳ１３、Ｓ１８、Ｓ１９）。
【００４１】
図４の例では、シグナルハンドラＡ１はシグナルａの発生後に、スケジューリングを通して即時に処理されている。その後、タスク＃２、タスク＃１の順で処理が実行されている。すなわち、シグナルハンドラＡ１の即時処理を行いつつ、タスク間ではそれと独立して優先度設計が実現されている。以上のように、本実施の形態のタスクスケジューリング装置５１によれば、シグナルハンドラの即時性を保証しつつ、タスク間の自由な優先度設計を行うことが可能となる。
【００４２】
（実施の形態２）
図５は、本発明の実施の形態２によるタスクスケジューリング装置の構成を示すブロック図である。このタスクスケジューリング装置５２は、計算機装置（コンピュータ）の一部を構成している。実施の形態１と同様に、計算機装置は少なくとも１つの中央演算装置（ＣＰＵ）１及びメモリ装置２を備えている。また、計算機装置は、入力装置、出力装置のような他の機器を備えていてもよい。図５の例では、計算機装置は入力装置４及び入力インタフェース５をさらに備えている。
【００４３】
実施の形態１によるタスクスケジューリング装置５１では、タスクとシグナルに対応するシグナルハンドラとが、タスク・ハンドラ選択部１４１によって、あたかも同列に扱われ、それらの中で最も優先度の高いものが実行に供された。それによって、シグナル発生後のシグナルハンドラの即応性と、タスク間の優先度設計の自由度との両立が図られた。
【００４４】
これに対して、実施の形態２によるタスクスケジューリング装置５２は、シグナルに対応するタスクの優先度を、シグナルに対応するシグナルハンドラの優先度へ一時的に変更する。タスクスケジューリング装置５２は、それにより、シグナル発生後のシグナルハンドラの即応性と、タスク間の優先度設計の自由度との両立を図っている。
【００４５】
この目的のために、タスクスケジューリング装置５２では、ＯＳ１００Ａがタスク優先度変更部１６２を有している。また、タスクスケジューリング装置５１におけるタスク・ハンドラ選択部１４１はタスク選択部１４１Ａに置き換えられ、タスク・ハンドラ優先度テーブル１０１はタスク優先度テーブル１０１Ａに置き換えられ、シグナルハンドラ実行部１５１はシグナルハンドラ実行部１５１Ａに置き換えられている。また、シグナルハンドラテーブル１１２は、シグナルハンドラテーブル１１２Ａに置き換えられ、シグナル通知部１３１はシグナル通知部１３１Ａに置き換えられている。さらに、タスク優先度変更部１６２には、その機能を補助するための待避テーブル１６３が付随している。
【００４６】
タスク優先度テーブル１０１Ａには、タスク・ハンドラ優先度テーブル１０１とは異なり、タスクとその優先度のみが記録される。タスク選択部１４１Ａは、タスク優先度テーブル１０１Ａ内のタスクのうち、優先度の最も高いものを選択する。タスク１０の各々はタスク登録部１１３へ要求を送ることにより、自身に関する内容をタスク・ハンドラ優先度テーブル１０１Ａに記録することができる。また、タスク１０の各々は、タスク・ハンドラ優先度テーブル１０１に登録した自己の優先度を、タスク登録部１１３を通じて、変更することも可能である。
【００４７】
シグナルハンドラ登録部１１１は、シグナルハンドラテーブル１１２と同様に、シグナルハンドラテーブル１１２Ａに、タスク、ハンドラ、優先度、シグナルを互いに関連づけて登録する。シグナルハンドラテーブル１１２Ａには、さらにこれらの属性に関連づけて、シグナルが発生したか否かを示すシグナル発生フラグが記録される。シグナル発生フラグの値は、シグナル通知部１３１及びシグナルハンドラ実行部１５１Ａによって変更される。
【００４８】
タスクスケジューリング装置５２の各部の構成については、以下の図６及び図７を参照しつつ行う動作説明の中で詳述する。図６及び図７は、本実施の形態のタスクスケジューリング装置５２による処理の流れを示すフローチャートである。以下のフローチャートでは、それより先に参照したフローチャート内の処理と同様の処理には同一の符号を付している。図６及び図７の処理が行われる前に、図５に例示したように、シグナルハンドラテーブル１１２Ａには、１以上のシグナルハンドラが登録されており、タスク優先度テーブル１０１Ａには、１以上のタスクが登録されているものとする。
【００４９】
図６は、シグナルの発生にともなって実行される処理の流れを表している。イベントが発生すると、ステップＳ１においてシグナル発生部１２１がタスクを指定してシグナルを発生させるとともに、当該シグナルをシグナル通知部１３１Ａに伝える。次にステップＳ２において、シグナル通知部１３１Ａは、発生したシグナルに対応する対象タスクがシグナルハンドラを登録しているか否かを、シグナルハンドラテーブル１１２Ａを参照することにより判定する。対象タスクがシグナルハンドラを登録しておれば（ステップＳ２でＹＥＳ）、ステップＳ３１において、シグナル通知部１３１Ａは、シグナルの発生をシグナルハンドラテーブル１１２Ａに通知する。すなわちシグナル通知部１３１Ａは、シグナルハンドラテーブル１１２Ａ内の対応するシグナル発生フラグを有効にする。
【００５０】
図５に例示するようにシグナルハンドラテーブル１１２Ａに、シグナルハンドラＡ１，Ｂ１，Ａ２が登録されておれば、シグナル発生部１２１がタスク＃１を指定してシグナルａを発生させたときには、シグナル通知部１３１Ａは、シグナルハンドラテーブル１１２Ａ内の対象タスク＃１及びシグナルａに対応するシグナル発生フラグ、すなわちシグナルハンドラＡ１に対応するシグナル発生フラグを有効値「１」に設定する。
【００５１】
次にステップＳ３２において、シグナル通知部１３１Ａは、タスク優先度変更部１６２を呼び出す。タスク優先度変更部１６２は、シグナル通知部１３１Ａから呼び出されると、シグナルハンドラテーブル１１２Ａを参照することにより、シグナル発生フラグが有効値「１」となっているタスクとその優先度とを読み取り、タスク優先度テーブル１０１Ａ内の対応するタスクとその優先度とを、待避テーブル１６３に記録する。次にステップＳ３３において、タスク優先度変更部１６２は、タスク優先度テーブル１０１Ａ内の対応するタスクとその優先度とを、読み取った優先度に変更する。
【００５２】
図５に例示するように、シグナルハンドラテーブル１１２Ａにおいて、タスク＃１及びハンドラＡ１に対応するフラグが有効値「１」である場合には、タスク優先度変更部１６２は、タスク＃１とハンドラＡ１の優先度「１」とを読み取る。タスク優先度変更部１６２は、さらに、タスク優先度テーブル１０１Ａ内のタスク＃１の本来の優先度「４」を、読み取った優先度「１」へ変更する（ステップＳ３３）。タスク優先度変更部１６２は、変更後の優先度を元に戻すことを可能にするために、変更する前の優先度「４」を待避テーブル１６３に、対応するタスク＃１と関連づけて記録した後に（ステップＳ３２）、タスク優先度テーブル１０１Ａ内の優先度を変更する（ステップＳ３３）。このようにして、シグナルの発生があると、対象タスクの優先度が対象シグナルハンドラの優先度に変更される。
【００５３】
ステップＳ３３が終了すると、図６の処理全体が終了する。また、ステップＳ２の判定において、対象タスクがシグナルハンドラを登録していなければ（ステップＳ２でＮＯ）、図６の処理全体が終了する。なお、図６の処理の終了時（図６中のリターン）に続いて、ＯＳ１００Ａはタスク選択部１４１Ａを呼び出しても良い。この場合は、即時に図７のステップＳ４１の処理が開始される。
【００５４】
図７は、タスク選択部１４１Ａの呼出しにともなって実行される処理の流れを示している。ステップＳ４１は、タスク選択部１４１Ａの呼び出しを表している。タスク選択部１４１Ａは、実施の形態１によるタスク・ハンドラ選択部１４１と同様に、従来周知のタスクスケジューリングと同様のタイミングでＯＳ１００Ａによって呼び出される。或いは上述の通り、タスク選択部１４１Ａは、図６の処理の終了とともに呼び出されても良い。また、図７の処理全体が終了すると、処理がステップＳ４１に戻ることにより、タスク選択部１４１Ａの呼出しが即時に行われても良い。
【００５５】
続くステップＳ４２では、タスク選択部１４１Ａは、タスク優先度テーブル１０１Ａに記録されたタスクのうち、優先度の最も高いタスクを選択する。次にステップＳ４３において、タスク選択部１４１Ａは、シグナルハンドラテーブル１１２Ａを参照することにより、選択したタスクについて通知されたシグナルがあるか否か、すなわちシグナル発生フラグが有効となっているシグナルがあるか否かを判定する。選択したタスクについて、通知されたシグナルが無ければ（ステップＳ４３でＮＯ）、ステップＳ１８において、タスク選択部１４１Ａは、タスク実行部１５０を呼出すとともに、選択したタスクをタスク実行部１５０に通知する。続いてステップＳ１９において、呼び出されたタスク実行部１５０は、通知されたタスクを実行する。続くステップＳ２０において、タスク実行部１５０は、実行の終了したタスクに関する記録を、タスク優先度テーブル１０１Ａから消去する。
【００５６】
一方、ステップＳ４３の判定において、選択したタスクについて通知されたシグナルがあれば（ステップＳ４３でＹＥＳ）、ステップＳ４４において、タスク選択部１４１Ａは、シグナルハンドラ実行部１５１Ａを呼出し、これらのタスク及びシグナルに対応するシグナルハンドラ、すなわち実行すべきシグナルハンドラを、シグナルハンドラ実行部１５１Ａに通知する。次にステップＳ４５において、シグナルハンドラ実行部１５１Ａは、通知されたシグナルハンドラを実行する。
【００５７】
図５に例示したように、タスク優先度テーブル１０１Ａに、タスク＃１とタスク＃２とが記録され、それぞれの優先度が「１」及び「２」である場合には、タスク選択部１４１Ａは、タスク＃１を選択する（ステップＳ４２）。また図５に例示するように、シグナルハンドラテーブル１１２Ａにおいて、タスク＃１とシグナルａとに対応するシグナル発生フラグが有効値「１」であれば（ステップＳ４３でＹＥＳ）、タスク選択部１４１Ａはシグナルハンドラ実行部１５１Ａを呼出し（ステップＳ４４）、シグナルハンドラ実行部１５１は、有効フラグに対応するシグナルハンドラＡ１を実行する（ステップＳ４５）。
【００５８】
ステップＳ４５における通知されたシグナルハンドラの実行が終了すると、ステップＳ４６において、シグナルハンドラ実行部１５１Ａは、シグナルハンドラテーブル１１２Ａから、実行が終了したシグナルハンドラについてのシグナル発生の記録を消去する。すなわち、シグナルハンドラ実行部１５１Ａは、シグナルハンドラテーブル１１２内の実行が終了したシグナルハンドラに対応するシグナル発生フラグを、有効値「１」から無効値「０」へ戻す。従って図５の例では、シグナルハンドラテーブル１１２内のシグナルハンドラＡ１に対応するシグナル発生フラグが「１」から「０」へ戻される。
【００５９】
次にステップＳ４７において、シグナルハンドラ実行部１５１Ａは、タスク優先度変更部１６２を呼出す。タスク優先度変更部１６２は、シグナルハンドラ実行部１５１Ａから呼び出されると、待避テーブル１６３の優先度をタスク優先度テーブル１０１Ａに書き戻すことにより、タスク優先度テーブル１０１Ａ内の変更した優先度を元の値に戻す。その結果、図５の例では、タスク優先度テーブル１０１Ａ内のタスク＃１の優先度「１」が本来の優先度「４」に戻される。次にステップＳ４８において、タスク優先度変更部１６２は、タスク優先度テーブル１０１Ａへ書き戻された待避テーブル１６３の内容を消去する。
【００６０】
ステップＳ２０又はステップＳ４８の処理が終了すると、図７の処理全体が終了する。前述の通り、図７の処理全体が終了すると、処理がステップＳ４１に戻ることにより、タスク選択部１４１Ａの呼出しが即時に行われても良い。
【００６１】
図８は、本実施の形態における処理の一例を説明するタイミングチャートである。図８の例では、図４の例と同様にタスク１０としてタスク＃１とタスク＃２との２つがメモリ装置２に存在し、タスク＃１は優先度「４」、タスク＃２は優先度「２」と設定されており、シグナルハンドラＡ１には優先度「１」が設定されているものとする。
【００６２】
まず、時刻０においては優先度の高いタスク＃２が実行されている。時刻ｔ２１にタスク＃１に対するシグナルａが発生する（ステップＳ１）。時刻ｔ２２に、シグナル通知部１３１Ａは、シグナルａに対してシグナルハンドラＡ１が登録されているものと判定すると（ステップＳ２）、シグナルａの発生をシグナルハンドラテーブル１１２Ａに通知する（ステップＳ３１）。すなわちシグナル通知部１３１Ａは、シグナルハンドラテーブル１１２Ａ内のシグナルハンドラＡ１に対応するシグナル発生フラグを有効にする。
【００６３】
続いて時刻ｔ２３に、タスク優先度変更部１６２がタスク＃１の本来の優先度である「４」を待避テーブル１６３に記録した上で、タスク優先度テーブル１０１Ａ内のタスク＃１の優先度をシグナルハンドラＡ１の優先度である「１」に変更する（ステップＳ３２〜Ｓ３３）。時刻ｔ２３からタスク選択部１４１Ａによるシグナルハンドラとタスクのスケジューリングが行われる（ステップＳ４１、Ｓ４２）。ここでのスケジューリングの対象は、優先度「１」のタスク＃１と優先度「２」のタスク＃２である。その結果、優先度の高いタスク＃１が選択される。ここでタスク選択部１４１Ａは、タスク＃１がシグナルａを通知されているものと判定する。その結果、時刻ｔ２４よりシグナルハンドラＡ１が実行される（ステップＳ４３〜Ｓ４５）。
【００６４】
時刻ｔ２５にシグナルハンドラＡ１の処理が終了し、タスク優先度テーブル１０１Ａにおけるタスク＃１の優先度は本来の「４」に変化する（ステップＳ４６〜Ｓ４８）。時刻ｔ２６より再びスケジューリングが行われる（ステップＳ４１、Ｓ４２）。ここでのスケジューリングの対象は、優先度「２」のタスク＃２、及び優先度「４」のタスク＃１である。その結果、優先度の高いタスク＃２が選択され、時刻ｔ２６よりタスク＃２の処理が開始される。時刻ｔ２７にタスク＃２が終了し、スケジューリングの結果、時刻ｔ２８よりタスク＃１が実行される（ステップＳ４３、Ｓ１８、Ｓ１９）。
【００６５】
図８の例において、シグナルハンドラＡ１はシグナル発生よりスケジューリングを通して即時に処理されている。その後、タスク＃２、タスク＃１の順で処理がおこなわれており、シグナルハンドラの即時処理を行いつつ、タスク間ではそれと独立して優先度設計が実現されている。以上のように、本実施の形態のタスクスケジューリング装置５２によれば、シグナルハンドラの即時性を保証しつつ、タスク間の自由な優先度設計を行うことが可能となる。
【００６６】
（実施の形態２の更に具体的な形態）
図９は、実施の形態２によるタスクスケジューリング装置５２の更に具体的な形態を例示したブロック図である。このタスクスケジューリング装置５２Ａを含む計算装置は、図５の計算装置に加えて出力装置６を備えている。出力装置５は、例えば音声を出力するとともに画像を表示する表示装置である。
【００６７】
タスクスケジューリング装置５２ＡをＣＰＵ１と協働して実現するＯＳ１００Ｂは、ＯＳ１００Ａの各要素（図５）に加えて、バッファ管理部１７０を備えている。バッファ管理部１７０は、メモリ装置２のメモリ領域内に確保されたバッファ１７１を管理する。バッファ１７１は、タスク＃１から出力装置６へ出力されるデータを一時的に保持する。バッファ管理部１７０は、例えばシステムコールとして構成されている。その場合には、タスク＃１は、バッファ１７１へデータを書き込むときには、システムコールとしてのバッファ管理部１７０を呼出し、書き込むべきデータを引数としてバッファ管理部１７０へ引き渡す。バッファ管理部１７０は引き渡されたデータをバッファ１７１へ書き込む。また、シグナルハンドラＡ１は、タスク登録部１１３を呼び出し、タスク＃１の優先度をより高い値へ変更するものとして準備される。すなわち、シグナル発生部１２１がタスク＃１を指定してシグナルａを発生させた場合には、タスク＃１の優先度が高くなり、タスク＃１がより優先的に実行されることとなる。
【００６８】
バッファ管理部１７０は、呼び出されたときには、バッファ１７１が保持しているデータの量の検知をも行う。バッファ管理部１７０は、検知したデータ量が空である場合、或いは所定の基準量以下である場合には、タスク＃１を指定したシグナルａをシグナル発生部１２１に発生させる。あるいは、データ量が空になった時、又は所定の基準量以下になった時に割り込み信号を発生するデバイスを設け、その割り込みに対する割り込みハンドラにより、タスク＃１を指定したシグナルａをシグナル発生部１２１に発生させるようにタスクスケジューリング装置５２Ａを構成しても良い。それにより、速やかにシグナルハンドラＡ１が実行されることとなり、タスク＃１の優先度が高められ、タスク＃１が他のタスクに優先して実行されるようになる。その結果、タスク３１によりバッファ１７１内のデータ量が基準量を超えるほどに、データがバッファ１７１へ書き込まれる。
【００６９】
バッファ１７１のデータ量が基準量以下になるということは、タスク＃１の優先度が低過ぎることを意味する。タスクスケジューリング装置５２Ａでは、シグナルハンドラＡ１によって、低過ぎたタスク＃１の優先度が高い値に変更される。このようにして、バッファ１７１内に保持されるデータ量をある程度以上に保つことができ、それにより出力装置６へ出力すべきデータが途切れることを回避することができる。
【００７０】
（実施の形態３）
図１０は、本発明の実施の形態３によるタスクスケジューリング装置の構成を示すブロック図である。このタスクスケジューリング装置５３は、計算機装置（コンピュータ）の一部を構成している。実施の形態１及び２と同様に、計算機装置は少なくとも１つの中央演算装置（ＣＰＵ）１及びメモリ装置２を備えている。また、計算機装置は、入力装置、出力装置のような他の機器を備えていてもよい。図１０の例では、計算機装置は入力装置４及び入力インタフェース５をさらに備えている。
【００７１】
本実施の形態によるタクススケジューリング装置５３では、タスク１０には、少なくとも一つ以上のシグナルハンドラ処理タスク＃Ｓが含まれる。本実施の形態では、通常のタスク＃１、＃２・・・＃Ｎ（Ｎは自然数）が有するシグナルハンドラは、全てシグナルハンドラ処理タスク＃Ｓによって処理される。図１０の例では、タスク＃１がシグナルａに対応した優先度「１」のシグナルハンドラＡ１と、シグナルｂに対応した優先度「３」のシグナルハンドラＢ１をシグナルハンドラ処理タスク＃Ｓに登録している。また、同様に、タスク＃２はシグナルａに対応した優先度「５」のシグナルハンドラＡ２をシグナルハンドラ処理タスク＃Ｓに登録している。また、シグナルハンドラ処理タスク＃Ｓは、シグナルを通知され、実行すべき状態となったシグナルハンドラを登録するキュー１２を有する。図１０は、シグナルハンドラＡ１がキュー１２に登録されている状態を例示している。シグナルハンドラ処理タスク＃Ｓの優先度は、キュー１２内の最高優先度に合致するように変更されるものであり、不定である。
【００７２】
シグナルハンドラ処理タスク＃Ｓは、ＣＰＵ１により自身が処理される際、つまりスケジューリングされ実行される際には、キュー１２内で最高の優先度のシグナルハンドラを処理させる。キュー１２内に処理すべきシグナルハンドラが無ければ、シグナルハンドラ処理タスク＃Ｓはスリープ状態になる。また、シグナルハンドラ処理タスク＃Ｓは、キュー内のシグナルハンドラを一つ処理する毎に、後述するシグナルハンドラ処理タスク優先度変更部１６４を呼び出し、自身の優先度を変更させる。シグナルハンドラ処理タスク＃Ｓは、それと併せて、後述するタスク選択部１４１Ａを呼び出し、再びスケジューリングを実行させる。
【００７３】
上記のように、本実施の形態によるタスクスケジューリング装置５３は、シグナルの発生があると、シグナルハンドラ処理タスク＃Ｓ内のキュー１２に、対応するシグナルハンドラを登録する。そして、タスクスケジューリング装置５３は、シグナルハンドラ処理タスク＃Ｓの優先度を、キュー１２内の最も高い優先度に合致させ、シグナルハンドラ処理タスク＃Ｓを他の通常のタスクとともにスケジューリングの対象とする。また、タスクスケジューリング装置５３は、シグナルハンドラ処理タスク＃Ｓをスケジューリングした場合には、キュー１２内の最高優先度のシグナルハンドラを実行する。それにより、タスクスケジューリング装置５３は、シグナル発生後のシグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立を図っている。
【００７４】
この目的のために、タスクスケジューリング装置５３では、ＯＳ１００Ｃが、タスクスケジューリング装置５２（図５）におけるタスク優先度変更部１６２及び退避テーブル１６３に代えて、シグナルハンドラ処理タスク優先度変更部１６４を有している。また、タスクスケジューリング装置５２おけるシグナル通知部１３１Ａは、シグナル通知部１３１Ｂに置き換えられている。さらに、タスクスケジューリング装置５２におけるシグナルハンドラテーブル１１２Ａは、タスクスケジューリング装置５１（図１）と同様に、シグナルハンドラテーブル１１２に置き換えられている。
【００７５】
シグナル通知部１３１Ｂは、シグナルの発生があると、シグナルハンドラ処理タスクのキュー１２に、通知したシグナルに対応する対象シグナルハンドラを登録する。また、シグナル通知部１３１Ｂは、シグナルハンドラ処理タスク＃Ｓがスリープ状態にある時は、シグナルハンドラ処理タスク＃Ｓを起床させる。シグナル通知部１３１Ｂは、その上でシグナルハンドラ処理タスク優先度変更部１６４を呼び出す。
【００７６】
シグナルハンドラ処理タスク優先度変更部１６４は、シグナルハンドラ処理タスク＃Ｓの優先度をキュー１２内のシグナルハンドラの優先度のうちで最高の優先度に変更する。タスク選択部１４１Ａは、シグナルハンドラ処理タスク＃Ｓと通常のタスク＃１等との中から、最も優先度の高いタスクを選択する。
【００７７】
シグナルハンドラ処理タスク＃Ｓは、通常のタスク＃１等と同様に、タスク登録部１１３に記録要求を送ることにより、自身に関する内容をタスク優先度テーブル１０１Ａに記録する。シグナルハンドラ処理タスク＃Ｓは、通常のタスク＃１等と同様に、例えば、自身がメモリ装置２へ書き込まれたとき、あるいはそれ以後であって自身の処理を最初に実行すべき時までに記録要求を送る。
【００７８】
タスク優先度テーブル１０１Ａに記録すべきシグナルハンドラ処理タスク＃Ｓの優先度は、キュー１２にシグナルハンドラが存在しなければ、任意の値であってもよい。キュー１２内にシグナルハンドラが存在しないときには、後述するようにシグナルハンドラ処理タスク＃Ｓはスリープ状態にある。タスク選択部１０１Ａは、タスク優先度テーブル１０１Ａ内のタスクのうち、スリープしているタスクは選択しないので、優先度が任意の値であっても問題は生じない。従って、シグナルハンドラ処理タスク＃Ｓに関する内容が、タスク登録部１１３を通じてタスク優先度テーブル１０１Ａへ記録されるときに、その優先度として如何なる値が記録されても支障はない。
【００７９】
タスクスケジューリング装置５３の各部の構成については、以下の図１１及び図１２を参照しつつ行う動作説明の中で詳述する。図１１及び図１２は、本実施の形態のタスクスケジューリング装置５３による処理の流れを示すフローチャートである。図１１及び図１２の処理が行われる前に、図１０に例示したように、シグナルハンドラテーブル１１２には、１以上のシグナルハンドラが登録されており、タスク優先度テーブル１０１Ａには、１以上のタスクが登録されているものとする。
【００８０】
図１１は、シグナルの発生にともなって実行される処理の流れを表している。イベントが発生すると、ステップＳ１においてシグナル発生部１２１がタスクを指定してシグナルを発生させるとともに、当該シグナルをシグナル通知部１３１Ｂに伝える。次にステップＳ２において、シグナル通知部１３１Ｂは、発生したシグナルに対応する対象タスクがシグナルハンドラを登録しているか否かを、シグナルハンドラテーブル１１２を参照することにより判定する。
【００８１】
対象タスクがシグナルハンドラを登録しておれば（ステップＳ２でＹＥＳ）、ステップＳ６１において、シグナル通知部１３１Ｂは、通知したシグナルに対応した対象シグナルハンドラをキュー１２に登録する。図１０に例示するようにシグナルハンドラテーブル１１２に、シグナルハンドラＡ１，Ｂ１，Ａ２が登録されておれば、シグナル発生部１２１がタスク＃１を指定してシグナルａを発生させたときには、シグナル通知部１３１Ｂは、シグナルハンドラＡ１をキュー１２に登録する。
【００８２】
続くステップＳ６２において、シグナル通知部１３１Ｂは、シグナルハンドラ処理タスク＃Ｓがスリープ状態にあるか否かを判定する。シグナルハンドラ処理タスク＃Ｓがスリープ状態にあれば（ステップＳ６２でＹＥＳ）、ステップＳ６３において、シグナル通知部１３１Ｂは、シグナルハンドラ処理タスク＃Ｓを起床させる。
【００８３】
一般に、メモリ装置２に書き込まれたタスクは、スリープ（sleep）状態とウェイクアップ(wake-up)状態との２通りの状態を取り得る。タスクは、ウェイクアップ状態にあるときには、呼び出しがあればアクティブ状態となって実行され、呼び出しがないときはインアクティブ状態となって呼び出しを待つ。一方、タスクは、スリープ状態にあるときは呼び出しがあっても実行されない。したがって、スリープ状態にあるタスクを実行可能にするためには、当該タスクをスリープ状態からウェイクアップ状態へ移行させること、すなわち起床させることが必要となる。なお、メモリ装置２に書き込まれる前のタスクの状態は、アイドル（idle）状態と称される。
【００８４】
ステップＳ６２の判定においてシグナルハンドラ処理タスク＃Ｓがスリープ状態にない場合（ステップＳ６２でＮＯ）、又はステップＳ６３の処理が終了した場合には、ステップＳ６４の処理が行われる。ステップＳ６４では、シグナル通知部１３１Ｂは、シグナルハンドラ処理タスク優先度変更部１６４を呼び出す。呼び出されたシグナルハンドラ処理タスク優先度変更部１６４は、キュー１２とシグナルハンドラテーブル１１２とを参照することにより、タスク優先度テーブル１０１Ａ内のシグナルハンドラ処理タスク＃Ｓの優先度を、キュー１２に登録されているシグナルハンドラの優先度のうちの最高の優先度に変更する。
【００８５】
例えば、シグナル発生部１２１がタスク＃１を指定してシグナルａを発生させた場合に、キュー１２内にシグナルハンドラＡ１のみが存在するときには、シグナル通知部１３１Ｂは、タスク優先度テーブル１０１Ａ内のシグナルハンドラ処理タスク＃Ｓの優先度を、シグナルハンドラテーブル１１２に登録されているシグナルハンドラＡ１の優先度「１」に変更する。
【００８６】
ステップＳ６４が終了すると、図１１の処理全体が終了する。また、ステップＳ２の判定において、対象タスクがシグナルハンドラを登録していなければ（ステップＳ２でＮＯ）、図１１の処理全体が終了する。なお、図１１の処理の終了時（図１１中のリターン）に続いて、ＯＳ１００Ｂはタスク選択部１４１Ａを呼び出しても良い。この場合は、即時に図１２のステップＳ４１の処理が開始される。
【００８７】
図１２は、タスク選択部１４１Ａの呼出しにともなって実行される処理の流れを示している。ステップＳ４１は、タスク選択部１４１Ａの呼び出しを表している。タスク選択部１４１Ａの呼び出しのタイミングについては、実施の形態２についての説明の中で既に述べている。続くステップＳ４２では、タスク選択部１４１Ａは、タスク優先度テーブル１０１Ａに記録されたタスクのうち、優先度の最も高いタスクを選択する。図１０に例示したように、タスク優先度テーブル１０１Ａにタスク＃１、タスク＃２、及びシグナルハンドラ処理タスク＃Ｓが記録され、それぞれの優先度が「４」、「２」、及び「１」である場合には、タスク選択部１４１Ａは、シグナルハンドラ処理タスク＃Ｓを選択する（ステップＳ４２）。
【００８８】
次にステップＳ７１において、タスク選択部１４１Ａは、タスク実行部１５０を呼出すとともに、選択したタスクをタスク実行部１５０に通知する。続いてステップＳ７２、Ｓ７３、Ｓ７４及びＳ８０において、呼び出されたタスク実行部１５０は、通知されたタスクを実行する。従って、タスク実行部１５０は、選択されたタスクがシグナルハンドラ処理タスク＃Ｓであれば（ステップＳ７２でＹＥＳ）、シグナルハンドラ処理タスク＃Ｓを実行し（ステップＳ７３，Ｓ７４）、選択されたタスクがシグナルハンドラ処理タスク＃Ｓ以外のタスク、すなわち通常のタスクであれば（ステップＳ７２でＮＯ）、通常のタスクを実行する（ステップＳ８０）。ステップＳ８０に続くステップＳ２０において、タスク実行部１５０は、実行の終了したタスクに関する記録を、タスク・ハンドラ優先度テーブル１０１Ａから消去する。
【００８９】
ステップＳ７３において、シグナルハンドラ処理タスク＃Ｓの実行が始まると、ステップＳ７４において、シグナルハンドラ処理タスク＃Ｓは、キュー１２内で最高の優先度のシグナルハンドラを実行させる。図１０に例示するようにキュー１２内にシグナルハンドラＡ１のみが存在する場合には、ステップＳ７４においてシグナルハンドラＡ１が実行される。
【００９０】
ステップＳ７４の処理、すなわちキュー１２内で最高の優先度のシグナルハンドラの実行が終了すると、ステップＳ７５において、シグナルハンドラ処理タスク＃Ｓは、キュー１２内のシグナルハンドラのうち、実行が終了したものを消去する。続くステップＳ７６において、シグナルハンドラ処理タスク＃Ｓは、キュー１２内にシグナルハンドラが存在するか否かを判定する。キュー１２内にシグナルハンドラが存在しなければ（ステップＳ７６でＮＯ）、ステップＳ７７において、シグナルハンドラ処理タスク＃Ｓは、スリープ状態に移行する。
【００９１】
ステップＳ７６の判定において、キュー１２内にシグナルハンドラが存在すれば（ステップＳ７６でＹＥＳ）、ステップＳ７８において、シグナルハンドラ処理タスク＃Ｓは、シグナルハンドラ処理タスク優先度変更部１６４を呼び出す。呼び出されたシグナルハンドラ処理タスク優先度変更部１６４は、キュー１２とシグナルハンドラテーブル１１２とを参照することにより、タスク優先度テーブル１０１Ａ内のシグナルハンドラ処理タスク＃Ｓの優先度を、キュー１２に記録されているシグナルハンドラの優先度のうちの最高の優先度に変更する。ステップＳ７８の処理内容は、ステップＳ６４の処理内容と同等である。
【００９２】
ステップＳ７７、ステップＳ７８及びステップＳ２０の何れかの処理が終了すると、図１２の処理全体が終了する。図１２の処理全体が終了すると、処理がステップＳ４１に戻ることにより、タスク選択部１４１Ａの呼出しが即時に行われても良い。
【００９３】
ステップＳ６４とステップＳ７８とにより、シグナルハンドラ処理タスク＃Ｓは、キュー１２内にある実行すべき全てのシグナルハンドラのうち最も優先度の高いものと、同じ優先度を常に持つこととなる。
【００９４】
図１３は、本実施の形態における処理の一例を説明するタイミングチャートである。図１３の例では、図４の例と同様にタスク１０としてタスク＃１とタスク＃２との２つがメモリ装置２に存在し、タスク＃１は優先度「４」、タスク＃２は優先度「２」と設定されており、シグナルハンドラＡ１、Ｂ１、Ａ２にはそれぞれ優先度「１」、「３」、「５」が設定されているものとする。
【００９５】
シグナルハンドラ処理タスク＃Ｓのキュー１２内には、時刻０において、優先度「３」のシグナルハンドラＢ１が登録されている。この時点でのシグナルハンドラ処理タスク＃Ｓの優先度はシグナルハンドラＢ１の優先度と同じ「３」である。
【００９６】
時刻ｔ３１にタスク＃１に対するシグナルａが発生する（ステップＳ１）。時刻ｔ３２にシグナル通知部１３１Ｂは、シグナルの発生をシグナルハンドラ処理タスク＃Ｓに通知する。すなわち、シグナル通知部１３１Ｂは、この時点でタスク＃１がシグナルａに対するシグナルハンドラとして登録していたＡ１をキュー１２に登録する（ステップＳ２、Ｓ６１）。続いて、時刻ｔ３３において、シグナルハンドラ処理タスク＃Ｓの優先度がキュー１２内で最高の優先度である「１」に変更される（ステップＳ６４）。
【００９７】
時刻ｔ３４にタスクのスケジューリングが完了する。ここでのスケジューリングの対象は、優先度「１」のシグナルハンドラ処理タスク＃Ｓ、優先度「４」のタスク＃１、優先度「２」のタスク＃２である。その結果、優先度の最も高いシグナルハンドラ処理タスク＃Ｓが選択される（ステップＳ４１、Ｓ４２）。シグナルハンドラ処理タスク＃Ｓは、キュー１２内で最も優先度の高いシグナルハンドラＡ１を実行させる（ステップＳ７１〜Ｓ７４）。シグナルハンドラＡ１の実行が終了すると、キュー１２から実行が終了したシグナルハンドラＡ１が消去される（ステップＳ７５）。その後、時刻ｔ３５でシグナルハンドラ処理タスク＃Ｓの優先度は、キュー１２内で最高の優先度である「３」に変更される（ステップＳ７６、Ｓ７８）。
【００９８】
時刻ｔ３６でタスクのスケジューリングが行われる。ここでのスケジューリングの対象は、優先度「３」のシグナルハンドラ処理タスク＃Ｓ、優先度「４」のタスク＃１、優先度「２」のタスク＃２である。その結果、優先度の最も高いタスク＃２が選択され、実行される（ステップＳ４１、Ｓ４２、Ｓ７１、Ｓ７２、Ｓ８０）。
【００９９】
時刻ｔ３７でタスク＃２の実行が終了することにより、タスク＃２がスケジューリングの対象から外された上で（ステップＳ２０）、次のスケジューリングが行われる。ここでのスケジューリングの対象は、優先度「３」のシグナルハンドラ処理タスク＃Ｓ、及び優先度「４」のタスク＃２である。その結果、優先度の高いシグナルハンドラ処理タスク＃Ｓが選択され、実行される（ステップＳ４１、Ｓ４２、Ｓ７１、Ｓ７２、Ｓ７３）。シグナルハンドラ処理タスク＃Ｓは、キュー１２内で最も優先度の高いシグナルハンドラＢ１を実行させる（ステップＳ７４）。シグナルハンドラＢ１の実行が終了すると、キュー１２が空になるので、時刻ｔ３８でシグナルハンドラ処理タスク＃Ｓはスリープする（ステップＳ７６，Ｓ７７）。その後、時刻ｔ３９で次のスケジューリングが行われ、残ったタスク＃１が実行される。
【０１００】
図１３の例において、優先度の高いシグナルハンドラＡ１はシグナル発生よりスケジューリングを通して即時に処理されている。その後、タスク＃２、優先度の低いシグナルハンドラＢ１，タスク＃１の順で処理が行われており、優先度の高いシグナルハンドラの即時処理を行いつつ、タスク間ではそれと独立して優先度設計が実現されている。以上のように、本実施の形態のタスクスケジューリング装置５３によれば、シグナルハンドラの即時性を保証しつつ、タスク間の自由な優先度設計を行うことが可能となる。
【０１０１】
（実施の形態の概要）
本発明の実施の形態の概要を以下に記載する。
【０１０２】
（１）あるタスクスケジューリング装置は、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置であって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録部と、シグナルを発生させるシグナル発生部と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行部と、を備えるものである。
【０１０３】
この構成によれば、シグナルハンドラ登録部が登録した内容を参照することにより、発生したシグナルに対応する対象シグナルハンドラとその優先度とが特定され、複数のタスクと対象シグナルハンドラとのうちで、優先度の最も高いものが実行される。すなわち、シグナルハンドラは、自身が属するタスクと独立した優先度で実行される。このため、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。
【０１０４】
（２）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（１）であって、前記複数のタスクの各々とその優先度とを関連づけて記録するとともに前記対象シグナルハンドラとその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、前記選択実行部は、前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラとその優先度とを特定するとともに、前記優先度テーブルに前記対象シグナルハンドラとその優先度とを関連づけて記録するシグナル通知部と、前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスク又はシグナルハンドラを実行対象として選択する選択部と、前記選択部に選択されたタスク又はシグナルハンドラを実行する実行部と、を備えるものである。
【０１０５】
この構成によれば、タスクと対象シグナルハンドラとが優先度テーブルに記録され、当該優先度テーブルに記録されている優先度に従ってタスク又はシグナルハンドラが、実行対象として選択される。このため、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。すなわち、シグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立が、簡単な構成によって実現される。
【０１０６】
（３）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（２）であって、前記シグナル通知部は、前記実行部がシグナルハンドラの実行を終了すると、実行が終了した当該シグナルハンドラについての記録を前記優先度テーブルから消去するものである。
【０１０７】
この構成によれば、シグナルハンドラの実行が終了すると、実行が終了したシグナルハンドラについての記録が優先度テーブルから消去されるので、選択部は実行終了についての情報を別途受け取ることなく、優先度テーブルのみを参照することによって、実行終了後のシグナルハンドラを選択の対象から外すことができる。すなわち、より簡素な構成で、シグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立を達成することができる。
【０１０８】
（４）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（１）であって、前記複数のタスクの各々とその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、前記シグナルハンドラ登録部は、前記１以上のタスクが有するシグナルハンドラの前記各々と当該各々に対応するシグナルと当該各々の優先度とに加えて、当該各々に対応するタスクを互いに関連づけて登録するものであり、前記選択実行部は、前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラとその優先度である対象優先度と当該対象シグナルハンドラに対応するタスクである対象タスクとを特定するシグナル通知部と、前記優先度テーブルに記録される前記複数のタスクのうち前記対象タスクの優先度を、前記対象優先度に変更する優先度変更部と、前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスクを実行対象として選択する選択部と、前記選択部に選択された前記タスクが前記対象タスクでなければ選択された前記タスクを実行するとともに、選択された前記タスクが前記対象タスクであれば前記対象シグナルハンドラを実行する実行部と、を備えるものである。
【０１０９】
この構成によれば、タスクが優先度テーブルに記録されるとともに、記録されたタスクのうち発生したシグナルに対応する対象タスクの優先度が、発生したシグナルに対応する対象シグナルハンドラの優先度に変更される。また、優先度テーブルに記録されている優先度に従ってタスクが実行対象として選択されるとともに、対象タスクが選択された場合には、対応する対象シグナルハンドラが実行される。このため、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。すなわち、シグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立が、簡単な構成によって実現される。
【０１１０】
（５）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（４）であって、前記優先度変更部は、前記実行部が前記対象シグナルハンドラの実行を終了すると、前記優先度テーブルに記録される前記複数のタスクのうち、実行が終了した前記対象シグナルハンドラに対応する前記対象タスクの優先度を、前記対象優先度に変更する前の優先度に戻すものである。
【０１１１】
この構成によれば、シグナルハンドラの実行が終了すると、実行が終了したシグナルハンドラに対応するタスクの優先度が本来の優先度に戻されるので、選択部は実行終了についての情報及びタスクの本来の優先度についての情報を別途受け取ることなく、優先度テーブルのみを参照することによって、本来の優先度に基づくタスクの選択を行うことができる。すなわち、より簡素な構成で、シグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立を達成することができる。
【０１１２】
（６）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（１）であって、前記複数のタスクの各々とその優先度とを関連づけて記録するための優先度テーブルを、さらに備え、前記複数のタスクが、可変の優先度を付与され、実行すべきシグナルハンドラを登録するためのキューを有し、呼び出されて実行される際には前記キューに登録されたシグナルハンドラのうち優先度の最も高い最高優先度ハンドラを実行させるシグナルハンドラ処理タスクを含み、前記選択実行部は、前記シグナルハンドラ登録部が登録した内容を参照することにより、前記対象シグナルハンドラを特定するとともに、当該対象シグナルハンドラを前記キューへ登録するシグナル通知部と、前記キューの登録内容に変更があったときに、前記シグナルハンドラ登録部が登録した内容を参照することにより、前記キューに登録されているシグナルハンドラの中から前記最高優先度ハンドラを特定するとともに、前記優先度テーブルに記録される前記シグナルハンドラ処理タスクの優先度を、特定された前記最高優先度ハンドラの優先度に変更する優先度変更部と、前記優先度テーブルを参照し、前記優先度テーブルに記録された複数の優先度のうちの最も高い優先度に対応するタスクを実行対象として選択する選択部と、前記選択部が選択したタスクを実行する実行部と、を備えるものである。
【０１１３】
この構成によれば、タスクがシグナルハンドラ処理タスクを含んでおり、発生したシグナルに対応する対象シグナルハンドラがシグナルハンドラ処理タスクのキューへ登録され、それに伴ってシグナルハンドラ処理タスクの優先度がキュー内の最高優先度ハンドラの優先度に変更される。そして、タスクが優先度テーブルに記録されるとともに、優先度テーブルに記録されている優先度に従ってタスクが実行対象として選択される。更に、シグナルハンドラ処理タスクが選択された場合には、キュー内の最高優先度ハンドラが実行される。このため、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。すなわち、シグナルハンドラの応答性と、タスク間の優先度設計の自由度との両立が、簡単な構成によって実現される。
【０１１４】
（７）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（６）であって、前記シグナルハンドラ処理タスクは、前記最高優先度ハンドラの実行が終了すると、前記キューから実行の終了した前記最高優先度ハンドラの登録を消去するものである。
【０１１５】
この構成によれば、最高優先度シグナルハンドラの実行が終了すると、実行が終了した最高優先度シグナルハンドラの登録がキューから消去される。その結果、キューの登録内容の変更に伴い、優先度テーブルに記録されるシグナルハンドラ処理タスクの優先度がキュー内の新たな最高優先度ハンドラの優先度に変更される。このため、優先度テーブルに記録されている優先度に従って選択部がタスクを実行対象として選択するという簡素な構成で、タスクと独立した優先度に応じてシグナルハンドラを段階的に実行させることができる。
【０１１６】
（８）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（２）ないし（７）のいずれかであって、前記１以上のタスクからの登録指示により当該１以上のタスクの優先度を前記優先度テーブルに登録するタスク登録部を、さらに備えるものである。
【０１１７】
この構成によれば、タスク登録部が備わるので、各タスクは自身の優先度を優先度テーブルに登録することができる。
【０１１８】
（９）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（８）であって、前記タスク登録部は、前記優先度テーブルに登録されている前記１以上のタスクの優先度を、当該１以上のタスクからの変更指示により変更するものである。
【０１１９】
この構成によれば、各タスクは優先度テーブルに登録されている自己の優先度を、タスク登録部を通じて変更することができる。
【０１２０】
（１０）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（９）であって、前記１以上のタスクのうちの一つである特定タスクが出力するデータを一時保持するバッファと、前記バッファが保持するデータの量が所定の基準量を超えて減少したときに前記シグナル発生部に通知をするバッファ管理部と、を更に備え、前記特定タスクは、前記タスク登録部に指示することにより前記優先度テーブルに登録されている当該特定タスクの優先度を高く変更させる特定シグナルハンドラを有しており、前記シグナル発生部は前記通知を受けると前記特定ハンドラに対応するシグナルを発生させるものである。
【０１２１】
この構成によれば、バッファが保持する特定タスクからのデータの量が基準量を超えて減少すると、特定ハンドラに対応するシグナルが発生し、特定ハンドラが実行されることにより、優先度テーブルに登録されている特定タスクの優先度が高く変更される。その後は、特定タスクが高い優先度で選択・実行されるので、データの出力が促進される。それにより、バッファ内のデータの枯渇が抑制される。その結果、バッファから取り出すべきデータが途切れるという不都合を抑制することができる。
【０１２２】
（１１）あるタスクスケジューリング装置は、好ましくは、タスクスケジューリング装置（１）ないし（１０）の何れかであって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて前記シグナルハンドラ登録部が登録するためのシグナルハンドラテーブルをさらに備え、前記選択実行部は、前記シグナルハンドラ登録部が登録した内容として前記シグナルハンドラテーブルを参照するものである。
【０１２３】
この構成によれば、シグナルハンドラ登録部が登録するためのシグナルハンドラテーブルが備わるので、シグナルハンドラ登録部はシグナルハンドラテーブルに登録内容を書き込むことにより登録を行うことができ、選択実行部はシグナルハンドラテーブルを参照することにより登録内容を参照することができる。
【０１２４】
（１２）あるタスクスケジューリング方法は、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング方法であって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録工程と、シグナルを発生させるシグナル発生工程と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行工程と、を備えるものである。
【０１２５】
この構成によれば、タスクスケジューリング装置（１）について述べたと同様の理由により、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。
【０１２６】
（１３）あるタスクスケジューリングプログラムは、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムであって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、シグナルを発生させるシグナル発生手段と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのものである。
【０１２７】
この構成によれば、タスクスケジューリング装置（１）について述べたと同様の理由により、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。
【０１２８】
（１４）ある記録媒体は、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムを記録したコンピュータ読み取り可能な記録媒体であって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、シグナルを発生させるシグナル発生手段と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのタスクスケジューリングプログラムを記録したものである。
【０１２９】
この構成によれば、タスクスケジューリング装置（１）について述べたと同様の理由により、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。
【０１３０】
（１５）ある伝送媒体は、優先度の付与された１以上のシグナルハンドラを各々が有する１以上のタスクを含み優先度の付与された複数のタスクを、並列的に処理するタスクスケジューリング装置としてコンピュータを機能させるためのタスクスケジューリングプログラムを保持する伝送媒体であって、前記１以上のタスクが有するシグナルハンドラの各々と当該各々に対応するシグナルと当該各々の優先度とを互いに関連づけて登録するシグナルハンドラ登録手段と、シグナルを発生させるシグナル発生手段と、前記シグナルハンドラ登録部が登録した内容を参照することにより、発生した前記シグナルに対応するシグナルハンドラである対象シグナルハンドラとその優先度とを特定し、前記複数のタスクと前記対象シグナルハンドラとのうちで、優先度の最も高いものを実行する選択実行手段として前記コンピュータを機能させるためのタスクスケジューリングプログラムを保持するものである。
【０１３１】
この構成によれば、タスクスケジューリング装置（１）について述べたと同様の理由により、シグナルハンドラの優先度を高く付与することにより、タスク間の優先度の設計の自由度を妨げることなくシグナルに対するシグナルハンドラの即応性が高められる。
【０１３２】
本願は、日本国特許出願である特願２００３−４３３１０６号（２００３年１２月２６日出願）を基礎としている。本基礎出願の内容は本願に合体される。
【０１３３】
本発明は詳細に説明されたが、上記した説明は、全ての局面において例示であって、本発明がそれに限定されるものではない。例示されていない無数の変形例が、この発明の範囲から外れることなく想定され得るものと解される。
【産業上の利用可能性】
【０１３４】
本発明のタスクスケジューリング装置、タスクスケジューリング方法、タスクスケジューリングプログラム、記録媒体、及び伝送媒体は、シグナルに対するシグナルハンドラの即応性を保証しつつ、タスクの優先度設計を自由に行うことを可能にするので産業上有用である。また、本発明にかかるタスクスケジューリング技術は、計算機装置（コンピュータ）を用いるものであれば、幅広い分野において有効に利用可能である。例えば本発明にかかるタスクスケジューリング技術は、大型計算機やパーソナルコンピュータのような形態のみならず、各種の家電機器、情報処理装置、携帯電話、産業機器などにも利用可能である。
【図面の簡単な説明】
【０１３５】
【図１】本発明の実施の形態１によるタスクスケジューリング装置の構成を示すブロック図である。
【図２】図１の装置による処理の流れを示すフローチャートである。
【図３】図１の装置による処理の流れを示すフローチャートである。
【図４】図１の装置による処理の一例を説明するタイミングチャートである。
【図５】本発明の実施の形態２によるタスクスケジューリング装置の構成を示すブロック図である。
【図６】図５の装置による処理の流れを示すフローチャートである。
【図７】図１の装置による処理の流れを示すフローチャートである。
【図８】図５の装置による処理の一例を説明するタイミングチャートである。
【図９】図５の装置の更に具体的な形態を例示するブロック図である。
【図１０】本発明の実施の形態３によるタスクスケジューリング装置の構成を示すブロック図である。
【図１１】図１０の装置による処理の流れを示すフローチャートである。
【図１２】図１０の装置による処理の流れを示すフローチャートである。
【図１３】図１０の装置による処理の一例を説明するタイミングチャートである。
【図１】
2007519061.tif 000003
【図２】
2007519061.tif 000004
【図３】
2007519061.tif 000005
【図４】
2007519061.tif 000006
【図５】
2007519061.tif 000007
【図６】
2007519061.tif 000008
【図７】
2007519061.tif 000009
【図８】
2007519061.tif 000010
【図９】
2007519061.tif 000011
【図１０】
2007519061.tif 000012
【図１１】
2007519061.tif 000013
【図１２】
2007519061.tif 000014
【図１３】
2007519061.tif 000015
【国際調査報告】
2007519061.tif 000016
2007519061.tif 000017