(57)【要約】【課題】互いに優先関係の無いタスク集合間においても、１のタスクが優先度の関係がない他のタスクによって長時間待機状態にされることを防ぐ。【解決手段】複数のタスクのうち、第１のタスクがクリティカルセクションに入って排他的処理を実行しているときに、他のタスクである第２のタスクからクリティカルセクションに入ろうとする要求があった場合、タスク集合判定部２０１は、第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定する（ステップＳ１００）。  ステップＳ１００にて、第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合（ステップＳ１００：ＮＯ）、優先度制御部２０２は、第１のタスクの優先度を、第１のタスクが属するタスク集合の中で最も高い優先度（Ｐ０）まで上げる（ステップＳ１０３）。【選択図】図３
2007148582.tif 000002
【特許請求の範囲】
【請求項１】
複数のタスクから成るタスク集合を複数管理し、同一のタスク集合内の各タスクについては、タスク毎に設定された優先度に基づき実行すべきタスクを逐次選択することにより各タスクを逐次実行するタスク実行制御装置であって、
第１のタスクが、前記複数のタスク集合で共用する共用資源にアクセスしているとき、第２のタスクが当該共用資源にアクセスしようとすると、前記第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定するタスク集合判定手段と、
（ａ）前記第１のタスクと第２のタスクとが同じタスク集合に属すると判定された場合、さらに前記第１のタスクの優先度と前記第２のタスクの優先度とを比較して、当該第２のタスクの優先度のほうが高い場合にのみ、前記第２のタスクの優先度を前記第１のタスクに継承するとともに、
（ｂ）前記第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合、前記第１のタスクの優先度を所定値だけ上げる優先度制御手段とを含む
ことを特徴とするタスク実行制御装置。
【請求項２】
前記所定値は、前記第１のタスクの優先度を、前記第１のタスクが属するタスク集合内で最高位に上げるように定めた値である
ことを特徴とする請求項１記載のタスク実行制御装置。
【請求項３】
前記所定値は、前記第１のタスクが属するタスク集合の中で最低位の優先度と最高位の優先度との差分以上の値である
ことを特徴とする請求項１記載のタスク実行制御装置。
【請求項４】
前記優先度制御手段はさらに、優先度の変更を行った後、前記第１のタスクによる前記共用資源へのアクセスが終了すると、前記第１のタスクの優先度を元の優先度に戻す
ことを特徴とする請求項１記載のタスク実行制御装置。
【請求項５】
複数のタスクから成るタスク集合を複数管理し、同一のタスク集合内の各タスクについては、タスク毎に設定された優先度に基づき実行すべきタスクを逐次選択することにより各タスクを逐次実行するタスク実行制御方法であって、
第１のタスクが前記共用資源にアクセスしているとき、第２のタスクが当該共用資源にアクセスしようとすると、前記第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定するタスク集合判定ステップと、
（ａ）前記第１のタスクと第２のタスクとが同じタスク集合に属すると判定された場合、さらに前記第１のタスクの優先度と前記第２のタスクの優先度とを比較して、当該第２のタスクの優先度のほうが高い場合にのみ、前記第２のタスクの優先度を前記第１のタスクに継承するとともに、
（ｂ）前記第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合、前記第１のタスクの優先度を所定値だけ上げる優先度制御ステップとを含む
ことを特徴とするタスク実行制御方法。
【請求項６】
複数のタスクから成るタスク集合を複数管理し、同一のタスク集合内の各タスクについては、タスク毎に設定された優先度に基づき実行すべきタスクを逐次選択することにより各タスクを逐次実行するタスク実行制御処理をコンピュータに実行させるためのプログラムであって、当該タスク実行制御処理は、
第１のタスクが前記共用資源にアクセスしているとき、第２のタスクが当該共用資源にアクセスしようとすると、前記第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定するタスク集合判定ステップと、
（ａ）前記第１のタスクと第２のタスクとが同じタスク集合に属すると判定された場合、さらに前記第１のタスクの優先度と前記第２のタスクの優先度とを比較して、当該第２のタスクの優先度のほうが高い場合にのみ、前記第２のタスクの優先度を前記第１のタスクに継承するとともに、
（ｂ）前記第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合、前記第１のタスクの優先度を所定値だけ上げる優先度制御ステップとを含む
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳ（Operating System）により実行されるタスク管理の技術に関し、特に、個々に優先度が設定されている複数のタスクの実行制御を行うためのタスク実行制御装置、タスク実行制御方法、及びプログラムに関する。
【背景技術】
【０００２】
近年、ＬＳＩ（Large Scale Integrated Circuit）技術の進歩により、様々な情報処理装置が開発されている。これらの情報処理装置では、ＯＳ（Operating System）が提供する環境下でＣＰＵ（Central Processing Unit）やその他のプロセッサが所定のプログラムを実行することにより、様々な情報処理を行うことができるようになっている。
ところで、ＯＳ上でＣＰＵやその他のプロセッサが所定のプログラムを実行するとき、ＯＳはプログラムを「タスク」と呼ばれる単位で管理する。これをＯＳのタスク管理機能と呼ぶ。特に、ＯＳが行うタスク管理の主な働きとして、複数のタスクに対して行う実行順序の制御がある。
【０００３】
従来、プログラムに複数のタスクが含まれる場合、タスク毎に優先度が設定されており、同時に複数のタスクを実行しようとしたときに優先度が高いほうのタスク（以下、「高優先度タスク」と呼ぶ）が先に実行され、優先度が低いほうのタスク（以下、「低優先度タスク」と呼ぶ）はこの間待機状態に入り、高優先度タスクの処理が終了すると低優先度タスクが実行されるようになっていた。従って、低優先度タスクが処理を実行している最中に高優先度タスクが処理を開始しようとすると、いったん低優先度タスクは処理を中断して待機状態となり高優先度タスクが処理を開始する（例えば、特許文献１参照）。
【０００４】
また、タスクが行う特殊な処理として、「排他的処理」がある。これは、複数のタスクで共用する共用資源の中でも、１のタスクがアクセスを開始してから終了するまでの間に他のタスクがアクセスすると不都合が生じる共用資源にアクセスして行う処理である。タスクは、排他的処理を開始するときに、ＯＳに対し、自タスクが占有する共用資源への他のタスクからのアクセスを禁止するよう要求し、ＯＳ側はこの要求を受けて、タスクの優先度に関わらず他のタスクが排他的処理を開始するのを禁止する。一方、タスクが排他的処理を終了すると、その旨をＯＳに通知することで、ＯＳは他のタスクが排他的処理を開始するのを許可する。このようにＯＳが制御を行うことにより、一度１のタスクが排他的処理を開始すると、終了してその共用資源を開放するまでは、１のタスクよりも優先度の高い他のタスクであっても排他的処理を開始することができない。排他的処理の一例を挙げると、複数のタスクが共用する共用変数に対して、値を読み込んでインクリメントしてさらに上書きをする、といった処理である。なお、排他的処理を開始してから終了するまでのプログラム部分を「クリティカルセクション」という。
【０００５】
以下に、例を挙げて、タスク管理について詳述する。
図５を参照して説明する。ここでは、プログラムＰに３つのタスク（Ｔ１〜Ｔ３）が含まれており、タスクＴ１の優先度（Ｐ１）が最も優先度が高く、次いでタスクＴ２の優先度（Ｐ２）、タスクＴ３の優先度（Ｐ３）と続くものとする。この例の場合、タスクＴ３が時間ｔ０で処理を開始し、通常の処理を経てｔ１でクリティカルセクションに入る（ＲＥＱ−＞ＳＴＡＲＴ）。その後、ｔ２において、タスクＴ３よりも優先度の高いタスクＴ１が通常処理を開始するため、タスクＴ３はクリティカルセクション内での処理をいったん中断して待機状態となる（ＰＡＵＳＥ）。そして、ｔ３において、タスクＴ１が通常の処理を終えて、タスクＴ３がアクセスしている共用資源にアクセスする排他的処理を開始しようとするが（ＲＥＱ）、先にクリティカルセクションに入っていたタスクＴ３が優先されるため待たなければならない（ＷＡＩＴ）。またその後、ｔ４において、タスクＴ３よりも優先度の高いタスクＴ２が通常の処理を開始するためにタスクＴ３は再びいったん待機状態に入る（ＰＡＵＳＥ）。その後、タスクＴ３はｔ５でやっと処理を再開して（ＲＥＳＴＡＲＴ）ｔ６で終了し（ＥＮＤ２）、待機状態にあったタスクＴ１がようやくクリティカルセクションに入る（ＳＴＡＲＴ）。
【０００６】
このように、一連の流れの中で、本来優先度が一番高いはずのタスクＴ１がｔ３〜ｔ６という長い間クリティカルセクションに入れずに待たされることがある。
ｔ４〜ｔ５に着目すると、この間は、タスクＴ２が通常の処理を実行したことによりタスクＴ３のクリティカルセクション内での処理を中断してしまい、その結果、タスクＴ１は、タスクＴ１よりも優先度が低いタスクＴ２の処理が終わるまでの間余計に待たなければならなくなっていることがわかる。
【０００７】
このように、従来のタスク管理の手法では、ｔ４〜ｔ５の期間において、低優先度のタスクＴ２が高優先度のタスクＴ１を間接的に待たせるという事態が発生してしまうという問題があった。
このような問題を解決するために、さらに、従来では、高優先度のタスクが低優先度のタスクによって余計に待たされないよう、１のタスクがクリティカルセクションに入っているときにより優先度の高い別のタスクがクリティカルセクションに入ろうとした場合、１のタスクの優先度を一時的に別のタスクの優先度に変更するという解決策が提案されていた。本明細書では、タスクの優先度を別のタスクの優先度と同一の優先度に変更することを「優先度継承」と呼ぶ。（例えば、非特許文献１参照）。
【０００８】
図６を参照すると、ｔ１からタスクＴ３がクリティカルセクションに入っている間、ｔ３で、より優先度の高いタスクＴ１がクリティカルセクション入りを要求する（ＲＥＱ）。この時点で、タスクＴ１の優先度Ｐ１をタスクＴ３に継承することで、タスクＴ３とタスクＴ１の優先度が同じになる。タスクＴ３はクリティカルセクション内での処理を継続し、クリティカルセクションを抜ける（ＥＮＤ２）ｔ５になると元の優先度に戻る。タスクＴ３がクリティカルセクションを抜けるまで、優先度が継承された期間を「優先度継承期間」と呼ぶ。この優先度継承期間内のｔ４で、本来タスクＴ３よりも優先度の高いタスクＴ２が処理を開始しようとするが、タスクＴ３がタスクＴ１の優先度Ｐ１を継承しているため、タスクＴ３のほうが優先される。
【０００９】
このように、従来の解決策では、優先度継承を行うことで、タスクＴ３のクリティカルセクション内での処理がタスクＴ２によって中断されることがなくなり、よって、より優先度の高いタスクＴ１が優先度の低いタスクＴ２によって間接的に待たされることがなくなる。
【特許文献１】特開２００４−２８０２９７号公報
【非特許文献１】Ｌｕｉ  Ｓｈａ，Ｒａｇｕｎａｔｈａｎ  Ｒａｊｋｕｍａｒ，Ｊｏｈｎ  Ｐ．Ｌｅｈｏｃｚｋｙ，“Ｐｒｉｏｒｉｔｙ  Ｉｎｈｅｒｉｔａｎｃｅ  Ｐｒｏｔｏｃｏｌｓ：Ａｎ  Ａｐｐｒｏａｃｈ  ｔｏ  Ｒｅａｌ−Ｔｉｍｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ”，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ，Ｖｏｌ．３９，Ｎｏ．９，ｐｐ．１７４−１８４、２００４
【発明の開示】
【発明が解決しようとする課題】
【００１０】
ところで、上述した従来の手法では、タスクＴ１〜Ｔ３のそれぞれが優先付けされているが、タスク同士が優先付けされるべきではない場合がある。すなわち、具体的に言えば、互いに関係の無い独立した処理を行う２つのアプリケーションプログラムが処理を行う場合、一方のアプリケーションプログラムに属するタスク（仮に、タスク群Ａとする）と他方のアプリケーションプログラムに属するタスク（仮に、タスク群Ｂとする）との間には相関関係がなく、タスク群Ａとタスク群Ｂとの間には優先付けがされるべきではない。
この場合の例を図７に示す。
【００１１】
図７を参照すると、１のプログラムにタスクＴＡ１〜ＴＡ２（これらをタスク集合Ａとする）が含まれており、他のプログラムにタスクＴＢ１（これをタスク集合Ｂとする）が含まれている。タスク集合Ａの中ではタスクＴＡ１の優先度（ＰＡ１）ほうがタスクＴＡ２の優先度（ＰＡ２）より高いものとする。この例の場合、タスクＴＡ２とタスクＴＢ１とが時間ｔ０で処理を開始し、両タスクとも通常の処理を経て、ｔ１でＴＡ２がクリティカルセクションに入る（ＲＥＱ―＞ＳＴＡＲＴ）。その後、ｔ２において、タスクＴＡ２よりも優先度の高いＴＡ１が通常処理を開始するため、タスクＴＡ２はクリティカルセクション内での処理をいったん中断して待機状態となる（ＰＡＵＳＥ）。そして、時間ｔ３において、タスクＴＢ１が通常の処理を終えて、ＴＡ２がアクセスしている共用資源にアクセスする排他的処理を開始しようとするが（ＲＥＱ）、先にクリティカルセクションに入っているため待たなければならない（ＷＡＩＴ）。その後、タスクＴＡ２は時間ｔ４でやっと排他的処理を再開して（ＲＥＳＴＡＲＴ）ｔ５で終了し（ＥＮＤ１）、待機状態にあったタスクＴＢ１がようやくクリティカルセクションに入る（ＳＴＡＲＴ）。
【００１２】
このように、一連の流れの中で、タスクＴＢ１が、優先付けされていないＴＡ１によってｔ３〜ｔ５という長い間クリティカルセクションに入れずに待たされることがある。
ｔ３〜ｔ４に着目すると、この間は、タスクＴＡ１が通常の処理を実行したことによりタスクＴＡ２のクリティカルセクション内での処理を中断してしまい、その結果、互いに優先度の関係のないタスクＴＡ１がタスクＴＢ１を間接的に待たせるという事態が発生している。
【００１３】
ここで、上述した従来の解決策を図７の例に適用すると、互いに優先度の関係ないタスクＴＡ１とタスクＴＢ１との間で優先度の継承を行うことになってしまう。ところが、タスク集合Ａ、Ｂ間には相関関係がなく、タスクＴＡ１からタスクＴＢ１に優先を継承すべきではないため、この従来の解決策を使うべきではない。
そこで、本発明は、かかる問題に鑑みてなされたものであり、互いに優先関係の無いタスク集合間においても、１のタスクが優先度の関係のない他のタスクによって長時間待機状態にされることを防ぐタスク実行制御装置、タスク実行制御方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明に係るタスク実行制御装置は、複数のタスクから成るタスク集合を複数管理し、同一のタスク集合内の各タスクについては、タスク毎に設定された優先度に基づき実行すべきタスクを逐次選択することにより各タスクを逐次実行するタスク実行制御装置であって、第１のタスクが、前記複数のタスク集合で共用する共用資源にアクセスしているとき、第２のタスクが当該共用資源にアクセスしようとすると、前記第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定するタスク集合判定手段と、（ａ）前記第１のタスクと第２のタスクとが同じタスク集合に属すると判定された場合、さらに前記第１のタスクの優先度と前記第２のタスクの優先度とを比較して、当該第２のタスクの優先度のほうが高い場合にのみ、前記第２のタスクの優先度を前記第１のタスクに継承するとともに、（ｂ）前記第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合、前記第１のタスクの優先度を所定値だけ上げる優先度制御手段とを含むことを特徴とする。
【発明の効果】
【００１５】
上記構成により、本発明に係るタスク実行制御装置によれば、クリティカルセクションに入ろうとするタスク（Ｔ２）とすでに入っているタスク（Ｔ１）とが同じタスク集合に属する場合は優先度継承の手法を用いることにより、Ｔ１の優先度を最小限上げることでＴ２が長時間待機状態になることを防ぐことができるとともに、Ｔ１とＴ２とが異なるタスク集合に属する場合であっても、Ｔ２の優先度を継承することなくＴ１の優先度を上げることで、他のタスクによってＴ１のクリティカルセクション内での処理が中断されにくくすることができる。これにより、１のタスクが優先度の関係のない他のタスクによって長時間待機状態にされることを防ぐことができる。
【００１６】
また、上記タスク実行制御装置において、前記所定値は、前記第１のタスクの優先度を、前記第１のタスクが属するタスク集合内で最高位に上げるように定めた値であることを特徴とする。
この構成により、Ｔ１の優先度が、Ｔ１の属するタスク集合内で最高位まで上がるので、クリティカルセクション内での処理を他のタスクによって中断されることを防ぐことができる。
【００１７】
また、上記タスク実行制御装置において、前記所定値は、前記第１のタスクが属するタスク集合の中で最低位の優先度と最高位の優先度との差分以上の値であることを特徴とする。
この構成により、例えば、クリティカルセクションに入って優先度が上がるタスクが複数存在した場合に、これら複数のタスクの優先度が両方固定値だけ上がることになるため、両タスク間の優先度付けを維持したままでいることができる。
【００１８】
また、上記タスク実行制御装置において、前記優先度制御手段はさらに、優先度の変更を行った後、前記第１のタスクによる前記共用資源へのアクセスが終了すると、前記第１のタスクの優先度を元の優先度に戻すことを特徴とする。
この構成により、Ｔ２がクリティカルセクションを抜けるとＴ２の優先度が元の優先度に戻るため、本来の優先度に基づくタスク管理を維持することができる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照しながら本発明の実施の形態について説明していく。
＜１．ハードウェア構成＞
本発明のタスク実行制御装置は、ＯＳの１機能であるタスク管理を行うソフトウェアとして実現される機能であり、ＰＣ（Personal Computer）等の情報処理システム内に組み込まれて使用される。
【００２０】
図１は、本発明のタスク実行装置２００が組み込まれた情報処理システム１００の主要な構成を模式的に示したブロック図である。
図１を参照すると、情報処理システム１００は、ＣＰＵ１０１、プロセッサＡ１０２、プロセッサＢ１０３、ＲＡＭ（Random Access Memory）１０４、ＲＯＭ（Read Only Memory）１０５、ＨＤＤ（Hard Disk Drive）１０６、及びバス１０７を含んでいる。
【００２１】
ＣＰＵ１０１は、情報処理システム１００全体の制御を司るメイン・プロセッサであり、ＯＳの制御下で、各種プログラムを実行する。
プロセッサＡ１０２は、情報処理システム１００内で特定の処理を実行するためのサブ・プロセッサである。例えば、画像処理用のプログラムを実行する。
プロセッサＢ１０３は、情報処理システム１００内で特定の処理を実行するためのサブ・プロセッサである。例えば、音声処理用のプログラムを実行する。プロセッサＡ１０２とプロセッサＢ１０３は共にサブ・プロセッサであるが、それぞれは独立してプログラムを実行する。
【００２２】
ＲＡＭ１０４は、書き込み可能なメモリであり、ＣＰＵ１０１、プロセッサＡ１０２、及びプロセッサＢ１０３において実行されるプログラムのロードや、実行中プログラムの作業データの一時的格納に使用される。プログラムとしては、例えば、ＢＩＯＳ（Basic Input/Output System）、ＯＳ、アプリケーションがある。
ＲＯＭ１０５は、読み込み専用のメモリであり、プログラムやデータの恒久的な記憶に使用される。恒久的に記憶しておくプログラムとしては、例えば、ＢＩＯＳがある。
【００２３】
ＨＤＤ１０６は、磁気ディスクを搭載した記憶装置であり、プログラムやデータの不揮発的記憶に使用される。例えば、ＯＳやアプリケーションが不揮発的に記憶されている。
バス１０７は、上述した各構成要素を相互に接続するための信号伝送路である。
なお、情報処理システム１００には、この他にも入力装置や出力装置等、多くの構成要素が含まれるのが一般的であるが、本発明のタスク実行制御装置を説明する上で重要ではないため省略する。
【００２４】
以上が、タスク実行制御装置が組み込まれた情報処理システムについての説明である。
＜２．タスク実行制御装置２００＞
次に、本発明のタスク実行制御装置と、このタスク実行制御装置が実効を制御するタスクについて説明する。
タスク実行制御装置２００は、情報処理システム１００のＨＤＤ１０６に記憶されているＯＳの１機能として存在している。
【００２５】
タスク実行制御装置２００は、ＣＰＵ１０１、プロセッサＡ１０２、及びプロセッサＢ１０３が実行するプログラムを「タスク」単位で管理するとともに、複数のタスクから成るタスク集合を複数管理する。タスクは、プログラムの実行に伴って１つ以上が生成され、場合によっては次々と複数のタスクが生成され、これらのタスクが実行されていく。
また、タスク実行制御装置２００は、同一のタスク集合内の各タスクについては、タスク毎に設定された優先度に基づき実行すべきタスクを逐次選択することにより各タスクを逐次実行する。
【００２６】
図２は、ソフトウェアとして実現されるタスク実行制御装置２００とタスクの関係を模式的に表した概略図である。ここでは、プロセッサＡ１０２とプロセッサＢ１０３がプログラムを実行する際に生成されるタスクを示している。
＜２−１．タスクとタスク集合＞
図２を参照すると、プロセッサＡ１０２がプログラムを実行する際に生成されるタスクＴＡの集合がタスク集合Ａであり、プログラムＢ１０３がプログラムを実行する際に生成されるタスクＴＢの集合がタスク集合Ｂである。これらタスク集合Ａ内のタスクＴＡ及びタスク集合Ｂ内のタスクＴＢは、実際には、プログラム実行中にＲＡＭ１０４に一時的に格納されるものである。
【００２７】
ここで、タスクＴＡ及びタスクＴＢについて説明する。
タスク集合Ａに属するタスクＴＡには、それぞれ優先度が設定されている。図２では、降順に、タスクＴＡ１の優先度ＰＡ１、タスクＴＡ２の優先度ＰＡ２、タスクＴＡ３の優先度ＰＡ３となっている。
同様に、タスク集合Ｂに属するタスクＴＢには、それぞれ優先度が設定されている。図２では、タスクＴＢ１には一番高い優先度ＰＢ１が設定されており、降順にタスクＴＢ２の優先度ＰＢ２、タスクＴＢ３の優先度ＰＢ３となっている。一方、タスク集合Ａとタスク集合Ｂの間には優先度の関連付けはないため、タスクＴＡ１〜ＴＡ３と、タスクＴＢ１〜ＴＢ３との間には優先付けがされていない。
【００２８】
このように同一タスク集合に属する複数のタスクには個々に優先付けがなされており、同時に複数のタスクを実行しようとするときに、タスク実行制御装置２００は、高優先度タスクを先に実行するよう制御する。その間、低優先度タスクは待機状態に入り、高優先度タスクの処理が終了すると低優先度タスクが処理を実行するよう制御する。従って、低優先度タスクを実行している最中に高優先度タスクが処理を開始しようとすると、いったん低優先度タスクは処理を中断して待機状態となり、高優先度タスクが処理を開始することになる。
【００２９】
また、タスクＴＡとタスクＴＢとで共用する共用資源があり、タスクＴＡとタスクＴＢは、この共用資源の中でも１のタスクがアクセスを開始して終了するまでの間他のタスクがアクセスすると不具合が生じる「排他的処理」を行うことがある。この排他的処理を開始してから終了するまでのプログラム部分を「クリティカルセクション」といい、タスクＴＡ及びＴＢは、クリティカルセクションに入って排他的処理を開始するときに、ＯＳに対し、自タスクが占有する共用資源への他のタスクからのアクセスを禁止するよう要求する。ＯＳ側はこの要求を受けて、タスクの優先度に関わらず他のタスクが排他的処理を開始するのを禁止する。一方、タスクが排他的処理を終了してクリティカルセクションを抜けると、その旨をＯＳに通知することで、ＯＳは他のタスクが排他的処理を開始するのを許可する。このようにＯＳが制御を行うことにより、一度１のタスクが排他的処理を開始すると、終了してその共用資源を開放するまでは、１のタスクよりも優先度の高い他のタスクであっても排他的処理を開始することができない。
排他的処理の一例を挙げると、複数のタスクが共用する共用変数に対して、値を読み込んでインクリメントしてさらに上書きする、といった処理である。
なお、ここで、「共用」とは、同じ瞬間ではないがタスクＴＡとタスクＴＢとが共通して使用することをいう。
【００３０】
図２を参照すると、情報処理システム１００において、ＲＯＭ１０５とＨＤＤ１０６内に、タスクＴＡ１〜ＴＡ３及びタスクＴＢ１〜ＴＢ３が共用しており排他的処理の対象となる「ＣＳ共用資源」が存在する。
＜２−２．タスク実行制御装置２００の構成＞
ここから、タスク実行制御装置２００が行うタスク管理について説明していく。
【００３１】
また、タスク実行制御装置２００は、タスク集合Ａに属するタスクＴＡやタスク集合Ｂに属するタスクＴＢの中で、ＲＯＭ１０５内のＣＳ共用資源１０５ａ又はＨＤＤ１０６内のＣＳ共用資源１０６ａにアクセスして排他的処理を実行しようとするタスクが競合した場合に、タスク実行の制御を行う。
図２を参照すると、タスク実行制御装置２００は、タスク集合判定部２０１と優先度制御部２０２とを含む。
【００３２】
タスク集合判定部２０１は、複数のタスク間で、排他的処理を実行しようとする２つタスクが競合した場合に、両タスクが属するタスク集合のアプリケーションプログラムの識別子を比較することで、この２つのタスクが同じタスク集合に属するか否かを判定する。
優先度制御部２０２は、タスク集合判定部２０１の判定結果に応じて、競合した２つのタスクの実行制御を行う。
＜２−３．タスク実行制御装置２００の処理動作＞
次に、タスク実行制御装置２００が行うタスクの実行制御動作について詳細に説明する。
【００３３】
図３は、タスク実行制御装置２００が行うタスク管理の処理動作を示すフローチャートである。
図３を参照すると、複数のタスクのうち、第１のタスクがクリティカルセクションに入って排他的処理を実行しているときに、他のタスクである第２のタスクからクリティカルセクションに入ろうとする要求があった場合、タスク集合判定部２０１は、第１のタスクと第２のタスクとが同じタスク集合に属するか否かを判定する（ステップＳ１００）。
【００３４】
ステップＳ１００にて、第１のタスクと第２のタスクとが同じタスク集合に属すると判定された場合は（ステップＳ１００：ＹＥＳ）、優先度制御部２０２がさらに、第２のタスクの優先度のほうが第１のタスクの優先度より高いか否かを判定し（ステップＳ１０１）、第２のタスクの優先度のほうが高い場合は（ステップＳ１０１：ＹＥＳ）、第１のタスクの優先度をＲＡＭ１０４に記憶させるとともに第２のタスクの優先度を第１のタスクに継承する（ステップＳ１０２）。一方、第１のタスクと第２のタスクが同じ優先度である場合、もしくは、第１のタスクの優先度のほうが高い場合（ステップＳ１０１：ＮＯ）、優先度の継承は行わない。
【００３５】
ステップＳ１００にて、第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合（ステップＳ１００：ＮＯ）、優先度制御部２０２は、第１のタスクの優先度をＲＡＭ１０４に記憶させるとともに第１のタスクの優先度を、第１のタスクが属するタスク集合の中で最も高い優先度（Ｐ０）まで上げる（ステップＳ１０３）。
その後、第１のタスクが排他的処理を終了し、クリティカルセクションを抜ける旨をＯＳに通知すると（ステップＳ１０４：ＹＥＳ）、優先度制御部２０２は、ＲＡＭ１０４に記憶しておいた第１のタスクの優先度を第１のタスクに設定することで、元の優先度に戻す（ステップＳ１０５）。なお、同図では、タスクがクリティカルセクションを抜けたか否かを繰り返し監視するよう便宜的に図示しているが、タスクからＯＳへの通知があったときに優先度制御部２０２がこれを認識する。
【００３６】
このように、タスク実行制御装置２００のタスク管理処理によれば、第１のタスクと第２のタスクとが同じタスク集合に属する場合は、両タスク間に優先付けがされているため、優先度の継承を行い、一方、第１のタスクと第２のタスクとが異なるタスク集合に属する場合は、両タスク間で優先度の継承を行うべきでないため、第１のタスクの優先度が第１のタスクが属するタスク集合の中で最高位となるよう、優先度を上げる。
＜２−４．具体例＞
ここで、タスク実行制御装置２００が行うタスクの実行制御動作を、具体例に基づいて詳述する。
【００３７】
図４は、情報処理システム１００において、プロセッサＡ１０２が実行するプログラムのタスク集合Ａに属するタスクＴＡと、プロセッサＢ１０３が実行するプログラムのタスク集合Ｂに属するタスクＴＢとの間でのタスク実行制御処理を示したタイムチャートである。
図４を参照すると、タスクＴＡ２とタスクＴＢ１とが時間ｔ０で処理を開始し、両タスクとも通常の処理を経て、時間ｔ１でＴＡ２がクリティカルセクションに入る（ＲＥＱ−＞ＳＴＡＲＴ）。その後、時間ｔ２において、タスクＴＡ２よりも優先度の高いＴＡ１が通常処理を開始するため、タスクＴＡ２はクリティカルセクション内での処理をいったん中断して待機状態となる（ＰＡＵＳＥ）。そして、時間ｔ３において、タスクＴＢ１が通常の処理を終えて、ＴＡ２がアクセスしている共用資源にアクセスする排他的処理を開始しようとする（ＲＥＱ）。ここで、ＴＢ１のＲＥＱを受けて、タスク集合判定部２０１は、ＴＡ２とＴＢ１とが同じタスク集合に属するか否かを判定する（ステップＳ１００）。ＴＡ２とＴＢ１とは互いに異なるタスク集合に属しているため、優先度制御部２０２は、タスク集合Ａの中で最高位Ｐ０となるようＴＡ２の優先度を上げる（ステップＳ１０３）。この優先度変更により、タスクＴＡ２の優先度Ｐ０がタスクＴＡ１の優先度Ｐ１よりも高くなったため、時間ｔ３から、タスクＴＡ１が通常の処理を中断して待機状態に入るとともに、タスクＴＡ２が中断していた排他的処理を再開してクリティカルセクションに入る（ＲＥＳＴＡＲＴ）。時間ｔ４にて、タスクＴＡ２がクリティカルセクションを抜けると（ＥＮＤ１）、優先度制御部２０２は、タスクＴＡ２の優先度を元の優先度Ｐ２に戻す（ステップＳ１０４）。タスクＴＢ１は、時間ｔ４からクリティカルセクションに入る（ＳＴＡＲＴ）。
【００３８】
このように時間ｔ３の時点でタスクＴＡ２の優先度を変更する処理を行うことで、タスクＴＡ２が間接的にタスクＴＢ１の排他的処理の開始を遅らせてしまうという事態を防ぐことができる。
図７に示す従来例と比べると、従来例では時間ｔ３〜ｔ５にかけてＴＢ１が待機状態となっていたが、図４に示す本実施の形態では時間ｔ３〜ｔ４にかけてＴＢ１が待機状態となっていることから、ＴＢ１の待機時間が時間ｔ４〜ｔ５だけ短くなったことが分かる。
【００３９】
以上、説明してきたように、本発明のタスク実行制御装置２００によれば、第１のタスクと第２のタスクとが同じタスク集合に属する場合は、優先度の継承によって第１のタスクの優先度を最小限上げることにより、排他的処理の競合による第２のタスクの待機時間を短縮することができる。一方、第１のタスクと第２のタスクとが異なるタスク集合に属する場合であっても、第１のタスクが属するタスク集合の中で最高位となるよう第１のタスクの優先度を上げることにより、排他的処理の競合による第２のタスクの待機時間を短縮することができる。
＜３．変形例＞
上述の実施の形態では、第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合（ステップＳ１００：ＮＯ）、優先度制御部２０２は、第１のタスクの優先度を、第１のタスクが属するタスク集合の中で最も高い優先度（Ｐ０）まで上げる（ステップＳ１０３）ようにしているが、この優先度制御部２０２の制御は次のような変形を採ることができる。
【００４０】
すなわち、第１のタスクと第２のタスクとが異なるタスク集合に属すると判定された場合（ステップＳ１００：ＮＯ）、第１のタスクが属するタスク集合（タスク集合Ａ）の中で最低位の優先度と最高位の優先度との差分以上の値を所定値として定め、第１のタスクの優先度を当該所定値だけ上げるようにしてもよい。
こうすることで、第１のタスクの他にも別の共用資源にアクセスすることで排他的処理を行うタスク（仮に、第３のタスクとする）がタスク集合Ａから出てきた場合に、この第３のタスクについても第１のタスクと同様に所定値だけ上げられることになるため、本来第１のタスクと第３のタスクとの間に設定されている優先度付けを維持することができる。
【００４１】
例えば、第１のタスクの優先度をＰ５、第３のタスクの優先度をＰ７とし、タスク集合Ａ内の最高位の優先度と最低位の優先度をそれぞれＰ１、Ｐ１０とする。この場合、所定値はＰ１とＰ１０の差分である９以上の任意の値である。仮に９を所定値とすると、優先度制御部２０２の制御により、第１のタスクの優先度がＰ（−４）に上がり、第３のタスクの優先度がＰ（−２）に上がる。ここで、両タスクの優先度に着目すると、優先度変更前と変更後ともに、第１のタスクと第２のタスクの優先度の差が２であり、両タスク間の優先度付けが維持されている。
＜４．補足＞
上述の通り、実施形態に基づいて本発明に係るタスク実行制御装置について説明してきたが、本発明はこれらに限定されるものではない。以下、その変形例について説明する。
（１）上述の実施形態では、タスクが共用しており排他的処理の対象となる「ＣＳ共用資源」がＲＯＭ１０５及びＨＤＤ１０６に存在する例を挙げて説明したが、これに限定されず、この他、ＲＡＭ１０４に存在していても良い。
（２）上述の実施形態では、優先関係のないタスク集合として、別々のプロセッサ（プロセッサＡ及びプロセッサＢ）で互いに異なる処理を行う、いわゆる、マルチプロセッサ方式のハードウェア構成について説明したが、これに限定されない。
【００４２】
この他、本発明は例えば、時分割処理によって、シングルプロセッサで互いに異なる処理をタイムスロット毎に行う構成したハードウェアにも適用可能である。
（３）上述の実施形態では、タスク実行制御装置２００がＨＤＤ１０６に記憶されているＯＳの１機能として存在している例を挙げて説明したが、これに限定されず、ＲＡＭ１０４又はＲＯＭ１０５に記憶されていてもよい。
（４）本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ―ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されているコンピュータプログラムであるとしてもよい。
【００４３】
また、本発明は、コンピュータプログラムを、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
また、コンピュータプログラムを前記記録媒体に記録して移送することにより、又はコンピュータプログラムを前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【産業上の利用可能性】
【００４４】
本発明のタスク実行制御装置、タスク実行制御方法、及びプログラムは、ＯＳ等でのタスク管理に適用することが可能であり、特に、タスクの待機時間の短縮化に有用な技術である。
【図面の簡単な説明】
【００４５】
【図１】本発明に係るタスク実行制御装置２００が組み込まれた情報処理システム１００の構成を模式的に示したブロック図である。
【図２】タスク実行制御装置２００とタスクの関係を模式的に表した概略図である。
【図３】タスク実行制御装置２００が行うタスク管理の処理動作を示すフローチャートである。
【図４】タスク実行制御装置２００がタスク管理を行った場合のタスクの進行状況を示したタイムチャートである。
【図５】従来の、優先付けに基づいて実行されるタスクの進行状況を示したタイムチャートである。
【図６】従来の、優先度継承を使用して実行されるタスクの進行状況を示したタイムチャートである。
【図７】従来の、異なるタスク集合に属するタスクの進行状況を示したタイムチャートである。
【符号の説明】
【００４６】
１００        情報処理システム
１０１        ＣＰＵ
１０２        プロセッサＡ
１０３        プロセッサＢ
１０４        ＲＡＭ
１０５        ＲＯＭ
１０６        ＨＤＤ
１０７        バス
２００        タスク実行制御装置
２０１        タスク集合判定部
２０２        優先度制御部
【図１】
2007148582.tif 000003
【図２】
2007148582.tif 000004
【図３】
2007148582.tif 000005
【図４】
2007148582.tif 000006
【図５】
2007148582.tif 000007
【図６】
2007148582.tif 000008
【図７】
2007148582.tif 000009