(57)【要約】【課題】強制的な終了や強制的な待ち状態への移行を、シグナル機能を用いて実現するオペレーティングシステムにおいても、タスク切り替え処理時間の保証が可能になるタスク制御装置を提供する。【解決手段】複数のタスクを、優先度が上位のタスクから優先して実行させるタスク制御装置であって、（ａ）タスク毎に設定された優先度を管理する優先度管理部２２２ａと、（ｂ）第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付けるシステムコールインターフェース２１０ａと、（ｃ）強制変更要求を受け付けると、優先度管理部２２２ａにおいて管理されている優先度のうち、第１のタスクに設定されている優先度を変更する優先度変更部２７０ａとを備える。【選択図】図１
2007140753.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクを、優先度が上位のタスクから優先して実行させるタスク制御装置であって、
タスク毎に設定された優先度を管理する管理手段と、
第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付ける受付手段と、
前記強制変更要求を受け付けると、前記管理手段において管理されている優先度のうち、前記第１のタスクに設定されている優先度を変更する変更手段と
を備えることを特徴とするタスク制御装置。
【請求項２】
前記変更手段は、前記第１のタスクに設定されている優先度を、前記第１のタスクに設定される優先度の範囲において予め予約されている優先度に変更する
ことを特徴とする請求項１に記載のタスク制御装置。
【請求項３】
前記変更手段は、前記第１のタスクに設定されている優先度を、前記第１のタスクに設定される優先度の範囲のうちの最上位および最下位のいずれかに変更し、
前記タスク制御装置は、さらに、
前記第１のタスクに設定されている優先度の変更に伴い、変更後の優先度と同一の優先度が設定されている第３のタスクよりも、前記第１のタスクを上位および下位のいずれかとしてスケジューリングするスケジューリング手段
を備えることを特徴とする請求項１に記載のタスク制御装置。
【請求項４】
タスクの状態を強制的に変更されたか否かが識別される情報を識別情報とした場合において、
前記管理手段は、タスク毎に設定された前記識別情報を管理する
ことを特徴とする請求項１に記載のタスク制御装置。
【請求項５】
前記管理手段は、前記第１のタスクに設定されている優先度の変更に伴い、変更前の優先度を保持する
ことを特徴とする請求項１に記載のタスク制御装置。
【請求項６】
前記タスク制御装置は、さらに、
前記第１のタスクの状態を強制待ち状態に移行させるシグナルを受信した場合は、前記第１のタスクに設定されている優先度を、前記変更前の優先度に設定するシグナル受信手段
を備えることを特徴とする請求項５に記載のタスク制御装置。
【請求項７】
前記受付手段は、前記強制変更要求に従って強制的に変更されたタスクの状態を解除する強制解除要求を受け付け、
前記変更手段は、前記強制解除要求を受け付けると、前記第１のタスクに設定されている優先度を、前記変更前の優先度に変更する
ことを特徴とする請求項５に記載のタスク制御装置。
【請求項８】
前記受付手段は、前記第１のタスクに設定されている優先度を変更する優先度変更要求と、変更後の優先度とを受け付け、
前記変更手段は、前記優先度変更要求を受け付けると、前記第１のタスクに設定されている優先度を、前記変更後の優先度に変更する
ことを特徴とする請求項５に記載のタスク制御装置。
【請求項９】
前記タスク制御装置は、さらに、
前記第１のタスクの状態を強制待ち状態に移行させる強制待ちシグナルと、前記第１のタスクの状態を強制終了状態に移行させる強制終了シグナルとのうち、前記強制終了シグナルを優先して受信するシグナル受信手段
を備えることを特徴とする請求項１に記載のタスク制御装置。
【請求項１０】
複数のタスクを、優先度の高いものから優先して実行させるタスク制御方法であって、
タスク毎に設定された優先度を管理する管理ステップと、
第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付ける受付ステップと、
前記強制変更要求を受け付けると、前記管理手段において管理されている優先度のうち、前記第１のタスクに設定されている優先度を変更する変更ステップと
を含むことを特徴とするタスク制御方法。
【請求項１１】
複数のタスクを、優先度の高いものから優先して実行させるタスク制御プログラムであって、
タスク毎に設定された優先度を管理する管理ステップと、
第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付ける受付ステップと、
前記強制変更要求を受け付けると、前記管理手段において管理されている優先度のうち、前記第１のタスクに設定されている優先度を変更する変更ステップと
をコンピュータシステムに実行させることを特徴とするタスク制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のタスクを並行して実行するシステムにおいて、あるタスクを対象にして強制的に状態を変化させる処理を伴う場合に、タスク切り替え処理のリアルタイム性を保証するタスク制御方法および装置に関する。
【背景技術】
【０００２】
従来、複数のタスクを制御するオペレーティングシステムでは、リアルタイム性を保証する手段の一つとして優先度に従ったタスクのスケジューリングを行う。すなわち複数のタスクのそれぞれに優先度を付けておいて、高い優先度のタスクを優先して実行させる。
【０００３】
また、オペレーティングシステムの機能には、現在実行中のタスクが、あるタスクの状態を強制的に変化させることができるものがある。強制的な状態の変化とは、強制的に終了させたり、強制的に待ち状態に移行させたりすることである。
【０００４】
Ｌｉｎｕｘ（登録商標）のような汎用的なオペレーティングシステムにおいても、タスクに優先度を与え、高い優先度のタスクを優先して実行させることが可能であり、あるタスクの状態を強制的に変化させる場合は、シグナル機能を用いて実現している。
【０００５】
図３１は、汎用的なオペレーティングシステムにおいて、シグナル機能によって強制的にタスクの状態を変化させる機能を実現する場合の構成図である。
【０００６】
まず、オペレーティングシステム実行部２００で動作するタスクは、強制的な終了や強制的な待ち状態への移行を識別できるシグナルに応じた処理を行うシグナルハンドラをあらかじめ登録しておくか、もしくは、オペレーティングシステム実行部２００でデフォルトの動作が決められている。
【０００７】
そして、あるタスクを対象にして強制的な終了や強制的な待ち状態に移行させる要求をシステムコールインターフェース２１０に発行し、シグナル送信部２５０は、その対象タスクに強制的な終了もしくは強制的な待ち状態への移行を識別できるシグナルを送信する。
【０００８】
送信されたシグナルは即座に対象タスクが受信するのではなく、対象タスクがＣＰＵの実行権利を得た後に受信できるものである。
【０００９】
ディスパッチ部２４０によって強制的な終了や強制的な待ち状態に移行させる対照となるタスクにＣＰＵの実行権利が切り替えられた後に、シグナル受信部２６０がシグナルを受信し、受信したシグナルに応じて、あらかじめ登録されていたシグナルハンドラが呼び出される。
【００１０】
そのシグナルハンドラにて、現在ＣＰＵの実行権利があるタスク自らが終了や待ち状態への移行の要求をシステムコールインターフェース２１０に発行することで、強制的な終了や強制的な待ち状態への移行を実現している。
【００１１】
図３２は、従来技術において、タスクを強制的に終了させる処理の例を示したタイミングチャートである。
【００１２】
図３２のタイミングチャートにおいて、水平方向の直線はタスクの実行状態を表す。太線は現在ＣＰＵの実行権利が与えられている現在実行中のタスクであり、細い実線は実行可能状態であるタスク、点線は待ち状態であるタスク、波線は終了したタスクであることを表す。
【００１３】
さらに太線について、白塗りの太線はタスク内の実行を表し、黒塗りの太線はオペレーティングシステム内の実行を表し、網掛けの太線はシグナルハンドラ内の実行を表す。括弧内の数値はタスクの優先度を数値で表し、特に表記がない場合は、最新の優先度を継続しているとする。
【００１４】
３つのタスクが動作しているとし、それぞれタスクＡ、タスクＢ、タスクＣとする。タスクの優先度を数値で表すと、それぞれ、[１０]、[２０]、[３０]であるとし、数値が小さい程、優先度が高い。
【００１５】
時刻ｔ１において、タスクＡが現在実行中であり、タスクＢ、タスクＣは、実行可能状態である。また、タスクＢは終了処理を行うシグナルハンドラＢをあらかじめ登録している。
【００１６】
時刻ｔ２において、タスクＡがタスクＢを強制的に終了させる要求を出す。シグナル送信部２５０は、タスクＢに対して強制終了を識別するシグナルを送信する。
【００１７】
時刻ｔ３において、オペレーティングシステム実行部２００は、強制的に終了させる要求の処理を完了し、タスクＡにリターンする。
【００１８】
時刻ｔ４において、タスクＡが資源獲得の要求、例えばセマフォを獲得する要求を出す。タスクＡが獲得しようとしたセマフォ資源はすべて使用されていたとすると、オペレーティングシステム実行部２００は、タスクＡをセマフォ獲得の待ち状態にする。タスクＡが待ち状態に移行するため、次に実行すべきタスクは実行可能状態のタスクの中で最も高い優先度（最上位の優先度）[２０]のタスクＢとなる。
【００１９】
時刻ｔ５において、タスクＢは、実行状態に切り替わる。シグナル受信部２６０は、タスクＢのタスク内に戻る前に強制終了を識別するシグナルを受信し、タスクＢに登録されたシグナルハンドラＢを呼び出す。
【００２０】
時刻ｔ６において、シグナルハンドラＢが起動し、時刻ｔ７において、シグナルハンドラＢが現在実行中のタスクを終了する要求を出す。オペレーティングシステム実行部２００は、現在実行中のタスクすなわちタスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクは実行可能状態のタスクの中で最も高い優先度（最上位の優先度）として[３０]の数値を持つタスクＣとなる。
【００２１】
時刻ｔ８において、タスクＣに実行状態が切り替わり、時刻ｔ９において、オペレーティングシステム実行部２００内の処理からタスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【非特許文献１】ダニエル・Ｐ．ボベット，マルコ  セサティ  著／高橋浩和，高杉昌督，平松雅巳，杉田由美子，畑崎恵介，安井隆宏  訳、「詳解Ｌｉｎｕｘ（登録商標）カーネル  第２版」（株）オライリー・ジャパン、２００３年６月２４日  初版第１刷発行、ｐ．１７４−１７７，３８５−４０１
【非特許文献２】高橋浩和，三好和人  著、「リナックスジャパン  ２００１年２月号」（株）五橋研究所、２００１年２月１日発行、ｐ．１５９−１７６
【発明の開示】
【発明が解決しようとする課題】
【００２２】
しかしながら、前記の従来技術においては、セマフォ獲得待ちなどによるタスク切り替え処理の過程に、強制的な終了や強制的な待ち状態へ移行の対象になるタスクのシグナルハンドラ処理が実行され、タスクの切り替え処理時間の保証ができないという問題がある。
【００２３】
図３２のタイミングチャートでは、優先度[１０]のタスクＡがセマフォ獲得の要求を発行し、その結果セマフォ獲得待ち状態になることによって、優先度[３０]のタスクＣが実行状態に切り替わる過程、すなわち時刻ｔ４から時刻ｔ９の過程に優先度[２０]のタスクＢが強制終了を行うためのシグナルハンドラＢの処理が含まれることになる。つまりセマフォ獲得の要求処理時間は、強制的な終了を行うタスクに依存して変動し、その時間の保証ができない。
【００２４】
そこで、本発明は、前記問題に鑑みてなされたものであり、強制的な終了や強制的な待ち状態への移行を、シグナル機能を用いて実現するオペレーティングシステムにおいても、タスク切り替え処理時間の保証が可能になるタスク制御装置およびを提供することである。
【課題を解決するための手段】
【００２５】
前記目的を達成するために、本発明に係るタスク制御装置は、（ａ）複数のタスクを、優先度が上位のタスクから優先して実行させるタスク制御装置であって、（ａ１）タスク毎に設定された優先度を管理する管理手段と、（ａ２）第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付ける受付手段と、（ａ３）前記強制変更要求を受け付けると、前記管理手段において管理されている優先度のうち、前記第１のタスクに設定されている優先度を変更する変更手段とを備えることを特徴とする。
【００２６】
これによって、強制的に状態を変化させる対象となるタスクのシグナルハンドラ処理の影響を受けずにタスク切り替えを行うため、タスク切り替え処理時間の保証ができる。
【００２７】
なお、本発明は、タスク制御装置として実現されるだけでなく、タスク制御装置を制御するタスク制御方法、タスク制御方法をコンピュータシステムに実行させるタスク制御プログラムなどとして実現されるとしてもよい。
【発明の効果】
【００２８】
本発明に係るタスク制御装置によれば、強制的に状態を変化させる対象となるタスクのシグナルハンドラ処理の影響を受けずにタスク切り替えを行うため、タスク切り替え処理時間の保証ができる。
【発明を実施するための最良の形態】
【００２９】
(実施の形態１)
以下に、本発明に係わる実施の形態１について、図面を参照しながら説明する。
【００３０】
本実施の形態に係るタスク制御装置は、（ａ）複数のタスクを、優先度が上位のタスクから優先して実行させるタスク制御装置であって、（ａ１）タスク毎に設定された優先度を管理し、（ａ２）第１のタスクの状態を強制的に変更する強制変更要求を第２のタスクから受け付け、（ａ３）強制変更要求を受け付けると、管理されている優先度のうち、第１のタスクに設定されている優先度を変更することを特徴とする。
【００３１】
このとき、タスク制御装置は、第１のタスクに設定されている優先度を、第１のタスクに設定される優先度の範囲において予め予約されている優先度（最上位の優先度）に変更する。
【００３２】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。
図１は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図１に示されるように、タスク制御装置１００ａは、オペレーティングシステム実行部２００ａにおいて、強制的にタスクの状態を変化させる機能を備える。
【００３３】
オペレーティングシステム実行部２００ａは、ハードウェア資源（例えば、図２参照。）上で、Ｌｉｎｕｘ（登録商標）などのような汎用的なオペレーティングシステムを実行する。
【００３４】
ここでは、オペレーティングシステム上で複数のタスクが動作しているとする。ここで、「タスク」とは、オペレーティングシステム上での処理の実行単位を意味する。図１では、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。これに伴い、タスクＡ実行部３００ａは、タスクＡを実行する。タスクＢ実行部３１０ａは、タスクＢを実行する。タスクＣ実行部３２０ａは、タスクCを実行する。
【００３５】
オペレーティングシステム実行部２００ａは、システムコールインターフェース２１０ａ、タスク情報管理部２２０ａ、スケジューリング部２３０ａ、ディスパッチ部２４０ａ、優先度変更部２７０ａ、シグナル送信部２５０ａ、シグナル受信部２６０ａなどを備える。
【００３６】
システムコールインターフェース２１０ａは、タスクＡ実行部３００ａ、タスクＢ実行部３１０ａ、タスクＣ実行部３２０ａからオペレーティングシステム実行部２００ａで定められた要求を受け付け、それぞれの要求に応じた処理を実行する。例えば、Ｌｉｎｕｘ（登録商標）等の汎用的なオペレーティングシステムで提供される機能が使用できるものとする。その要求として、（１）資源獲得や資源開放の要求、（２）待ち状態への移行の要求、（３）待ち状態を解除させる要求、（４）現在実行中のタスクを終了する要求などがある。さらに、上記（１）〜（４）に記された要求に加えて、（５）強制的にタスクを終了させる要求、（６）強制的な待ち状態にさせる要求、（７）強制的な待ち状態を解除する要求も受け付けるとする。
【００３７】
システムコールインターフェース２１０ａがこれらの要求を受け付けるときに、入力される情報がオペレーティングシステム実行部２００ａによって定められている。例えば、資源獲得の要求である場合は、資源を識別する情報が入力される。また、タスクを強制的に終了させる要求である場合は、強制的に終了させるタスクを識別する情報が入力される。
【００３８】
システムコールインターフェース２１０ａは、要求に応じた処理を実施するにあたって、タスクに関する情報の変更や参照を行う場合は、タスク情報管理部２２０ａと情報の入出力を行う。
【００３９】
タスク情報管理部２２０ａは、少なくともタスクの実行状態を格納する状態管理部２２１ａ、タスクを実行する優先順位を表す優先度を格納する優先度管理部２２２ａなどを備える。状態管理部２２１ａで格納されるタスクの実行状態は、少なくとも実行可能状態と待ち状態があり、実行可能状態のタスクのうち、最も優先度が高いタスクが現在実行中のタスクとなる。また、タスク情報管理部２２０ａは、それぞれのタスク毎に用意され、状態管理部２２１ａと優先度管理部２２２ａとは、タスク情報管理部２２０ａに含まれているのが望ましい。
【００４０】
スケジューリング部２３０ａは、レディキューの操作を行う。レディキューとは、タスク情報管理部２２０ａにおける優先度管理部２２２ａの情報に基づき、実行可能状態のタスクを実行する順番にタスク情報管理部２２０ａのポインタを管理するリスト構造である。レディキューの操作とは、タスク情報管理部２２０ａの情報に基づき、実行可能状態になるタスクをレディキューの適切な場所にキューイングしたり、現在実行中のタスクが待ち状態になる場合は、レディキューから削除したりすることを意味する。また、スケジューリング部２３０ａは、レディキューから実行する優先順位が高いタスクを次に実行すべきタスクとして選択し、そのタスクを識別する情報をディスパッチ部２４０ａに出力する。
【００４１】
ディスパッチ部２４０ａは、スケジューリング部２３０ａから次に実行すべきタスクを識別する情報を入力として受け取り、現在実行中のタスクから次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替える。
【００４２】
オペレーティングシステム実行部２００ａは、強制的にタスクの状態を変化させるシグナルを送信するシグナル送信部２５０ａと、シグナル送信部２５０ａから送信されたシグナルを格納するシグナル管理部２２３ａと、シグナル管理部２２３ａからシグナルを受信してそのシグナルに応じたシグナルハンドラを呼び出すシグナル受信部２６０ａとを有し、強制的にタスクの状態を変化させる対象となるタスクの優先度を変更する優先度変更部２７０ａを、さらに有している。
【００４３】
シグナル管理部２２３ａは、タスクごとに情報を持つため、タスク情報管理部２２０ａに含んでいるのが望ましい。
【００４４】
シグナルハンドラとは、タスクごとにシグナルの種類ごとに登録できる処理単位であり、図１では、強制的に状態を変化させるシグナルに対応するシグナルハンドラＡがタスクＡに、シグナルハンドラＢがタスクＢに、シグナルハンドラＣがタスクＣに登録されているとする。
【００４５】
シグナル送信部２５０ａは、システムコールインターフェース２１０ａからシグナルを識別する情報と、そのシグナルの送信相手となるタスクを識別する情報とを入力として、シグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａを特定し、シグナル管理部２２３ａにシグナルを送信する。また、シグナルの送信相手となるタスクを識別する情報を優先度変更部２７０ａに出力する。
【００４６】
優先度変更部２７０ａは、シグナル送信部２５０ａからシグナルの送信相手となるタスクを識別する情報を入力として受け取り、シグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａを特定し、優先度管理部２２２ａの優先度を変更する。
【００４７】
シグナル管理部２２３ａは、少なくとも、強制的にタスクを終了させる要求であることを識別できる強制終了シグナルと、強制的にタスクを待ち状態に移行させる要求であることを識別できる強制待ちシグナルとを格納する。
【００４８】
シグナル受信部２６０ａは、ディスパッチ部２４０ａが次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替えた後、そのタスクの処理に戻る前に、そのタスクに対応するタスク情報管理部２２０ａのシグナル管理部２２３ａに格納してあるシグナルを受信し、そのタスクに登録されたシグナルハンドラを呼び出す。また、シグナル受信部２６０ａは、シグナルハンドラを呼び出す際、受信したシグナルを識別する情報をシグナルハンドラに引き渡す。
【００４９】
また、シグナル受信部２６０ａは、シグナル管理部２２３ａからシグナルを受信すると、そのシグナルをシグナル管理部２２３ａから削除する。また、システムコールインターフェース２１０ａは、シグナルハンドラからオペレーティングシステム実行部２００ａで定められた要求を受け付け、それぞれの要求に応じた処理を実行する。
【００５０】
なお、図２に示されるように、タスク制御装置１００ａは、ＣＰＵ（Central Processing Unit）１０１ａ、ＲＡＭ（Random Access Memory）１０２ａ、ＲＯＭ（Read Only Memory）１０３ａ、Ｉ／Ｏ（Input/Output interface）１０４ａ、ＨＤＤ（Hard Disk Drive）などを備える。
【００５１】
ＣＰＵ１０１ａは、タスク制御処理を実行するにあたって要する諸々の処理を実行する中央演算処理ユニットである。
【００５２】
ＲＡＭ１０２ａは、データの読み出し書き込みが随時可能な半導体メモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）やＳＲＡＭ（Static Random Access Memory）などである。
【００５３】
ＲＯＭ１０３ａは、読み出し専用のメモリである。例えば、電気的に内容を書き換えることができるＥＥＰＲＯＭ（Electronically Erasable and Programmable Read Only Memory）などである。
【００５４】
Ｉ／Ｏ１０４ａは、図には示されてはいないが、タスク制御装置１００ａに接続されている内部機器と外部機器とに対してデータの入出力を行う入出力インターフェースである。例えば、（ａ）Ｂｌｕｅｔｏｏｔｈ、ＩｒＤＡ（Infrared Data Association）、赤外線通信ポート等のような短距離無線伝送インターフェース、（ｃ）ＵＳＢ（Universal Serial Bus）、ＩＥＥＥ（Institute of Electrical and Electronics Engineers）１３９４、シリアルＡＴＡ（AT Attachment）等のようなシリアル伝送インターフェース、（ｄ）ＡＴＡＰＩ（AT Attachment Packet Interface）等のようなパラレル伝送インターフェース、（ｅ）ＩＥＥＥ８０２．３、ＩＥＥＥ８０２．１１等のようなネットワークインターフェースなどである。
【００５５】
ＨＤＤ１０５ａは、Ｌｉｎｕｘ（登録商標）などのような汎用的なオペレーティングシステムと、オペレーティングシステム上で動作するプログラムがインストールされており、オペレーティングシステムとプログラムが実行されることによって、タスク制御装置の各機能が実現される。
【００５６】
本実施の形態に係るタスク制御装置において、タスクを強制的に終了させる処理の詳細を、図３を用いて説明する。
【００５７】
図３は、本実施の形態に係るタスク制御装置において、強制的にタスクを終了させる要求のメイン処理を示すフローチャートである。
【００５８】
シグナル送信部２５０ａは、システムコールインターフェース２１０ａから、強制終了シグナルと、その強制終了シグナルの送信相手となるタスクを識別する情報とを受け取り、強制終了シグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａを特定し、シグナル管理部２２３ａに強制終了シグナルを格納する（ステップＳ４０１）。
【００５９】
次に、優先度変更部２７０ａは、シグナル送信部２５０ａから、強制終了シグナルの送信相手となるタスクを識別する情報を受け取り、強制終了シグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、優先度管理部２２２ａに最も高い優先度（最上位の優先度）を格納する（ステップＳ４０２）。
【００６０】
ここで、最も高い優先度（最上位の優先度）とは、オペレーティングシステム実行部２００ａが強制的に状態を変化させるタスクの優先度を制御するためにあらかじめ予約されている優先度であるとする。例えば、オペレーティングシステム実行部２００ａがタスクに与える優先度として[１]から[９９]の数値を扱うとする場合、最も優先度が高い[１]の数値を予約しておく。
【００６１】
次に、優先度変更部２７０ａは、強制終了シグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａの状態管理部２２１ａを参照し（ステップＳ４０３）、実行可能状態でない場合は（ステップＳ４０３：Ｎｏ）、強制終了シグナルの送信相手となるタスクの待ち解除を行う。すなわち、強制終了シグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａの状態管理部２２１ａに実行可能状態を設定する（ステップＳ４０４）。
【００６２】
一方、実行可能状態である場合は（ステップＳ４０３：Ｙｅｓ）、スケジューリング部２３０ａは、強制的に終了させるタスクをレディキューにリンクしなおす。このとき、強制的に終了させるタスクに対応するタスク情報管理部２２０ａの優先度管理部２２２ａに格納される優先度に応じて、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を満足するようにリンクする（ステップＳ４０５）。
【００６３】
次に、スケジューリング部２３０ａは、レディキューで管理される実行可能状態のタスクの中で最も実行優先順位の高いタスク、すなわち強制的に終了させるタスクを次に実行すべきタスクとして選択する（ステップＳ４０６）。
【００６４】
次に、ディスパッチ部２４０ａは、現在実行中のタスクから次に実行すべきタスク、すなわち強制的に終了させるタスクにＣＰＵ１０１ａの実行権利を切り替える（ステップＳ４０７）。これにより、強制的に終了させるタスクにＣＰＵ１０１ａの実行権利を切り替えることができ、シグナル受信部２６０ａは、強制的に終了させるタスクに送信されている強制終了シグナルを受信し、シグナルハンドラを呼び出すことができる。
【００６５】
図４は、本実施の形態に係るタスク制御装置において、強制的に終了させるタスクに送信された強制終了シグナルに対応するシグナルハンドラで行う処理の例を示したフローチャートである。
【００６６】
オペレーティングシステム実行部２００ａは、システムコールインターフェース２１０ａに現在実行中のタスクを終了する要求を出す（ステップＳ５０１）。現在実行中のタスクを終了する要求は、オペレーティングシステム実行部２００ａが提供する機能であるため、詳細な説明は省略する。現在実行中のタスクを終了する要求によって、現在実行中のタスク、すなわち強制的に終了させるタスクは、オペレーティングシステム実行部２００ａによって終了処理が行われ、次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替える。
【００６７】
次に、本実施の形態に係るタスク制御装置について、タスクを強制的に待ち状態に移行させる処理について説明する。
【００６８】
図５は、本実施の形態に係るタスク制御装置について、強制的にタスクを待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【００６９】
図５に示されるように、シグナル送信部２５０ａは、システムコールインターフェース２１０ａから、強制待ちシグナルと、その強制待ちシグナルの送信相手となるタスクを識別する情報とを受け取り、強制待ちシグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａを特定し、シグナル管理部２２３ａに強制待ちシグナルを格納する（ステップＳ６０１）。
【００７０】
次に、優先度変更部２７０ａは、シグナル送信部２５０ａから、強制待ちシグナルの送信相手となるタスクを識別する情報を受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、優先度管理部２２２ａに最も高い優先度（最上位の優先度）を格納する（ステップＳ６０２）。
【００７１】
ここで、最も高い優先度（最上位の優先度）とは、オペレーティングシステム実行部２００ａが強制的に状態を変化させ、タスクの優先度を制御するためにあらかじめ予約されている優先度であるとする。例えば、オペレーティングシステム実行部２００ａがタスクに与える優先度として[１]から[９９]の数値を扱うとする場合、最も優先度が高い[１]の数値を予約しておく。
【００７２】
次に、優先度変更部２７０ａは、強制待ちシグナルの送信相手となるタスクに対応するタスク情報管理部２２０ａの状態管理部２２１ａを参照し（ステップＳ６０３）、実行可能状態でない場合は（ステップＳ６０３：Ｎｏ）、この強制的にタスクを待ち状態に移行させるメイン処理からリターンする。一方、実行可能状態である場合は（ステップＳ６０３：Ｙｅｓ）、スケジューリング部２３０ａは、強制的に待ち状態に移行させるタスクをレディキューにリンクしなおす（ステップＳ６０４）。このとき、強制的に待ち状態に移行させるタスクに対応するタスク情報管理部２２０ａの優先度管理部２２２ａに格納される優先度に応じて、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を満足するようにリンクする。
【００７３】
次に、スケジューリング部２３０ａは、レディキューで管理される実行可能状態のタスクの中で最も実行優先順位の高いタスク、すなわち強制的に待ち状態に移行させるタスクを次に実行すべきタスクとして選択する（ステップＳ６０５）。
【００７４】
次に、ディスパッチ部２４０ａは、現在実行中のタスクから次に実行すべきタスク、すなわち強制的に待ち状態に移行させるタスクにＣＰＵ１０１ａの実行権利を切り替える（ステップＳ６０６）。これにより、強制的に待ち状態に移行させるタスクにＣＰＵ１０１ａの実行権利を切り替えることができ、シグナル受信部２６０ａは、強制的に待ち状態に移行させるタスクに送信されている強制待ちシグナルを受信し、シグナルハンドラを呼び出すことができる。
【００７５】
図６は、本実施の形態に係るタスク制御装置において、強制的に待ち状態に移行させるタスクに送信された強制待ちシグナルに対応するシグナルハンドラで行う処理の例を示したフローチャートである。
【００７６】
システムコールインターフェース２１０ａに現在実行中のタスクを待ち状態にする要求を出す（ステップＳ７０１）。現在実行中のタスクを待ち状態にする要求はオペレーティングシステム実行部２００ａが提供する機能を使用する。
【００７７】
例えば、それぞれのタスク毎に強制待ち状態に移行させるためのイベントを予約しておき、強制待ちするタスクはそのイベントが設定されるのを待つ要求を出せばよい。これにより、そのイベントに対して待ち状態に移行できるのは唯一のタスクとなる。強制的な待ち状態に移行させるためのイベントとしては、共有メモリやメッセージ通信などを使用すればよい。現在実行中のタスクを待ち状態にする要求によって、現在実行中のタスク、すなわち強制的に待ち状態に移行させるタスクはオペレーティングシステム実行部２００ａによって待ち状態に移行する処理が行われ、次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替える。
【００７８】
図７は、本実施の形態に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示したタイミングチャートである。タイミングチャートにおいて、水平方向の直線は、タスクの実行状態を表す。太線は、現在ＣＰＵの実行権利が与えられているタスク、すなわち、現在実行中のタスクである。細い実線は、実行可能状態であるタスクである。点線は、待ち状態であるタスクである。波線は、終了したタスクであることを表す。さらに、太線について、白塗りの太線は、タスク内の実行を表し、黒塗りの太線は、オペレーティングシステム内の実行を表し、網掛けの太線は、シグナルハンドラ内の実行を表す。括弧内の数値は、タスクの優先度を表し、特に表記がない場合は、最新の優先度を継続しているとする。
【００７９】
ここでは、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。また、タスクＢには強制終了シグナルに対応するシグナルハンドラＢが登録されているとする。
【００８０】
オペレーティングシステム実行部２００ａは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ａは、強制的に状態を変化させるタスクの優先度を制御するために、最上位の優先度[１]を予約している。
【００８１】
時刻ｔ１において、タスクＡ（優先度[１０]。）が現在実行中である。タスクＢ（優先度[２０]。）、タスクＣ（優先度[３０]。）は、実行可能状態である。
【００８２】
時刻ｔ２において、タスクＡは、タスクＢを強制的に終了させる要求を出す。オペレーティングシステム実行部２００ａは、タスクＢに対して強制終了シグナルを送信し、タスクＢの優先度を予約している優先度（最上位の優先度）に変更する。このとき、オペレーティングシステム実行部２００ａは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。
【００８３】
スケジューリング部２３０ａは、タスクＢをレディキューにリンクしなおし、次に実行すべきタスクとして最も高い優先度（最上位の優先度）を持つ優先度[１]のタスクＢを選択する。
【００８４】
時刻ｔ３において、タスクＢは、実行状態に切り替わる。オペレーティングシステム実行部２００ａは、タスクＢのタスク内に戻る前に強制終了シグナルを受信し、タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢを呼び出す。
【００８５】
時刻ｔ４において、強制終了シグナルに対応するシグナルハンドラＢが起動し、時刻ｔ５において、強制終了シグナルに対応するシグナルハンドラＢが現在実行中のタスクを終了する要求を出す。
【００８６】
オペレーティングシステム実行部２００ａは、現在実行中のタスク、すなわち、タスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクは、優先度[１０]のタスクＡとなる。
【００８７】
時刻ｔ６において、タスクＡに実行状態が切り替わり、オペレーティングシステム実行部２００ａは、強制的に終了させる要求のメイン処理を継続し、時刻ｔ７において、強制的に終了させる要求のメイン処理からタスクＡ内の処理にリターンし、タスクＡは、タスク内の処理を継続する。
【００８８】
時刻ｔ８において、タスクＡが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＡが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ａは、タスクＡをセマフォ獲得の待ち状態にする。タスクＡが待ち状態に移行するため、実行可能状態のタスクの中で最も高い優先度（最上位の優先度）をもつタスクは、優先度[３０]のタスクＣとなる。
【００８９】
時刻ｔ９において、タスクＣに実行状態が切り替わり、時刻ｔ１０において、タスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【００９０】
このように、強制的に終了させるタスクＢの優先度を制御することで、優先度[１０]のタスクＡがセマフォ獲得の要求を発行し、その結果セマフォ獲得待ち状態になる。さらに、優先度[３０]のタスクＣは、実行状態に切り替わる過程、すなわち、時刻ｔ８から時刻ｔ１０の過程に、優先度[２０]のタスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢで自ら終了の要求を発行する処理が含まれなくなる。そして、タスクＡからタスクＣへのタスク切り替え処理時間、すなわち、時刻ｔ８から時刻ｔ１０の処理時間の保証ができるようになる。
【００９１】
なお、タスクを強制的に待ち状態に移行させる処理についても、図７と同様のタイミングチャートで表すことができるため、説明は省略する。
【００９２】
(実施の形態２)
次に、本発明に係る実施の形態２について、図面を参照しながら説明する。
【００９３】
本実施の形態に係るタスク制御装置は、第１のタスクに設定されている優先度を、第１のタスクに設定される優先度の範囲のうちの最上位に変更し、第１のタスクに設定されている優先度の変更に伴い、変更後の優先度と同一の優先度が設定されている第３のタスクよりも、第１のタスクを上位としてスケジューリングすることを特徴とする。
【００９４】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態１と同一の構成要素については、同一の参照符号を付して説明を省略する。
【００９５】
図８は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図８に示されるように、タスク制御装置１００ｂは、実施の形態１に係るタスク制御装置１００ａ（図１参照。）と比べて、下記の点が異なる。
【００９６】
優先度変更部２７０ｂは、強制的にタスクを終了させる要求のメイン処理において（例えば、図３参照。）、シグナル送信部２５０ａから、強制終了シグナルの送信相手となるタスクを識別する情報を受け取り、強制終了シグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、オペレーティングシステム実行部２００ｂがタスクに設定可能な優先度の範囲のうちの最上位の優先度を優先度管理部２２２ａに格納する。例えば、オペレーティングシステム実行部２００ｂがタスクの優先度として[１]から[９９]の数値のいずれかを設定する場合において、最上位の優先度が[１]である場合、強制終了シグナルの送信相手となるタスクの優先度管理部２２２ａに優先度[１]を格納する。
【００９７】
これに伴い、スケジューリング部２３０ｂは、強制的に終了させるタスクをレディキューにリンクしなおす。このとき、スケジューリング部２３０ｂは、同一優先度の実行可能状態のタスクの中で強制終了シグナルまたは強制待ちシグナルが送信されているタスクを、それらのシグナルが送信されていないタスクよりも前に実行されるようにレディキューにリンクする。
【００９８】
また、優先度変更部２７０ｂは、強制的にタスクを待ち状態に移行させる要求のメイン処理において（例えば、図５参照。）、同様に、シグナル送信部２５０ａから、強制待ちシグナルの送信相手となるタスクを識別する情報を受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、オペレーティングシステム実行部２００ｂがタスクに設定可能な優先度の範囲のうちの最上位の優先度を優先度管理部２２２ａに格納する。例えば、オペレーティングシステム実行部２００ｂがタスクの優先度として[１]から[９９]の数値のいずれかを設定する場合において、最上位の優先度が[１]である場合、強制待ちシグナルの送信相手となるタスクの優先度管理部２２２ａに優先度[１]を格納する。
【００９９】
これに伴い、スケジューリング部２３０ｂは、強制的な待ち状態に移行させるタスクをレディキューにリンクしなおす。このとき、スケジューリング部２３０ｂは、同一優先度の実行可能状態のタスクの中で強制終了シグナルまたは強制待ちシグナルが送信されているタスクを、それらのシグナルが送信されていないタスクよりも前に実行されるようにレディキューにリンクする。
【０１００】
図９は、本実施形態に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示したタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０１０１】
図９に示されるように、ここでは、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。また、タスクＢには強制終了シグナルに対応するシグナルハンドラＢが登録されているとする。
【０１０２】
オペレーティングシステム実行部２００ｂは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。
【０１０３】
時刻ｔ１において、タスクＡ（優先度[１]。）が現在実行中である。タスクＢ（優先度[２]。）、タスクＣ（優先度[３]。）は、実行可能状態である。
【０１０４】
時刻ｔ２において、タスクＡがタスクＢを強制的に終了させる要求を出す。オペレーティングシステム実行部２００ｂは、タスクＢに対して強制終了シグナルを送信し、タスクＢの優先度を最上位の優先度に変更する。このとき、オペレーティングシステム実行部２００ｂは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。
【０１０５】
スケジューリング部２３０ａは、タスクＢをレディキューにリンクしなおす。このとき、タスクＢは、強制的に終了させる対象のタスクであるので、同じ優先度のタスクの中でＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を満足するようリンクされる。したがって、タスクＡとタスクＢは同一の優先度[１]であるが、スケジューリング部２３０ａは、次に実行すべきタスクとしてタスクＢを選択する。
【０１０６】
時刻ｔ３において、優先度[１]のタスクＢは、実行状態に切り替わる。オペレーティングシステム実行部２００ｂは、タスクＢのタスク内に戻る前に強制終了シグナルを受信し、タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢを呼び出す。
【０１０７】
時刻ｔ４において、強制終了シグナルに対応するシグナルハンドラＢが起動し、時刻ｔ５において、強制終了シグナルに対応するシグナルハンドラＢが現在実行中のタスクを終了する要求を出す。
【０１０８】
オペレーティングシステム実行部２００ｂは、現在実行中のタスクすなわちタスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクは、優先度[１]のタスクＡとなる。
【０１０９】
時刻ｔ６において、タスクＡに実行状態が切り替わり、オペレーティングシステム実行部２００ｂは、強制的に終了させる要求のメイン処理を継続し、時刻ｔ７において、強制的に終了させる要求のメイン処理からタスクＡ内の処理にリターンする。そして、タスクＡは、タスク内の処理を継続する。
【０１１０】
時刻ｔ８において、タスクＡが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＡが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ｂは、タスクＡをセマフォ獲得の待ち状態にする。タスクＡが待ち状態に移行するため、実行可能状態のタスクの中で最も高い優先度をもつタスクは優先度[３]のタスクＣとなる。
【０１１１】
時刻ｔ９において、タスクＣに実行状態が切り替わり、時刻ｔ１０において、タスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【０１１２】
このように、強制的に終了させるタスクＢの優先度を最上位の優先度に変化させ、レディキューへリンクする時、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を満足するようにリンクすることによって、オペレーティングシステム実行部２００ｂがタスクに設定可能な優先度の範囲を減少させることなく実施の形態１で説明したタスク切り替え時間が保証できるという効果を発する。
【０１１３】
なお、タスクを強制的に待ち状態に移行させる処理についても、図９と同様のタイミングチャートで表すことができるため、説明は省略する。
【０１１４】
(実施の形態３)
次に、本発明に係わる実施の形態３について、図面を参照しながら説明する。
【０１１５】
本実施の形態に係るタスク制御装置は、第１のタスクに設定されている優先度を、第１のタスクに設定される優先度の範囲において予め予約されている優先度（最下位の優先度）に変更することを特徴とする。
【０１１６】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態１と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０１１７】
図１０は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図１０に示されるように、タスク制御装置１００ｃは、実施の形態１に係るタスク制御装置１００ａ（図１参照。）と比べて、下記の点が異なる。
【０１１８】
優先度変更部２７０ｃは、強制的にタスクを終了させる要求のメイン処理において（例えば、図３参照。）、シグナル送信部２５０ａから、強制終了シグナルの送信相手となるタスクを識別する情報を受け取り、強制終了シグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、優先度管理部２２２ａに、予約している優先度を格納する。
【０１１９】
また、優先度変更部２７０ｃは、タスクを強制的に待ち状態に移行させる要求のメイン処理において（例えば、図５参照。）、同様に、シグナル送信部２５０ａから、強制待ちシグナルの送信相手となるタスクを識別する情報を受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、優先度管理部２２２ａに、予約しておいた優先度を格納する。その優先度は、オペレーティングシステム実行部２００ｃが強制的に状態を変化させるタスクの優先度を制御するためにあらかじめ予約しており、例えば、オペレーティングシステム実行部２００ｃがタスクに与える優先度として[１]から[９９]の数値のいずれかを優先度として設定する場合において、優先度[９９]を予約しておく。
【０１２０】
この場合において、オペレーティングシステム実行部２００ｃがアイドル状態になる直前に、強制的に終了させるタスクに登録された強制終了シグナルに対応するシグナルハンドラ、または強制的に待ち状態に移行させるタスクに登録された強制待ちシグナルに対応するシグナルハンドラを実行することができる。
【０１２１】
ここで、アイドル状態とは、どのタスクも実行可能状態にない状態であり、通常は、割込み等のイベントによりタスクが実行可能状態になるのを待っていることを指す。またアイドル状態は、タスクのような優先度も持っていないとする。
【０１２２】
図１１は、本実施の形態に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０１２３】
図１１に示されるように、ここでは、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。またＣＰＵのアイドル状態をチャートの下方に示す。また、タスクＢには強制終了シグナルに対応するシグナルハンドラＢが登録されているとする。
【０１２４】
オペレーティングシステム実行部２００ｃは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ｃは、強制的に状態を変化させるタスクの優先度を制御するために、優先度[９９]を予約している。
【０１２５】
時刻ｔ１において、タスクＡ（優先度[１０]。）が現在実行中である。タスクＢ（優先度[２０]。）、タスクＣ（優先度[３０]。）は、実行可能状態である。
【０１２６】
時刻ｔ２において、タスクＡがタスクＢを強制的に終了させる要求を出す。オペレーティングシステム実行部２００ｃは、タスクＢに対して強制終了シグナルを送信し、タスクＢの優先度を予約している優先度（最下位の優先度）に変更する。このとき、オペレーティングシステム実行部２００ｃは、最下位の優先度として優先度[９９]を設定する。したがって、タスクＢの優先度は、一時的に優先度[９９]になる。
【０１２７】
スケジューリング部２３０ａは、タスクＢをレディキューにリンクしなおす。しかし、タスクＢは、一時的に優先度[９９]に変更されているので、時刻ｔ３において、引き続き優先度[１０]のタスクＡ内の処理が継続される。
【０１２８】
時刻ｔ４において、タスクＡが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＡが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ｃは、タスクＡをセマフォ獲得の待ち状態にする。タスクＡが待ち状態に移行するため、実行可能状態のタスクの中で最も高い優先度をもつタスクは優先度[３０]のタスクＣとなる。
【０１２９】
時刻ｔ５において、タスクＣに実行状態が切り替わり、時刻ｔ６において、タスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【０１３０】
時刻ｔ７において、タスクＣが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＣが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ｃは、タスクＣを待ち状態に移行させ、時刻ｔ８において、優先度[９９]のタスクＢは、実行状態に切り替わる。
【０１３１】
オペレーティングシステム実行部２００ｃは、タスクＢのタスク内に戻る前に強制終了シグナルを受信し、タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢを呼び出す。
【０１３２】
時刻ｔ９において、強制終了シグナルに対応するシグナルハンドラＢが起動する。
時刻ｔ１０において、強制終了シグナルに対応するシグナルハンドラＢが現在実行中のタスクを終了する要求を出す。
【０１３３】
オペレーティングシステム実行部２００ｃは、現在実行中のタスク、すなわち、タスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクが存在しなくなり、時刻ｔ１１において、アイドル状態に移行する。
【０１３４】
このように、強制的に終了させる対象となるタスクＢの優先度を、予約している優先度に変化させることで、優先度[１０]のタスクＡがセマフォ獲得の要求を発行し、その結果、セマフォ獲得待ち状態になる。さらに、優先度[３０]のタスクＣが実行状態に切り替わる過程、すなわち時刻ｔ４から時刻ｔ６の過程に、優先度[２０]のタスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢで自ら終了の要求を発行する処理が含まれなくなる。そして、タスクＡからタスクＣへのタスク切り替え処理時間、すなわち、時刻ｔ４から時刻ｔ６の処理時間の保証ができるようになる。
【０１３５】
タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢはアイドル状態直前に実行できるようになる。
【０１３６】
なお、タスクを強制的に待ち状態に移行させる処理についても、図１１と同様のタイミングチャートで表すことができるため、説明は省略する。
【０１３７】
なお、本実施の形態におけるタスク制御装置１００ｃの機能と実施の形態１におけるタスク制御装置１００ａの機能とを組み合わせるとしてもよい。例えば、資源の開放を優先させたい場合は、実施の形態１におけるタスク制御装置１００ａのように、強制終了タスクの優先度を最上位の優先度[１]に変更し、強制終了タスクに獲得されている資源を優先して開放するとしてもよい。また、他のタスクの処理を優先させたい場合は、本実施の形態におけるタスク制御装置１００ｃのように、強制終了タスクの優先度を最下位の優先度[９９]に変更し、強制終了タスク以外のタスクを優先して処理するとしてもよい。すなわち、タスク制御装置の実行状態を監視し、強制終了タスクまたは強制待ちタスクの優先度を変更するときに、実行状態から優先事項を決定し、決定した優先事項に応じて、最上位の優先度[１]および最下位の優先度[９９]のいずれかに変更するとしてもよい。
【０１３８】
(実施の形態４)
次に、本発明に係わる実施の形態４について、図面を参照しながら説明する。
【０１３９】
本実施の形態に係るタスク制御装置は、第１のタスクに設定されている優先度を、第１のタスクに設定される優先度の範囲のうちの最下位に変更し、第１のタスクに設定されている優先度の変更に伴い、変更後の優先度と同一の優先度が設定されている第３のタスクよりも、第１のタスクを下位としてスケジューリングすることを特徴とする。
【０１４０】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態１と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０１４１】
図１２は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図１２に示されるように、タスク制御装置１００ｄは、実施の形態１に係るタスク制御装置１００ａ（図１参照。）と比べて、下記の点が異なる。
【０１４２】
優先度変更部２７０ｄは、強制的にタスクを終了させる要求のメイン処理において（例えば、図３参照。）、シグナル送信部２５０ａから、強制終了シグナルの送信相手となるタスクを識別する情報を受け取り、強制終了シグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、オペレーティングシステム実行部２００ｄがタスクに設定可能な優先度の範囲のうちの最下位の優先度を優先度管理部２２２ａに格納する。例えば、オペレーティングシステム実行部２００ｄがタスクの優先度として、[１]から[９９]の数値のいずれかを設定する場合において、最下位の優先度が[９９]である場合、強制終了シグナルの送信相手となるタスクの優先度管理部２２２ａに優先度[９９]を格納する。
【０１４３】
これに伴い、スケジューリング部２３０ｄは、強制的に終了させるタスクをレディキューにリンクしなおす。このとき、スケジューリング部２３０ｄは、同一優先度の実行可能状態のタスクの中で強制終了シグナルまたは強制待ちシグナルが送信されているタスクを、それらのシグナルが送信されていないタスクよりも後に実行されるようにレディキューにリンクする。
【０１４４】
また、優先度変更部２７０ｄは、強制的にタスクを待ち状態に移行させる要求のメイン処理において（例えば、図５参照。）、同様に、シグナル送信部２５０ａから、強制待ちシグナルの送信相手となるタスクを識別する情報を受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ａを特定し、オペレーティングシステム実行部２００ｄがタスクに設定可能な優先度の範囲のうちの最下位の優先度を優先度管理部２２２ａに格納する。例えば、オペレーティングシステム実行部２００ｄがタスクの優先度として、[１]から[９９]の数値のいずれかを設定する場合において、最下位の優先度が[９９]である場合、強制待ちシグナルの送信相手となるタスクの優先度管理部２２２ａに優先度[９９]を格納する。
【０１４５】
これに伴い、スケジューリング部２３０ｄは、強制的な待ち状態に移行させるタスクをレディキューにリンクしなおす。このとき、スケジューリング部２３０ｄは、同一優先度の実行可能状態のタスクの中で強制終了シグナル、または強制待ちシグナルが送信されているタスクを、それらのシグナルが送信されていないタスクよりも後に実行されるようにレディキューにリンクする。
【０１４６】
この場合、オペレーティングシステム実行部２００ｄがアイドル状態になる直前に、強制的に終了させるタスクに登録された強制終了シグナルに対応するシグナルハンドラ、または強制的に待ち状態に移行させるタスクに登録された強制待ちシグナルに対応するシグナルハンドラを実行することができる。
【０１４７】
ここで、アイドル状態とは、どのタスクも実行可能状態にない状態であり、通常は、割込み等のイベントによりタスクが実行可能状態になるのを待っていることを指す。またアイドル状態は、タスクのような優先度も持っていないとする。
【０１４８】
図１３は、本実施形態に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０１４９】
図１３では、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。また、ＣＰＵのアイドル状態をチャートの下方に示す。また、タスクＢには、強制終了シグナルに対応する強制終了シグナルハンドラＢが登録されているとする。
【０１５０】
オペレーティングシステム実行部２００ｄは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。
【０１５１】
時刻ｔ１において、タスクＡ（優先度[９７]。）が現在実行中である。タスクＢ（優先度[９８]。）、タスクＣ（優先度[９９]。）は、実行可能状態である。
【０１５２】
時刻ｔ２において、タスクＡがタスクＢを強制的に終了させる要求を出す。オペレーティングシステム実行部２００ｄは、タスクＢに対して強制終了シグナルを送信し、タスクＢの優先度を最下位の優先度に変更する。このとき、オペレーティングシステム実行部２００ｄは、最下位の優先度として優先度[９９]を設定する。したがって、タスクＢの優先度は、一時的に優先度[９９]になる。
【０１５３】
スケジューリング部２３０ｄは、タスクＢをレディキューにリンクしなおす。このときレディキューには優先度[９９]のタスクＣがリンクされている。タスクＣには、強制終了シグナルまたは強制待ちシグナルは送信されていないため、スケジューリング部２３０ｄはタスクＢをタスクＣよりも後に実行されるようにレディキューにリンクする。
【０１５４】
時刻ｔ３において、引き続き優先度[９７]のタスクＡ内の処理が継続する。
時刻ｔ４において、タスクＡが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＡが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ｄは、タスクＡをセマフォ獲得の待ち状態にする。このとき、タスクＢとタスクＣとは同一の優先度[９９]である。しかし、スケジューリング部２３０ｄは、強制終了シグナル、または強制待ちシグナルが送信されていないタスクＣを次に実行すべきタスクとして選択する。
【０１５５】
時刻ｔ５において、タスクＣに実行状態が切り替わり、時刻ｔ６において、タスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【０１５６】
時刻ｔ７において、タスクＣが資源獲得の要求、例えば、セマフォを獲得する要求を出す。タスクＣが獲得しようとしたセマフォ資源は、すべて使用されていたとすると、オペレーティングシステム実行部２００ｄは、タスクＣを待ち状態に移行させ、時刻ｔ８において、優先度[９９]のタスクＢは、実行状態に切り替わる。
【０１５７】
オペレーティングシステム実行部２００ｄは、タスクＢのタスク内に戻る前に強制終了シグナルを受信し、タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢを呼び出す。
【０１５８】
時刻ｔ９において、強制終了シグナルに対応するシグナルハンドラＢが起動する。
時刻ｔ１０において、強制終了シグナルに対応するシグナルハンドラＢが現在実行中のタスクを終了する要求を出す。
【０１５９】
オペレーティングシステム実行部２００ｄは、現在実行中のタスク、すなわち、タスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクが存在しなくなり、時刻ｔ１１において、アイドル状態に移行する。
【０１６０】
このように、強制的に終了させる対象となるタスクＢの優先度を最下位の優先度に変化させて、スケジューリング部２３０ｄは、タスクをレディキューへリンクするとき、同一優先度の実行可能状態のタスクの中で強制終了シグナルまたは強制待ちシグナルが送信されているタスクが、それらのシグナルが送信されていないタスクよりも後に実行されるようにレディキューにリンクすることによって、オペレーティングシステム実行部２００ｄがタスクに設定可能な優先度の範囲を減少させることなく実施の形態１で説明したタスク切り替え時間が保証できるという効果を発する。
【０１６１】
なお、タスクを強制的に待ち状態に移行させる処理についても図１３と同様のタイミングチャートで表すことができるため、説明は省略する。
【０１６２】
なお、本実施の形態におけるタスク制御装置１００ｄの機能と実施の形態２におけるタスク制御装置１００ｂの機能とを組み合わせるとしてもよい。例えば、資源の開放を優先させたい場合は、実施の形態１におけるタスク制御装置１００ｂのように、強制終了タスクの優先度を最上位の優先度[１]に変更し、強制終了タスクに獲得されている資源を優先して開放するとしてもよい。また、他のタスクの処理を優先させたい場合は、本実施の形態におけるタスク制御装置１００ｄのように、強制終了タスクの優先度を最下位の優先度[９９]に変更し、強制終了タスク以外のタスクを優先して処理するとしてもよい。すなわち、タスク制御装置の実行状態を監視し、強制終了タスクまたは強制待ちタスクの優先度を変更するときに、実行状態から優先事項を決定し、決定した優先事項に応じて、最上位の優先度[１]および最下位の優先度[９９]のいずれかに変更するとしてもよい。
【０１６３】
(実施の形態５)
次に、本発明に係わる実施の形態５について、図面を参照しながら説明する。
【０１６４】
本実施の形態に係るタスク制御装置は、タスクの状態を強制的に変更された否かが識別される情報を識別情報とした場合において、タスク毎に設定された識別情報を管理することを特徴とする。
【０１６５】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態１と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０１６６】
図１４は、本実施の形態に係るタスク制御装置の機能構成を示す図である。ここでは、オペレーティングシステムにおいて、強制的にタスクの状態を変化させる機能を実現する場合について説明する。図１に示されるように、タスク制御装置１００ｅは、実施の形態１に係るタスク制御装置１００ａ（図１参照。）と比べて、強制状態変化管理部２２４ｅを新たに備える点が異なる。
【０１６７】
強制状態変化管理部２２４ｅは、強制的に状態を変化させられていることを識別する情報を格納する。ここでは強制的な終了をさせるタスクには、強制終了フラグが格納され、強制的な待ち状態に移行させるタスクには、強制待ちフラグが格納されるとする。なお、強制状態変化管理部２２４ｅは、タスクごとに必要であるため、タスク情報管理部２２０ｅに含んでいるのが望ましい。
【０１６８】
本実施の形態に係るタスク制御装置において、強制的にタスクを終了させる処理および強制的にタスクを待ち状態に移行させる処理の詳細を図１５、図１６を用いて説明する。
【０１６９】
図１５は、本実施の形態に係るタスク制御装置において、強制的にタスクを終了させる要求のメイン処理を示すフローチャートである。
【０１７０】
図３に示されるように、実施の形態１に係るタスク制御装置におけるタスクを強制的に終了させる要求のメイン処理では、強制的に終了させるタスクが既に強制的な状態の変化を実施されているかを判断することなく強制的にタスクを終了させる要求を実行する。
本実施の形態に係るタスクを強制的に終了させる要求のメイン処理は、強制的に終了させられていることを示す強制終了フラグを格納すること（ステップＳ１３０３）と、強制的に終了させるタスクが既に強制的な状態の変化を実施されているかを判断する（ステップＳ１３０１、Ｓ１３０２、Ｓ１３０５）。
【０１７１】
図１５に示されるように、シグナル送信部２５０ａは、システムコールインターフェース２１０ａから、強制終了シグナルと、その強制終了シグナルの送信相手となるタスクを識別する情報とを受け取り、強制終了シグナルの送信相手となるタスクに対するタスク情報管理部２２０ｅを特定し、強制状態変化管理部２２４ｅに格納されているフラグを取得する（ステップＳ１３０１）。
【０１７２】
次に、優先度変更部２７０ｅは、強制状態変化管理部２２４ｅから取得したフラグを判定し（ステップＳ１３０２）、強制終了フラグである場合は（ステップＳ１３０２：Ｙｅｓ）、この強制的にタスクを終了させる要求のメイン処理からリターンする。一方、強制終了フラグでない場合は（ステップＳ１３０２：Ｎｏ）、強制終了シグナルを送信する相手となるタスクの強制状態変化管理部２２４ｅに強制終了フラグを格納する（ステップＳ１３０３）。
【０１７３】
次に、強制終了フラグを送信する（ステップＳ１３０４）。
次に、強制状態変化管理部２２４ｅから取得したフラグを判定し（ステップＳ１３０５）、強制待ちフラグでない場合は（ステップＳ１３０５：Ｎｏ）、優先度変更部２７０ｅは、シグナル送信部２５０ａから、強制待ちシグナルの送信相手となるタスクを識別する情報を受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ｅを特定し、優先度管理部２２２ａに最上位の優先度を格納する（ステップＳ１３０６）。そして、強制待ちシグナルの送信相手となるタスクに対応するタスク情報管理部２２０ｅの状態管理部２２１ａを参照し、実行可能状態であるか否かを判定する（ステップＳ１３０７）。一方、強制待ちフラグである場合は（ステップＳ１３０５：Ｙｅｓ）、優先度を変更せずに、実行可能状態であるか否かを判定する（ステップＳ１３０７）。
【０１７４】
実行可能状態でない場合は（ステップＳ１３０７：Ｎｏ）、実行可能な状態に設定する（ステップＳ１３０８）。
【０１７５】
一方、実行可能状態である場合は（ステップＳ１３０７：Ｙｅｓ）、スケジューリング部２３０ａは、強制的に待ち状態に移行させるタスクをレディキューにリンクしなおす（ステップＳ４０５）。なお、これ以降のステップについては、図３に示される後半のステップと同じであるので説明を省略する。
【０１７６】
図１６は、本実施の形態に係るタスク制御装置において、タスクを強制的に待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【０１７７】
図５に示されるように、実施の形態１に係るタスク制御装置１００ａにおいて、タスクを強制的な待ち状態に移行させる要求のメイン処理では、強制的な待ち状態に移行させるタスクが既に強制的な状態の変化を実施されているかを判断することなく強制的にタスクを待ち状態に移行させる要求を実行する。
【０１７８】
これに対して、本実施の形態に係るタスク制御装置１００ｅにおいて、タスクを強制的に待ち状態に移行させる要求のメイン処理では、強制的な待ち状態に移行させられていることを示す強制待ちフラグを格納すること（ステップＳ１４０４）と、強制的に待ちに移行させるタスクが既に強制的な状態の変化を実施されているかを判断すること（ステップＳ１４０１、Ｓ１４０２、Ｓ１４０３）を特徴とする。
【０１７９】
優先度変更部２７０ｅは、システムコールインターフェース２１０ａから、強制待ちシグナルと、その強制待ちシグナルの送信相手となるタスクを識別する情報とを受け取り、強制待ちシグナルの送信相手となるタスクに対するタスク情報管理部２２０ｅを特定し、強制状態変化管理部２２４ｅに格納されているフラグを取得する（ステップＳ１４０１）。そして、強制状態変化管理部２２４ｅから取得したフラグを判定し（ステップＳ１４０２）、強制終了フラグである場合は（ステップＳ１４０２：Ｙｅｓ）、この強制的にタスクを待ち状態に移行させる要求のメイン処理からリターンする。
【０１８０】
一方、強制終了フラグでない場合は（ステップＳ１４０２：Ｎｏ）、強制状態変化管理部２２４ｅから取得したフラグを判定し（ステップＳ１４０３）、強制待ちフラグである場合は（ステップＳ１４０３：Ｙｅｓ）、この強制的にタスクを待ち状態に移行させる要求のメイン処理からリターンする。強制待ちフラグでない場合は（ステップＳ１４０３：Ｎｏ）、強制待ちシグナルを送信する相手となるタスクの強制状態変化管理部２２４ｅに強制待ちフラグを格納する（ステップＳ１４０４）。
【０１８１】
なお、これ以降のステップについては、図５に示されるステップと同じであるので説明を省略する。
【０１８２】
例えば、強制的に待ち状態に移行させたタスクに対して、強制的に終了させる要求を行った場合を考える。この場合においては、強制的に待ち状態に移行させたタスクは、そのタスクに対応するタスク情報管理部２２０ｅの強制状態変化管理部２２４ｅに強制待ちフラグが格納されており（ステップＳ１４０４）、さらに、優先度管理部２２２ａには、最上位の優先度[１]が格納されている（ステップＳ１４０６）。
【０１８３】
このとき、そのタスクを強制的に終了させる場合は、そのタスクの強制状態変化管理部２２４ｅには、既に強制待ちフラグが格納されているという判断ができる（ステップＳ１３０５）ことから、優先度を変更する処理（ステップＳ１３０６）を省略することが可能となる。
【０１８４】
このように、強制的な状態変化を受けていることを意味するフラグを格納するステップと強制的な状態変化を判断するステップとを設けることによっても、実施の形態１で説明したタスク切り替え処理時間が保証できるとともに、強制的にタスクを終了させる要求と強制的にタスクを待ち状態に移行させる要求の両方を使用する場合に、それらの処理を高速化できるという効果を発する。
【０１８５】
なお、本実施の形態では、強制的に状態を変化させるタスクの優先度を制御する方法（ステップＳ１３０６、Ｓ１３０９、Ｓ１４０６、Ｓ１４０８）として、実施の形態１で用いた方法を使用したが、実施の形態２、実施の形態３、または実施の形態４で用いた方法を使用することでも同様の効果を発する。また、実施の形態１で用いた方法および実施の形態３で用いた方法を組み合わせた方法、または実施の形態２で用いた方法および実施の形態４で用いた方法を組み合わせた方法を使用することでも同様の効果を発する。
【０１８６】
(実施の形態６)
次に、本発明に係る実施の形態６について、図面を参照しながら説明する。
【０１８７】
本実施の形態に係るタスク制御装置は、第１のタスクに設定されている優先度の変更に伴い、変更前の優先度を保持することを特徴とする。
【０１８８】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態５と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０１８９】
図１７は、本実施の形態に係るタスク制御装置の機能構成を示す図である。ここでは、オペレーティングシステムにおいて、強制的にタスクの状態を変化させる機能を実現する場合について説明する。図１７に示されるように、タスク制御装置１００ｆは、実施の形態５に係るタスク制御装置１００ｅ（図１４参照。）と比べて、下記の点が異なる。
【０１９０】
優先度保存部２２５ｆは、強制的にタスクの状態を変化させる場合に、優先度変更部２７０ｆが優先度管理部２２２ａの優先度を変更する前の優先度を保存する。なお、優先度保存部２２５ｆは、強制的に状態を変化させられるタスクごとに必要であるため、タスク情報管理部２２０ｆに含んでいるのが望ましい。
【０１９１】
優先度変更部２７０ｆは、強制待ちシグナルを送信する相手となるタスクに対応するタスク情報管理部２２０ｆの優先度管理部２２２ａにある優先度を優先度保存部２２５ｆにコピーする。強制待ち状態を解除したときに強制待ち状態に移行する前の優先度を戻す。
【０１９２】
本実施の形態に係るタスク制御方法を用いたオペレーティングシステムについて強制的にタスクを待ち状態に移行させる処理および強制的な待ち状態を解除する処理の詳細を図１８、図１９、図２０を用いて説明する。
【０１９３】
図１８は、本実施の形態に係るタスク制御装置において、タスクを強制的に待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【０１９４】
実施の形態５に係るタスク制御方法を用いたオペレーティングシステムにおけるタスクを強制的な待ち状態に移行させる要求のメイン処理では、図１６に示されるように、強制的な待ち状態に移行させるタスクの優先度を最上位の優先度に変更する。
【０１９５】
それに対し、本実施の形態に係るタスクを強制的な待ち状態に移行させる要求のメイン処理は、強制的な待ち状態に移行させるタスクの優先度を変更する直前に、現在の優先度を優先度保存部２２５ｆに保存することを特徴とする。
【０１９６】
優先度変更部２７０ｆは、強制待ちシグナルを送信する相手となるタスクに対応するタスク情報管理部２２０ｆの優先度管理部２２２ａにある優先度を優先度保存部２２５ｆにコピーする（ステップＳ１６０６）。なお、これ以外のステップについては、図１６にしめされるステップと同じであるので説明を省略する。
【０１９７】
図１９は、本実施の形態に係るタスク制御装置において、受信したシグナルに応じてシグナルハンドラを呼び出す処理を示すフローチャートである。
【０１９８】
図１９に示されるように、シグナル受信部２６０ａは、ディスパッチ部２４０ａが次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替えた後、そのタスクの処理に戻る前に、そのタスクに対応するタスク情報管理部２２０ｆのシグナル管理部２２３ａに格納してあるシグナルを受信する。そして、受信したシグナルが強制待ちシグナルである場合は（ステップＳ１７０１：Ｙｅｓ）、現在実行中のタスクに対応するタスク情報管理部２２０ｆの優先度保存部２２５ｆに格納されている優先度を現在実行中のタスクに対応するタスク情報管理部２２０ｆの優先度管理部２２２ａに設定する（ステップＳ１７０２）。送信されたシグナルに対応するシグナルハンドラを呼び出す（ステップＳ１７０３）。一方、強制待ちシグナルでない場合は（ステップＳ１７０１：Ｎｏ）、送信されたシグナルに対応するシグナルハンドラを呼び出す（ステップＳ１７０３）。
【０１９９】
図２０は、本実施の形態に係るタスク制御装置において、タスクの強制的な待ち状態を解除する要求のメイン処理を示すフローチャートである。
【０２００】
まず、優先度変更部２７０ｆは、システムコールインターフェース２１０ａから強制待ち状態を解除するタスクを識別する情報を受け取り、強制待ち状態を解除するタスクに対するタスク情報管理部２２０ｆを特定し、強制状態変化管理部２２４ｅに格納されているフラグが強制待ちフラグでない場合は（ステップＳ１８０１：Ｎｏ）、この強制的な待ち状態を解除する要求のメイン処理からリターンする。一方、強制待ちフラグである場合は（ステップＳ１８０１：Ｙｅｓ）、強制待ち状態に移行するために用意されたイベントを設定する（ステップＳ１８０２）。もし、強制待ち状態を解除するタスクがその強制待ち状態に移行するために用意されたイベントによる待ち状態になっていれば、そのイベントを設定することで、そのタスクの待ち状態が解除される。
【０２０１】
次に、強制的な待ち状態を解除するタスクの強制状態変化管理部２２４ｅのフラグを削除する（ステップＳ１８０３）。
【０２０２】
次に、スケジューリング部２３０ａは、強制的に待ち状態に移行させるタスクをレディキューにリンクしなおす（ステップＳ１８０４）。このとき、強制的に待ち状態に移行させるタスクに対応するタスク情報管理部２２０ａの優先度管理部２２２ａに格納される優先度に応じて、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）を満足するようにリンクする。
【０２０３】
次に、スケジューリング部２３０ａは、レディキューで管理される実行可能状態のタスクの中で最も実行優先順位の高いタスクを次に実行すべきタスクとして選択する（ステップＳ１８０５）。
【０２０４】
次に、ディスパッチ部２４０ａは、現在実行中のタスクから次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替える（ステップＳ１８０６）。
【０２０５】
図２１は、本実施の形態に係るタスク制御装置について、タスクを強制的な待ち状態に移行させる処理およびその強制的な待ち状態を解除させる処理の例を示したタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０２０６】
図２１に示されるように、タスクＡ（優先度[１０]。）、タスクＢ（優先度[２０]。）の２つのタスクが動作しているとする。また、タスクＢに対して、強制待ちシグナルに対応する強制待ちシグナルハンドラＢが登録されているとする。
【０２０７】
オペレーティングシステム実行部２００ｆは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ｆは、強制的に状態を変化させるタスクの優先度を制御するために、最上位の優先度[１]を予約している。
【０２０８】
時刻ｔ１において、タスクＡ（優先度[１０]。）は、現在実行中である。タスクＢ（優先度[２０]。）は、ある資源Ｂによる待ち状態である。
【０２０９】
時刻ｔ２において、タスクＡは、タスクＢを強制的な待ち状態に移行させる要求を出す。オペレーティングシステム実行部２００ｆは、タスクＢに強制待ちフラグを設定し、タスクＢに対して強制待ちシグナルを送信し、タスクＢの現在の優先度[２０]を保存し、タスクＢの優先度を予約している優先度（最上位の優先度）に変更する。このとき、オペレーティングシステム実行部２００ｆは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。ただし、タスクＢは、資源Ｂ獲得の待ち状態であるため、レディキューにはリンクされない。
【０２１０】
時刻ｔ３において、タスクＡ内の処理にリターンする。
時刻ｔ４において、タスクＡは、タスクＢの強制的な待ち状態を解除する要求を出す。
【０２１１】
これに伴い、オペレーティングシステム実行部２００ｆは、強制待ち状態に移行するために用意されたイベントを設定する。ここでは、タスクＢは、まだ強制待ち状態に移行するために用意されたイベントによる待ち状態ではないため、そのイベントが設定された状態となる。
【０２１２】
次に、タスクＢの強制待ちフラグを削除する。次に、スケジューリング処理が実行される（ステップＳ１８０５）が、実行可能状態のタスクの中で最も高い優先度をもつタスクは、優先度[１０]のタスクＡであるため、時刻ｔ５において、引き続きタスクＡ内の処理が継続する。
【０２１３】
時刻ｔ６において、タスクＡが資源Ｂを解放する。これにより、タスクＢの資源Ｂ待ち状態が解除され、時刻ｔ７において、優先度[１]であるタスクＢは、実行状態に切り替わり、オペレーティングシステム実行部２００ｆは、タスクＢ内に戻る前に強制待ちシグナルを受信し、タスクＢの優先度保存部２２５ｆに格納された優先度[２０]を優先度管理部２２２ａに戻し、タスクＢに登録された強制待ちシグナルに対応するシグナルハンドラＢを呼び出す。
【０２１４】
時刻ｔ８において、強制待ちシグナルに対応するシグナルハンドラＢは、起動し、時刻ｔ９において、現在実行中のタスクのために予約されたイベントが設定されるのを待つ要求を出す。ただし、時刻ｔ４から時刻ｔ５のオペレーティングシステム実行部２００ｆの処理において、そのイベントは既に設定されている状態である。したがって、タスクＢは、イベントを取得することができ、待ち状態には移行せず実行可能状態となる。しかし、オペレーティングシステム実行部２００ｆは、実行可能状態のタスクの中で最も高い優先度[１０]を持つタスクＡを次に実行するタスクとして選択する。
【０２１５】
時刻ｔ１０において、タスクＡは、実行状態に切り替わり、時刻ｔ１１において、タスクＡのタスク内の処理にリターンする。
【０２１６】
このように、本実施の形態に係るタスク制御装置においても、強制的な待ち状態に移行するタスクの優先度を制御することができるため、実施の形態１で説明したタスク切り替え処理時間が保証できるとともに、さらに、強制待ち状態に移行する前の優先度を保存することにより、強制待ち状態を解除したときに強制待ち状態に移行する前の優先度を戻すことが可能になる。
【０２１７】
なお、本実施の形態においては、強制的な待ち状態に移行させる要求のメイン処理において、優先度を保存する処理（ステップＳ１６０６）とシグナルハンドラを呼び出す処理において、強制待ちシグナルの場合に、保存した優先度を戻す処理（ステップＳ１７０２）を設けたが、強制的にタスクを終了させる要求のメイン処理において、優先度を保存するステップと、シグナルハンドラを呼び出す処理において、強制終了シグナルの場合に、保存した優先度を戻すステップを設けてもよい。
【０２１８】
ただし、オペレーティングシステム実行部２００ｆが、終了したタスクを再起動する処理において、タスクの優先度に初期値を設定するのが一般的であるため、強制的にタスクを終了させる処理においては必ずしも必要な処理ではない。
【０２１９】
なお、本実施の形態では、強制的に状態を変化させるタスクの優先度を制御する方法として、実施の形態１で用いた方法を使用したが、実施の形態２、実施の形態３、もしくは実施の形態４で用いた方法を使用することでも同様の効果を発する。また、実施の形態１で用いた方法および実施の形態３で用いた方法を組み合わせた方法、または実施の形態２で用いた方法および実施の形態４で用いた方法を組み合わせた方法を使用することでも同様の効果を発する。
【０２２０】
(実施の形態７)
次に、本発明に係わる実施の形態７について、図面を参照しながら説明する。
【０２２１】
本実施の形態に係るタスク制御装置は、第１のタスクの状態を強制的に変更する強制変更要求に従って強制的に変更されたタスクの状態を解除する強制解除要求を受け付け、強制解除要求を受け付けると、第１のタスクに設定されている優先度を、変更前の優先度に変更することを特徴とする。
【０２２２】
具体的には、本実施の形態に係るタスク制御装置は、強制的にタスクを待ち状態に移行させる。また、強制的な待ち状態を解除する。
【０２２３】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態６と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０２２４】
図２２は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図２２に示されるように、タスク制御装置１００ｇは、実施の形態６に係るタスク制御装置１００ｆ（図１７参照。）と比べて、下記の点が異なる。
【０２２５】
優先度変更部２７０ｇは、強制的な待ち状態の解除対象となるタスクと対応付けられているタスク情報管理部２２０ｇの優先度保存部２２５ｆに格納されている優先度を、そのタスク情報管理部２２０ｇの優先度管理部２２２ａに戻す。そして、オペレーティングシステム実行部２００ｇは、そのタスク情報管理部２２０ｇのシグナル管理部２２３ａを参照し、強制待ちシグナルが格納されている場合は、そのタスク情報管理部２２０ｇのシグナル管理部２２３ａに格納されている強制待ちシグナルを削除する。
【０２２６】
図２３は、本実施の形態に係るタスク制御装置において、受信したシグナルに応じてシグナルハンドラを呼び出す処理を示すフローチャートである。
【０２２７】
図２３に示されるように、本実施の形態では、実施の形態６（図１９参照。）と比べて、受信したシグナルが強制待ちシグナルであるか否かを判定するステップ（ステップＳ１７０１）と、強制待ちシグナルであった場合は、優先度保存部２２５ｆに格納された優先度を優先度管理部２２２ａに戻す処理（ステップＳ１７０２）とが省略されていることが異なる。
【０２２８】
これにより、受信したシグナルに応じてシグナルハンドラを呼び出す処理（ステップＳ１７０３）のみとなり、オペレーティングシステム実行部２００ｇで一般的に用いられている処理と同等である。
【０２２９】
また、図２４は、本実施の形態に係るタスク制御装置において、タスクの強制的な待ち状態を解除する要求のメイン処理を示すフローチャートである。図２４に示されるように、本実施の形態では、実施の形態６で説明した図２０と比べて、次のステップが追加されていることが異なる。
【０２３０】
優先度変更部２７０ｇは、強制的な待ち状態を解除する対象となるタスクのタスク情報管理部２２０ｇの優先度保存部２２５ｆに格納された優先度を、そのタスクの優先度管理部２２２ａに戻す（ステップＳ２１０２）。そして、強制的な待ち状態を解除する対象となるタスクのタスク情報管理部２２０ｇのシグナル管理部２２３ａを参照し、強制待ちシグナルが格納されている場合は（ステップＳ２１０３：Ｙｅｓ）、強制的な待ち状態を解除する対象のタスクに対応するタスク情報管理部２２０ｇのシグナル管理部２２３ａに格納されている強制待ちシグナルを削除する（ステップＳ２１０５）。一方、強制待ちシグナルが格納されていない場合は（ステップＳ２１０３：Ｎｏ）、強制待ち状態に移行するために用意されたイベントを設定する（ステップＳ２１０４）。これらの追加されたステップ以外については、図２０に示されるステップと同じであるので説明を省略する。
【０２３１】
図２５は、本実施の形態に係るタスク制御装置について、タスクを強制的な待ち状態に移行させる処理、およびその強制的な待ち状態を解除させる処理の例を示したタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０２３２】
図２５に示されるように、タスクＡ、タスクＢの２つのタスクが動作しているとする。また、タスクＢに対して、強制待ちシグナルに対応するシグナルハンドラＢが登録されているとする。
【０２３３】
オペレーティングシステム実行部２００ｇは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ｇは、強制的に状態を変化させるタスクの優先度を制御するために、最上位の優先度[１]を予約している。
【０２３４】
時刻ｔ１において、タスクＡ（優先度[１０]。）は、現在実行中である。タスクＢ（優先度[２０]。）は、ある資源Ｂによる待ち状態である。
【０２３５】
時刻ｔ２において、タスクＡは、タスクＢを強制的な待ち状態に移行させる要求をオペレーティングシステム実行部２００ｇに出す。
【０２３６】
オペレーティングシステム実行部２００ｇは、タスクＢに対して、強制待ちシグナルを送信し、タスクＢの現在の優先度[２０]を保存し、タスクＢの優先度を予約している優先度（最上位の優先度）に変更する。このとき、オペレーティングシステム実行部２００ｇは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。ただし、タスクＢは、資源Ｂ獲得の待ち状態であるため、レディキューにはリンクされない。
【０２３７】
時刻ｔ３において、タスクＡ内の処理にリターンする。
時刻ｔ４において、タスクＡは、タスクＢを強制的な待ち状態を解除する要求を出す。
【０２３８】
オペレーティングシステム実行部２００ｇは、タスクＢが強制待ち状態であることを判断し、タスクＢの優先度保存部２２５ｆに保存してある優先度[２０]をタスクＢの優先度管理部２２２ａに戻す。
【０２３９】
次に、タスクＢに強制待ちシグナルが送信されていることを判断し、強制待ちシグナルを削除する。次に、タスクＢの強制待ちフラグを削除する。さらに、スケジューリング処理が実行される。しかし、このとき、実行可能状態のタスクはタスクＡのみであるので、時刻ｔ５において、引き続きタスクＡ内の処理が継続する。
【０２４０】
時刻ｔ６において、タスクＡは、資源Ｂを解放する。これにより、タスクＢの資源Ｂ待ち状態が解除される。しかし、実行可能状態のタスクの中で最も優先度を持つタスクは優先度[１０]のタスクＡであるため、時刻ｔ７において、引き続きタスクＡ内の処理が継続する。
【０２４１】
このように、本実施の形態に係るタスク制御方法を用いたオペレーティングシステムにおいても強制的な待ち状態に移行するタスクの優先度を制御することができるため、実施の形態１で説明したタスク切り替え処理時間が保証できるとともに、さらに、強制待ち状態に移行する前の優先度を保存することにより、強制待ち状態を解除したときに強制待ち状態に移行する前の優先度を戻すことが可能になる。
【０２４２】
さらに、強制待ち状態を解除する処理に、保存された優先度を戻すステップと、送信された強制待ちシグナルを削除するステップを設けることで、強制待ちシグナルハンドラの呼び出しを削減することが可能になり、処理を高速化できるという効果を発する。
【０２４３】
なお、本実施の形態では、強制的に状態を変化させるタスクの優先度を制御する方法として、実施の形態１で用いた方法を使用したが、実施の形態２、実施の形態３、または実施の形態４で用いた方法を使用することでも同様の効果を発する。また、実施の形態１で用いた方法および実施の形態３で用いた方法を組み合わせた方法、または実施の形態２で用いた方法および実施の形態４で用いた方法を組み合わせた方法を使用することでも同様の効果を発する。
【０２４４】
(実施の形態８)
次に、本発明に係わる実施の形態８について、図面を参照しながら説明する。
【０２４５】
本実施の形態に係るタスク制御装置は、第１のタスクに設定されている優先度を変更する優先度変更要求と、変更後の優先度とを受け付け、優先度変更要求を受け付けると、第１のタスクに設定されている優先度を、変更後の優先度に変更することを特徴とする。
【０２４６】
具体的には、本発明の実施の形態８に係るタスク制御装置は、実施の形態７に係るタスク制御装置に、強制的な待ち状態のタスクを指定して優先度を変更する要求に応じた処理を実行可能にしたものである。タスクが別のタスクを指定して優先度を変更する要求は、例えば、μＩＴＲＯＮ仕様にも採用されており、強制的な待ち状態に移行しているタスクを指定してその優先度を変更することが可能である。
【０２４７】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態７と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０２４８】
図２６は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図２６に示されるように、タスク制御装置１００ｈは、実施の形態７に係るタスク制御装置１００ｇと比べて、下記の点が異なる。
【０２４９】
システムコールインターフェース２１０ｈには、タスクの優先度を変更する要求をさらに受け付け、その要求に応じた処理をする。
【０２５０】
図２７は、本実施の形態に係るタスク制御装置において、タスクの優先度を変更する要求のメイン処理を示すフローチャートである。
【０２５１】
図２７に示されるように、まず、システムコールインターフェース２１０ｈは、優先度を変更する対象となるタスクを識別する情報からそのタスクに対応したタスク情報管理部２２０ｇを特定し、強制状態変化管理部２２４ｅを参照し、強制待ちフラグの格納有無を判定する（ステップＳ２３０１）。判定した結果、強制待ちフラグがない場合は（ステップＳ２３０１：Ｎｏ）、システムコールインターフェース２１０ｈは、優先度を変更する対象となるタスクに対応したタスク情報管理部２２０ｇの優先度管理部２２２ａに変更すべき優先度を格納する（ステップＳ２３０２）。
【０２５２】
次に、スケジューリング部２３０ａは、優先度を変更する対象となるタスクをレディキューにリンクしなおす（ステップＳ２３０３）。さらに、レディキューで管理される実行可能状態のタスクの中で最も実行優先順位の高いタスクを次に実行すべきタスクとして選択する（ステップＳ２３０４）。
【０２５３】
次に、ディスパッチ部２４０ａは、現在実行中のタスクから次に実行すべきタスクにＣＰＵ１０１ａの実行権利を切り替える（ステップＳ２３０５）。
【０２５４】
一方、強制待ちフラグがある場合は（ステップＳ２３０１：Ｙｅｓ）、システムコールインターフェース２１０ｈは、優先度を変更する対象となるタスクに対応したタスク情報管理部２２０ｇの優先度保存部２２５ｆに変更すべき優先度を格納し、このタスクの優先度を変更する要求のメイン処理からリターンする（ステップＳ２３０６）。
【０２５５】
図２８は、本実施の形態に係るタスク制御装置において、強制的な待ち状態であるタスクの優先度を変更する処理の例を示すタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０２５６】
図２８に示されるように、オペレーティングシステム上で、タスクＡ、タスクＢの２つのタスクが動作しているとする。また、タスクＢに対して、強制待ちシグナルに対応するシグナルハンドラＢが登録されているとする。
【０２５７】
オペレーティングシステム実行部２００ｈは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ｈは、強制的に状態を変化させるタスクの優先度を制御するために、最上位の優先度[１]を予約している。
【０２５８】
時刻ｔ１において、タスクＡ（優先度[１０]。）は、現在実行中である。タスクＢ（優先度[２０]。）は、実行可能状態である。
【０２５９】
時刻ｔ２において、タスクＡは、タスクＢを強制的な待ち状態に移行させる要求をオペレーティングシステム実行部２００ｈに出す。オペレーティングシステム実行部２００ｈは、タスクＢに強制待ちフラグを設定し、タスクＢに対して、強制待ちシグナルを送信し、タスクＢの現在の優先度[２０]を保存し、タスクＢの優先度を予約している優先度（最上位の優先度）に変更する。このとき、オペレーティングシステム実行部２００ｈは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。スケジューリング部２３０ａは、タスクＢをレディキューにリンクしなおし、次に実行すべきタスクとして最も高い優先度を持つ優先度[１]のタスクＢを選択する。
【０２６０】
時刻ｔ３において、タスクＢは、実行状態に切り替わる。オペレーティングシステム実行部２００ｈは、タスクＢのタスク内に戻る前に強制待ちシグナルを受信し、タスクＢに登録された強制待ちシグナルに対応するシグナルハンドラＢを呼び出す。
【０２６１】
時刻ｔ４において、強制待ちシグナルに対応するシグナルハンドラＢは、起動し、時刻ｔ５において、強制待ちシグナルに対応するシグナルハンドラＢは、現在実行中のタスクを強制待ち状態に移行させるために予約されたイベントを待つ要求を出す。オペレーティングシステム実行部２００ｈは、現在実行中のタスク、すなわち、タスクＢをそのイベント待ち状態に移行させる。タスクＢが待ち状態に移行することにより、次に実行すべきタスクは優先度[１０]のタスクＡとなる。
【０２６２】
時刻ｔ６において、タスクＡは、実行状態に切り替わり、オペレーティングシステム実行部２００ｈは、強制的に待ち状態に移行させる要求のメイン処理を継続し、時刻ｔ７において、タスクＡ内の処理にリターンする。そして、タスクＡは、タスク内の処理を継続する。タスクＢは、強制的な待ち状態に移行しており、その優先度は一時的に最も高い優先度（最上位の優先度）である[１]に変更されている。
【０２６３】
時刻ｔ８において、タスクＡは、タスクＢの優先度を[５]に変更する要求を出す。オペレーティングシステム実行部２００ｈは、タスクＢが強制待ち状態であることを判断し、タスクＢのタスク情報管理部２２０ｇの優先度保存部２２５ｆに優先度[５]を格納する。
【０２６４】
時刻ｔ９において、オペレーティングシステム実行部２００ｈは、タスクＢのタスク内にリターンする。
【０２６５】
時刻ｔ１０において、タスクＡは、タスクＢの強制待ち状態を解除する要求を出す。オペレーティングシステム実行部２００ｈは、タスクＢが強制待ち状態であることを判断し、タスクＢのタスク情報管理部２２０ｇの優先度保存部２２５ｆに保存されている優先度[５]を優先度管理部２２２ａに戻す。次に、タスクＢに強制待ちシグナルがすでに受信済みであることを判断し、タスクＢの強制待ち状態に移行させるために予約されたイベントを設定することでタスクＢの待ち状態を解除する。次に、タスクＢの強制待ちフラグを削除する。さらに、レディキューへのリンク、スケジューリング処理が実行され、実行可能状態のタスクの中で最も高い優先度[５]のタスクＢが次に実行すべきタスクとして選択される。
【０２６６】
時刻ｔ１１において、タスクＢは、実行状態に切り替わり、時刻ｔ１２において、オペレーティングシステム実行部２００ｈからタスクＢ内の処理にリターンする。
【０２６７】
以上、本実施の形態に係るタスク制御装置によれば、強制的な待ち状態のタスクを指定して優先度を変更する場合、優先度保存部２２５ｆに格納された優先度を更新することで、強制的な待ち状態を解除したときに更新された優先度を戻すことが可能になる。
【０２６８】
なお、本実施の形態では、強制的に状態を変化させるタスクの優先度を制御する方法として、実施の形態１で用いた方法を使用したが、実施の形態２、実施の形態３、または実施の形態４で用いた方法を使用することでも同様の効果を発する。また、実施の形態１で用いた方法および実施の形態３で用いた方法を組み合わせた方法、または実施の形態２で用いた方法および実施の形態４で用いた方法を組み合わせた方法を使用することでも同様の効果を発する。
【０２６９】
(実施の形態９)
次に、本発明に係る実施の形態９について、図面を参照しながら説明する。
【０２７０】
本実施の形態に係るタスク制御装置は、第１のタスクの状態を強制待ち状態に移行させる強制待ちシグナルと、第１のタスクの状態を強制終了状態に移行させる強制終了シグナルとのうち、強制終了シグナルを優先して受信することを特徴とする。
【０２７１】
具体的には、本実施の形態に係るタスク制御装置は、強制的な待ち状態のタスクを指定して、そのタスクを強制的に終了させる要求に応じた処理を実行可能にしたものである。例えば、μＩＴＲＯＮ仕様では、資源獲得による待ち状態のタスクを指定し強制的な待ち状態へ移行させることで、そのタスクは二重待ち状態となる。また、そのタスクを強制的に終了させることが可能である。
【０２７２】
以上の点を踏まえて、本実施の形態に係るタスク制御装置について説明する。なお、実施の形態６と同一の構成要素については、同一の参照符号を付して説明を省略する。
【０２７３】
図２９は、本実施の形態に係るタスク制御装置の機能構成を示す図である。図２９に示されるように、タスク制御装置１００ｉは、実施の形態６に係るタスク制御装置１００ｆ（図１７参照。）と比べて、下記の点が異なる。
【０２７４】
シグナル受信部２６０ｉは、さらに、シグナル管理部２２３ａからシグナルを受信するとき、強制終了シグナルを優先して受信するという機能を有する。例えば、シグナル管理部２２３ａは、少なくとも２ビットの情報を格納する領域があるとする。強制終了シグナルを１６進数で「０ｘ１」、強制待ちシグナルを１６進数で「０ｘ２」という情報とする。そして、シグナル受信部２６０ｉは、シグナル管理部２２３ａの下位ビットから情報を取得することで、強制終了シグナルと強制待ちシグナルの両方が格納されている場合に、強制終了シグナルを優先して受信することができる。
【０２７５】
図３０は、本実施の形態に係るタスク制御装置において、資源獲得待ち状態のタスクを強制的に待ち状態に移行させ、そのタスクを強制的に終了させる処理の例を示すタイミングチャートである。タイミングチャートの表記の仕方は図７と同様である。
【０２７６】
図３０に示されるように、ここでは、オペレーティングシステム上で、タスクＡ、タスクＢ、タスクＣの３つのタスクが動作しているとする。また、タスクＢに対して、強制終了シグナルに対応するシグナルハンドラと、強制待ちシグナルに対応するシグナルハンドラとが登録されているとする。さらに、強制終了シグナルと強制待ちシグナルとのそれぞれに対応するシグナルハンドラとして、同じシグナルハンドラＢを登録しているとする。シグナルハンドラＢは、引き渡されたシグナルを識別する情報によって、終了処理、または待ちに移行する処理を判断するものとする。
【０２７７】
オペレーティングシステム実行部２００ｉは、タスクに[１]から[９９]の数値のいずれかを優先度として設定する。なお、値が小さい程、優先度が高い。さらに、オペレーティングシステム実行部２００ｉは、強制的に状態を変化させるタスクの優先度を制御するために、最上位の優先度[１]を予約している。
【０２７８】
時刻ｔ１において、タスクＡ（優先度［１０］。）は、ある資源Ａ獲得による待ち状態である。タスクＢ（優先度［２０］。）は、現在実行中のタスクである。タスクＣ（優先度［３０］。）は、実行可能状態である。
【０２７９】
時刻ｔ２において、タスクＢ（優先度［２０］。）がある資源Ｂを獲得する要求を出す。ここで、タスクＢが獲得しようとする資源Ｂは、すでに使用されているとする。オペレーティングシステム実行部２００ｉは、タスクＢを資源Ｂ獲得待ち状態にする。タスクＢが待ち状態に移行するため、実行可能状態のタスクの中で最も高い優先度を持つタスクは優先度[３０]のタスクＣとなる。
【０２８０】
時刻ｔ３において、タスクＣは、実行状態に切り替わり、時刻ｔ４において、タスクＣ内の処理にリターンし、タスクＣ内の処理を継続する。
【０２８１】
時刻ｔ５において、タスクＣは、タスクＢを強制待ち状態に移行させる要求をオペレーティングシステム実行部２００ｉに出す。オペレーティングシステム実行部２００ｉは、タスクＢに対して、強制待ちシグナルを送信し、タスクＢの優先度を予約している優先度（最上位の優先度）に変更する。ここで、オペレーティングシステム実行部２００ｉは、最上位の優先度として優先度[１]を設定する。したがって、タスクＢの優先度は、一時的に優先度[１]になる。ただし、タスクＢは、資源Ｂ獲得の待ち状態であるため、レディキューにはリンクされない。
【０２８２】
時刻ｔ６において、タスクＣ内の処理にリターンし、時刻ｔ７において、タスクＣは、資源Ａを解放する。これにより、タスクＡの資源Ａ待ち状態が解除され、時刻ｔ８において、タスクＡは、実行状態に切り替わり、時刻ｔ９において、タスクＡ内の処理にリターンする。
【０２８３】
時刻ｔ１０において、タスクＡは、タスクＢを強制的に終了させる要求をオペレーティングシステム実行部２００ｉに出す。オペレーティングシステム実行部２００ｉは、タスクＢに対して、強制終了シグナルを送信し、タスクＢの優先度を最も高い優先度（最上位の優先度）に変更する。
【０２８４】
タスクＢは、資源Ｂ獲得の待ち状態であると判定され、状態管理部２２１ａに実行可能状態が格納される。
【０２８５】
スケジューリング部２３０ａは、次に実行すべきタスクとして、優先度[１]のタスクＢを選択し、時刻ｔ１１において、タスクＢは、実行状態に切り替わる。
【０２８６】
タスクＢに対して、強制待ちシグナルと強制終了シグナルとが送信されている。しかし、オペレーティングシステム実行部２００ｉのシグナル受信部２６０ｉは、強制終了シグナルを優先して受信し、タスクＢに登録された強制終了シグナルに対応するシグナルハンドラＢを呼び出す。
【０２８７】
時刻ｔ１２において、強制終了シグナルに対応するシグナルハンドラＢが起動する。
時刻ｔ１３において、強制終了シグナルに対応するシグナルハンドラＢは、現在実行中のタスク、すなわち、タスクＢを終了する要求をオペレーティングシステム実行部２００ｉに出す。オペレーティングシステム実行部２００ｉは、現在実行中のタスク、すなわち、タスクＢを終了させる。タスクＢが終了することにより、次に実行すべきタスクは優先度[１０]のタスクＡとなる。
【０２８８】
時刻ｔ１４において、タスクＡは、実行状態に切り替わり、オペレーティングシステム実行部２００ｉは、強制的に終了させる要求のメイン処理を継続し、時刻ｔ１５において、タスクＡ内の処理にリターンし、タスクＡ内の処理を継続する。
【０２８９】
以上、本実施の形態に係るタスク制御装置によれば、オペレーティングシステムの資源獲得待ち状態であるタスクを強制的に待ち状態に移行させ、さらにそのタスクを強制的に終了させる場合は、そのタスクに送信された強制待ちシグナルと強制終了シグナルのうち、強制終了シグナルを優先して受信することにより、そのタスクを強制的に終了させることができる。
【０２９０】
なお、本実施の形態では、強制的に状態を変化させるタスクの優先度を制御する方法として、実施の形態１で用いた方法を使用したが、実施の形態２、実施の形態３、または実施の形態４で用いた方法を使用することでも同様の効果を発する。また、実施の形態１で用いた方法および実施の形態３で用いた方法を組み合わせた方法、または実施の形態２で用いた方法および実施の形態４で用いた方法を組み合わせた方法を使用することでも同様の効果を発する。
【０２９１】
なお、本発明に係るタスク制御装置において動作するオペレーティングシステムを、組み込みシステム、コンピュータシステムなどのようなハードウェアシステムに読み出され得るように、光学記録媒体（例えば、ＣＤ−ＲＯＭなど。）、磁気記録媒体（例えば、ハードディスクなど。）、光磁気記録媒体（例えば、ＭＯなど。）、半導体メモリ（例えば、メモリカードなど。）などのようなコンピュータ読み取り可能な記録媒体に記録しておくとしてもよい。そして、これらの記録媒体を介して、他のハードウェアシステムにおいて実行されるとしてもよい。
【０２９２】
また、本発明に係るタスク制御装置において動作するオペレーティングシステムを、ネットワーク上のハードウェアシステムに保持しておき、ネットワークを介してダウンロードした他のハードウェアシステムにおいて実行されるとしてもよい。
【０２９３】
なお、タスク制御装置は、コンピュータシステム以外にも、デジタルＴＶ、デジタルレコーダ、ゲーム機、ＩＰ電話、携帯電話などのような組み込みシステムとしてもよい。
【産業上の利用可能性】
【０２９４】
本発明は、複数のタスクを、優先度が上位のタスクから優先して実行させるタスク制御装置などとして、特に、強制的に状態を変化させる対象となるタスクのシグナルハンドラ処理の影響を受けずにタスク切り替えを行うことにより、タスク切り替え処理時間の保証が可能となるため、リアルタイム性を特徴としたオペレーティングシステム等のタスク制御装置などとして、利用することができる。
【図面の簡単な説明】
【０２９５】
【図１】本発明の実施の形態１に係るタスク制御装置の機能構成を示す図である。
【図２】本発明の実施の形態１に係るタスク制御装置のハードウェア構成を示す図である。
【図３】本発明の実施の形態１に係るタスク制御装置において、強制的にタスクを終了させる要求のメイン処理を示すフローチャートである。
【図４】本発明の実施の形態１に係るタスク制御装置において、強制的に終了させるタスクに送信された強制終了シグナルによって呼び出される強制終了シグナルハンドラ処理を示したフローチャートである。
【図５】本発明の実施の形態１に係るタスク制御装置において、強制的にタスクを待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【図６】本発明の実施の形態１に係るタスク制御装置において、強制的に待ち状態に移行させるタスクに送信された強制待ちシグナルによって呼び出される強制待ちシグナルハンドラ処理を示したフローチャートである。
【図７】本発明の実施の形態１に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。
【図８】本発明の実施の形態２に係るタスク制御装置の機能構成を示す図である。
【図９】本発明の実施の形態２に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。
【図１０】本発明の実施の形態３に係るタスク制御装置の機能構成を示す図である。
【図１１】本発明の実施の形態３に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。
【図１２】本発明の実施の形態４に係るタスク制御装置の機能構成を示す図である。
【図１３】本発明の実施の形態４に係るタスク制御装置において、タスクを強制的に終了させる処理の例を示すタイミングチャートである。
【図１４】本発明の実施の形態５に係るタスク制御装置において、強制的にタスクの状態を変化させる機能を実現する場合のソフトウェア構成図である。
【図１５】本発明の実施の形態５に係るタスク制御装置において、強制的にタスクを終了させる要求のメイン処理を示すフローチャートである。
【図１６】本発明の実施の形態５に係るタスク制御装置において、タスクを強制的に待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【図１７】本発明の実施の形態６に係るタスク制御装置の機能構成を示す図である。
【図１８】本発明の実施の形態６に係るタスク制御装置において、タスクを強制的に待ち状態に移行させる要求のメイン処理を示すフローチャートである。
【図１９】本発明の実施の形態６に係るタスク制御装置において、受信したシグナルに応じてシグナルハンドラを呼び出す処理を示すフローチャートである。
【図２０】本発明の実施の形態６に係るタスク制御装置において、タスクの強制的な待ち状態を解除する要求のメイン処理を示すフローチャートである。
【図２１】本発明の実施の形態６に係るタスク制御装置において、タスクを強制的な待ち状態に移行させる処理およびその強制的な待ち状態を解除させる処理の例を示すタイミングチャートである。
【図２２】本発明の実施の形態７に係るタスク制御装置の機能構成を示す図である。
【図２３】本発明の実施の形態７に係るタスク制御装置において、受信したシグナルに応じてシグナルハンドラを呼び出す処理を示すフローチャートである。
【図２４】本発明の実施の形態７に係るタスク制御装置において、タスクの強制的な待ち状態を解除する要求のメイン処理を示すフローチャートである。
【図２５】本発明の実施の形態７に係るタスク制御装置において、タスクを強制的な待ち状態に移行させる処理およびその強制的な待ち状態を解除させる処理の例を示すタイミングチャートである。
【図２６】本発明の実施の形態８に係るタスク制御装置の機能構成を示す図である。
【図２７】本発明の実施の形態８に係るタスク制御装置において、タスクの優先度を変更する要求のメイン処理を示すフローチャートである。
【図２８】本発明の実施の形態８に係るタスク制御装置において、強制的な待ち状態であるタスクの優先度を変更する処理の例を示すタイミングチャートである。
【図２９】本発明の実施の形態９に係るタスク制御装置の機能構成を示す図である。
【図３０】本発明の実施の形態９に係るタスク制御装置において、資源獲得待ち状態のタスクを強制的に待ち状態に移行させ、そのタスクを強制的に終了させる処理の例を示すタイミングチャートである。
【図３１】従来のタスク制御装置の機能構成を示す図である。
【図３２】従来のタスク制御装置において、シグナル機能によってタスクを強制的に終了させる処理の例を示すタイミングチャートである。
【符号の説明】
【０２９６】
１００，１００ａ〜１００ｉ  タスク制御装置
１０１ａ  ＣＰＵ
１０２ａ  ＲＡＭ
１０３ａ  ＲＯＭ
１０４ａ  Ｉ／Ｏ
１０５ａ  ＨＤＤ
２００，２００ａ〜２００ｉ  オペレーティングシステム実行部
２１０，２１０ａ，２１０ｈ  システムコールインターフェース
２２０，２２０ａ，２２０ｅ，２２０ｆ，２２０ｇ  タスク情報管理部
２２１，２２１ａ  状態管理部
２２２，２２２ａ  優先度管理部
２２３，２２３ａ  シグナル管理部
２２４ｅ  強制状態変化管理部
２２５ｆ  優先度保存部
２３０，２３０ａ，２３０ｂ，２３０ｄ  スケジューリング部
２４０，２４０ａ  ディスパッチ部
２５０，２５０ａ  シグナル送信部
２６０，２６０ａ，２６０ｉ  シグナル受信部
２７０，２７０ａ〜２７０ｇ  優先度変更部
３００  タスクＡ実行部
３０１  タスクＡに登録されたシグナルハンドラ
３１０  タスクＢ実行部
３１１  タスクＢに登録されたシグナルハンドラ
３２０  タスクＣ実行部
３２１  タスクＣに登録されたシグナルハンドラ
【図１】
2007140753.tif 000003
【図２】
2007140753.tif 000004
【図３】
2007140753.tif 000005
【図４】
2007140753.tif 000006
【図５】
2007140753.tif 000007
【図６】
2007140753.tif 000008
【図７】
2007140753.tif 000009
【図８】
2007140753.tif 000010
【図９】
2007140753.tif 000011
【図１０】
2007140753.tif 000012
【図１１】
2007140753.tif 000013
【図１２】
2007140753.tif 000014
【図１３】
2007140753.tif 000015
【図１４】
2007140753.tif 000016
【図１５】
2007140753.tif 000017
【図１６】
2007140753.tif 000018
【図１７】
2007140753.tif 000019
【図１８】
2007140753.tif 000020
【図１９】
2007140753.tif 000021
【図２０】
2007140753.tif 000022
【図２１】
2007140753.tif 000023
【図２２】
2007140753.tif 000024
【図２３】
2007140753.tif 000025
【図２４】
2007140753.tif 000026
【図２５】
2007140753.tif 000027
【図２６】
2007140753.tif 000028
【図２７】
2007140753.tif 000029
【図２８】
2007140753.tif 000030
【図２９】
2007140753.tif 000031
【図３０】
2007140753.tif 000032
【図３１】
2007140753.tif 000033
【図３２】
2007140753.tif 000034