(57)【要約】【課題】オペレーティングシステムを一つのタスクとしてコンピュータに実行させるタスク管理プログラムでオペレーティングシステムとの間で負荷処理の均衡化を図り、システム全体のスループットを向上すること。【解決手段】タイマ割込みハンドラ１３０がＰＣＢリスト３１０および割込み処理要求フラグ３２０を用いて汎用ＯＳタスク４００の処理の必要性を判定し、汎用ＯＳタスク４００の処理が必要な場合には、汎用ＯＳタスク４００の優先度を上げることとする。【選択図】        図１
2005071161.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティングシステムを一つのタスクとしてコンピュータに実行させるタスク管理プログラムであって、
前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定する処理有無判定手順と、
前記処理有無判定手順がアイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くする高優先度設定手順と
をコンピュータに実行させることを特徴とするタスク管理プログラム。
【請求項２】
前記高優先度設定手順により優先度が高くされたオペレーティングシステムを所定の時間実行後に、該オペレーティングシステムの優先度を元の優先度に戻す低優先度設定手順をさらにコンピュータに実行させることを特徴とする請求項１に記載のタスク管理プログラム。
【請求項３】
前記処理有無判定手順は、前記オペレーティングシステムの制御下で実行可能状態にあるプロセスがアイドルプロセス以外にあるか否かを判定するプロセス有無判定手順と、
前記オペレーティングシステムに対するスケジュール要求があるか否かを判定するスケジュール要求有無判定手順と、
前記オペレーティングシステムに対する割込み処理要求があるか否かを判定する割込み有無判定手順と
をコンピュータに実行させることを特徴とする請求項１または２に記載のタスク管理プログラム。
【請求項４】
前記高優先度設定手順は、前記処理有無判定手順がアイドルプロセス処理以外に実行する処理があると判定した場合に、所定の時間経過後前記オペレーティングシステムの優先度を高くすることを特徴とする請求項１または２に記載のタスク管理プログラム。
【請求項５】
オペレーティングシステムを一つのタスクとして実行するタスク制御装置であって、
前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定する処理有無判定手段と、
前記処理有無判定手段がアイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くする高優先度設定手段と
を備えたことを特徴とするタスク制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、オペレーティングシステムを一つのタスクとしてコンピュータに実行させるタスク管理プログラムおよびタスク制御装置に関し、特に、オペレーティングシステムとの間で負荷処理の均衡化を図り、もってシステム全体のスループットを向上することができるタスク管理プログラムおよびタスク制御装置に関するものである。
【背景技術】
【０００２】
近年、１台のコンピュータ上で二つのオペレーティングシステム（以下「ＯＳ」という。）を同時に動作させるハイブリッドＯＳが利用されるようになってきている。これは、ＯＳにはリアルタイム性に優れたものや開発環境に優れたものなどの特徴があり、複数のＯＳを利用することによって、それぞれのＯＳの優れた点を使用できる利点があるためである。
【０００３】
このようなハイブリッドＯＳの一つとして、汎用ＯＳをリアルタイムＯＳの一つのタスクとして実行するＯＳがある。このハイブリッドＯＳでは、汎用ＯＳおよびその制御下にあるプロセスはリアルタイム性が低いことから、汎用ＯＳを最低優先度で実行し、他のリアルタイムタスクを優先的に実行することがおこなわれている（たとえば、非特許文献１参照。）。
【０００４】
図１１は、ハイブリッドＯＳを説明するための説明図である。同図に示すように、このハイブリッドＯＳでは、汎用ＯＳはリアルタイムＯＳの制御プログラム下にあるリアルタイムタスクの一つとして実行される。すなわち、汎用ＯＳは、制御下にあるプロセスも含め汎用ＯＳタスクとして実行される。このような汎用ＯＳとしては、たとえばLinuxがある。
【０００５】
【非特許文献１】「リアルタイムＯＳそれともLinux?」、［平成１５年８月８日検索］、インターネット＜URL:http://www.qnx.co.jp/resource/QNX-Linux.pdf＞
【特許文献１】特開平１１−１４９３８５号
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来のハイブリッドＯＳでは、汎用ＯＳの制御下にあるプロセスは最低優先度のリアルタイムタスクとして実行されるため、汎用ＯＳの制御下でおこなわれる処理とリアルタイムＯＳの制御下でおこなわれる処理との間で処理の均衡化が図られていないという問題があった。すなわち、ＯＳ間負荷処理均衡化が図られていないという問題があった。
【０００７】
そこで、一つのＯＳでのタスク間処理均衡化手法をハイブリッドＯＳに用いて処理の均衡化を図ることが考えられる。すなわち、一定の時間内に実行されなかった低優先度の汎用ＯＳタスクの優先度を上げ、汎用ＯＳの制御下で行われる処理を優先することが考えられる。
【０００８】
しかし、このようなタスク間処理均衡化手法をハイブリッドＯＳに単に適用すると、汎用ＯＳはアイドルプロセスを実行しているため常に実行可能な状態にあり、汎用ＯＳタスクの優先度が頻繁に上げられることになる。その結果、過度に汎用ＯＳタスクが優先実行され、他のリアルタイムタスクの動作を妨げるという問題がある。
【０００９】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、オペレーティングシステムとの間で負荷処理の均衡化を図り、もってシステム全体のスループットを向上することができるタスク管理プログラムおよびタスク制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本発明は、オペレーティングシステムを一つのタスクとしてコンピュータに実行させるタスク管理プログラムであって、前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定し、アイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くすることを特徴とする。
【００１１】
この発明によれば、オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定し、アイドルプロセス処理以外に実行する処理があると判定した場合に、オペレーティングシステムの優先度を高くすることとしたので、オペレーティングシステムとの間で負荷処理の均衡化を図り、もってシステム全体のスループットを向上することができる。また、アイドルプロセス以外の処理がない場合は、優先度を変更せず、無駄な処理が避けられる。
【発明の効果】
【００１２】
本発明によれば、オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定し、アイドルプロセス処理以外に実行する処理があると判定した場合に、オペレーティングシステムの優先度を高くするよう構成したので、オペレーティングシステムとの間で負荷処理の均衡化を図り、もってシステム全体のスループットを向上することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この発明に係るタスク管理プログラムおよびタスク制御装置の好適な実施例を詳細に説明する。
【実施例】
【００１４】
まず、本実施例に係るハイブリッドＯＳの構成について説明する。図１は、本実施例に係るハイブリッドＯＳの構成を示す機能ブロック図である。同図に示すように、このハイブリッドＯＳは、割込みハンドラ１００と、リアルタイムＯＳ２００と、汎用ＯＳ３００とを有する。なお、同図において、実線の矢印は制御の流れを示し、破線の矢印はデータの参照を示す。
【００１５】
割込みハンドラ１００は、ハードウェア１０からの割込みを処理する処理部であり、リアルタイムＯＳ処理向け割込みハンドラ１１０と、汎用ＯＳ処理向け割込みハンドラ１２０と、タイマ割込みハンドラ１３０とを有する。なお、割込みハンドラ１００は、リアルタイムＯＳ２００の一部であるが、ここでは、リアルタイムＯＳ２００の他の部分と区別して割込みハンドラ１００として示している。
【００１６】
リアルタイムＯＳ処理向け割込みハンドラ１１０は、ハードウェア１０からの割込みを処理する処理部であり、割込みがリアルタイムＯＳ２００に対する割込みであるか汎用ＯＳ３００に対する割込みであるかを判定し、リアルタイムＯＳ２００に対する割込みである場合にはその割込みの処理をおこない、汎用ＯＳ３００に対する割込みである場合には、汎用ＯＳ処理向け割込みハンドラ１２０に制御を移す。
【００１７】
汎用ＯＳ処理向け割込みハンドラ１２０は、汎用ＯＳ３００に対する割込みを処理する処理部である。この汎用ＯＳ処理向け割込みハンドラ１２０は、緊急処理だけをおこなって汎用ＯＳ３００の割込み処理要求フラグ３２０をセットし、汎用ＯＳ３００に対して割込み処理を要求する。すなわち、汎用ＯＳ３００は、割込み処理要求フラグ３２０が設定されると、割込み処理をおこなう。
【００１８】
タイマ割込みハンドラ１３０は、タイマ割込みを処理する処理部である。リアルタイムＯＳ処理向け割込みハンドラ１１０は、割込みがタイマ割込みである場合に、このタイマ割込みハンドラ１３０に制御を移す。
【００１９】
このタイマ割込みハンドラ１３０は、通常のディスパッチ処理に加えて、汎用ＯＳ３００の処理が必要であるか否かを判定し、汎用ＯＳ３００の処理が必要であると判定した場合には、汎用ＯＳ３００の優先度を高い優先度に変更する。
【００２０】
このタイマ割込みハンドラ１３０が汎用ＯＳ３００の優先度を変更することによって、優先度の低い汎用ＯＳ３００の負荷処理時間を確保し、リアルタイムＯＳ２００と汎用ＯＳ３００との間で負荷処理の均衡化を図ることができる。なお、このタイマ割込みハンドラ１３０の処理の詳細については後述する。
【００２１】
リアルタイムＯＳ２００は、汎用ＯＳ３００をリアルタイムタスクの一つとして実行するＯＳであり、システムパラメータ記憶部２１０と、ＴＣＢリスト２２０と、スケジューラ２３０と、システムコール処理部２４０とを有する。
【００２２】
システムパラメータ記憶部２１０は、リアルタイムＯＳ２００の実行に必要なシステムパラメータを記憶した記憶部である。図２は、ＯＳ間負荷処理均衡化のためにリアルタイムＯＳ２００に追加したシステムパラメータを示す図である。
【００２３】
同図に示すように、ＯＳ間負荷処理均衡化のためにリアルタイムＯＳ２００に追加したシステムパラメータとしては、均衡化優先度４０１と、均衡化実行時間４０２と、持続タイムアウト値４０３とがある。
【００２４】
均衡化優先度４０１は、ＯＳ間負荷処理均衡化のために汎用ＯＳ３００に設定される優先度であり、通常の優先度より高い値である。汎用ＯＳ３００の優先度をこの均衡化優先度４０１に上げることによって、汎用ＯＳ３００は、リアルタイムタスクとしての優先度が高くなり、実行時間を確保することができる。
【００２５】
均衡化実行時間４０２は、汎用ＯＳ３００が均衡化優先度４０１で実行される時間である。持続タイムアウト値４０３は、汎用ＯＳ３００の優先度を均衡化優先度４０１に変更する必要が生じた際に均衡化優先度４０１に変更するまでの時間である。汎用ＯＳ３００は、基本的には低い優先度で実行されることから、優先度を均衡化優先度４０１に変更する必要が生じた場合でも、すぐに実行される必要はなく、この持続タイムアウト値４０３の経過後に始めて優先度が高く設定される。
【００２６】
ＴＣＢリスト２２０は、各リアルタイムタスクの制御情報を記憶したＴＣＢ(Task Control Block)のリストである。図３は、ＯＳ間負荷処理均衡化のためにＴＣＢに設けたパラメータを示す図である。同図に示すように、このＴＣＢは、タスク生成時の優先度を示す本優先度５０１と、タスクが実行されるときの実優先度５０２と、汎用ＯＳ３００が均衡化優先度４０１で実行される時間を測定する均衡化実行タイマ５０３と、持続タイムアウト値４０３を測定する持続タイマ５０４とを有する。
【００２７】
スケジューラ２３０は、リアルタイムタスクの実行を管理する処理部であり、ＯＳ間負荷処理均衡化によって実行されている汎用ＯＳ３００に対しては、資源待ちになった場合に実優先度５０２を元の本優先度５０１に戻す処理などをおこなう。
【００２８】
システムコール処理部２４０は、リアルタイムタスクからのシステムコールを処理する処理部であり、システムコールの一つとしてリアルタイムタスクによるＯＳ間負荷処理均衡化要求の処理をおこなう。
【００２９】
汎用ＯＳ３００は、複数のプロセスを並行処理するＯＳであるとともに、リアルタイムＯＳ２００の制御下で実行されるリアルタイムタスクである。この汎用ＯＳ３００は、配下にアイドルプロセスを有し、このアイドルプロセスは常に実行可能な状態にある。なお、この汎用ＯＳ３００は、配下のプロセスとともにリアルタイムＯＳ２００の制御下で汎用ＯＳタスク４００として実行される。
【００３０】
この汎用ＯＳ３００は、ＰＣＢリスト３１０と、割込み処理要求フラグ３２０と、汎用ＯＳスケジューラ３３０とを有する。ＰＣＢリスト３１０は、各プロセスの制御情報を記憶したＰＣＢ(Process Control Block)のリストである。
【００３１】
割込み処理要求フラグ３２０は、汎用ＯＳ３００による割込み処理が必要な場合に、汎用ＯＳ処理向け割込みハンドラ１２０によって設定されるフラグである。なお、この割込み処理要求フラグ３２０は、汎用ＯＳ３００のグローバル領域に設けられ、タイマ割込みハンドラ１３０が参照することができる。
【００３２】
汎用ＯＳスケジューラ３３０は、ＰＣＢリスト３１０や割込み処理要求フラグ３２０の情報を参照して汎用ＯＳ３００の制御下で実行されるプロセスの実行を管理する処理部である。
【００３３】
次に、本実施例に係るＯＳ間負荷処理均衡化の処理について説明する。まず、図１に示したタイマ割込みハンドラ１３０に追加したＯＳ間負荷処理均衡化の処理について説明する。図４は、図１に示したタイマ割込みハンドラ１３０に追加したＯＳ間負荷処理均衡化の処理手順を示すフローチャートである。
【００３４】
同図に示すように、タイマ割込みハンドラ１３０に追加したＯＳ間負荷処理均衡化の処理では、汎用ＯＳタスク４００が実行中であるか否かを判定し（ステップＳ４０１）、実行中でない場合には、汎用ＯＳタスク４００の処理が必要か否かを判定する（ステップＳ４０２）。
【００３５】
そして、汎用ＯＳタスク４００の処理が必要である場合には、持続タイマ５０４の値が正であるか否かを判定し（ステップＳ４０３）、持続タイマ５０４の値が正である場合には、持続タイマ５０４が動作している場合であるので、持続タイマ５０４の値を「１」減らし（ステップＳ４０４）、減らした結果、持続タイマ５０４の値が「０」になったか否かを判定する（ステップＳ４０５）。
【００３６】
そして、持続タイマ５０４の値が「０」になった場合には、汎用ＯＳタスク４００の優先度を上げて処理する必要があるので、実優先度５０２に均衡化優先度４０１を設定し、均衡化実行タイマ５０３に均衡化実行時間４０２を設定し（ステップＳ４０６）、ＯＳ間負荷処理均衡化のためのタイマ割込み処理を終了する。
【００３７】
一方、持続タイマ５０４の値が「０」にならない場合には、持続タイマ５０４の値が「０」になるまで汎用ＯＳタスク４００の優先度を上げる必要はないので、ＯＳ間負荷処理均衡化のためのタイマ割込み処理を終了する。
【００３８】
また、持続タイマ５０４の値が正でない場合にも、汎用ＯＳタスク４００の優先度を上げる処理は既におこなわれた場合であるので、ＯＳ間負荷処理均衡化の処理を終了する。また、汎用ＯＳタスク４００の処理が必要でない場合にも、ＯＳ間負荷処理均衡化のためのタイマ割込み処理を終了する。
【００３９】
また、汎用ＯＳタスク４００が実行中である場合には、汎用ＯＳタスク４００の実優先度５０２を調べ、均衡化優先度４０１で実行されているか否かを判定し（ステップＳ４０７）、均衡化優先度４０１で実行されている場合には、均衡化実行タイマ５０３の値を「１」減らし（ステップＳ４０８）、減らした結果、均衡化実行タイマ５０３の値が「０」になったか否かを判定する（ステップＳ４０９）。
【００４０】
そして、均衡化実行タイマ５０３の値が「０」になった場合には、均衡化優先度４０１で汎用ＯＳタスク４００を実行する時間が終了した場合であるので、実優先度５０２を元の本優先度５０１に戻し、持続タイマ５０４に持続タイムアウト値４０３を設定する（ステップＳ４１０）。
【００４１】
一方、均衡化実行タイマ５０３の値が「０」にならなかった場合には、均衡化優先度４０１のまま汎用ＯＳタスク４００を実行する必要があるため、実優先度５０２を変更することなくＯＳ間負荷処理均衡化のためのタイマ割込み処理を終了する。また、汎用ＯＳタスク４００が均衡化優先度４０１で実行されていない場合にも、ＯＳ間負荷処理均衡化のためのタイマ割込み処理を終了する。
【００４２】
このように、タイマ割込みハンドラ１３０が汎用ＯＳタスク４００の処理が必要か否かを判定し、汎用ＯＳタスク４００の処理が必要である場合には、持続タイマ５０４に設定した持続タイムアウト値４０３の時間が経過した場合に汎用ＯＳタスク４００の実優先度５０２を均衡化優先度４０１に上げることとしたので、汎用ＯＳタスク４００の実行時間を確保することができ、もってＯＳ間負荷処理の均衡化を図ることができる。
【００４３】
なお、ここでは、汎用ＯＳタスク４００が均衡化優先度４０１で実行された場合に均衡化実行タイマ５０３の値を「１」減らすこととしたが、汎用ＯＳタスク４００の実優先度５０２が均衡化優先度４０１に変更された場合に均衡化実行タイマ５０３の値を「１」減らすこともできる。
【００４４】
また、ここでは、均衡化実行タイマ５０３の値をタイマ割り込みのたびに「１」ずつ減らしていき、均衡化実行タイマ５０３の値が「０」になる場合、すなわち、汎用ＯＳタスク４００が均衡化実行時間を消費してしまう場合について説明したが、均衡化実行タイマ５０３の値は、汎用ＯＳタスク４００が資源待ちの状態になったとき、あるいは汎用ＯＳタスク４００の実行中により優先度の高いリアルタイムタスクに実行権が横取りされた場合にも「０」クリアされる。
【００４５】
次に、汎用ＯＳタスク４００の処理が必要であるか否かの判定処理について、図５および図６を用いて説明する。汎用ＯＳタスク４００の処理が必要である場合としては、アイドルプロセス以外に実行可能プロセスがある場合と、アイドルプロセスだけが実行可能であってもスケジュール要求または割込み処理要求がある場合とがある。
【００４６】
したがって、汎用ＯＳタスク４００の処理が必要であるか否かを判定するためには、汎用ＯＳ３００の制御下で実行されるプロセスに関する情報を取得する必要がある。そこで、汎用ＯＳ３００の制御下で実行されるプロセスに関する情報を取得する手順について説明する。
【００４７】
図５は、汎用ＯＳ３００制御下のプロセスの情報を取得する手順を説明するための説明図である。同図に示すように、各ＴＣＢにはカレントスタックポインタが格納されており、このカレントスタックポインタの値からスタックの先頭アドレスを取得することができる。なぜならば、プロセス毎に同サイズで数キロバイト単位のスタックが割り当てられる。例えば、スタックを８キロバイトの大きさとしたとき、スタックの先頭アドレスは８キロバイトの倍数を割り当ててあるため、カレントスタックポインタの値の、８キロバイトより小さいアドレスを示す部分を「０」とすることによって、スタックの先頭アドレスを取得することができる。
【００４８】
また、スタックの先頭には、汎用ＯＳ３００制御下のプロセスのＰＣＢの先頭アドレスが格納されている。そして、ＰＣＢの先頭アドレスから所定の値だけ先のアドレスには、プロセスＩＤ（ＰＩＤ）６０１が格納されており、このＰＩＤ６０１によってこのプロセスがアイドルプロセスであるか否かを判定することができる。
【００４９】
また、ＰＩＤ６０１の格納アドレスからさらに一定の値だけ先のアドレスには、スケジュール要求フラグ６０２が格納されている。このスケジュール要求フラグ６０２は、汎用ＯＳ３００に対してスケジュール要求がある場合にセットされる。
【００５０】
このように、ＰＣＢには、ＰＩＤ６０１およびスケジュール要求フラグ６０２が格納されており、タイマ割込みハンドラ１３０は、これらのＰＩＤ６０１およびスケジュール要求フラグ６０２と、図１に示した割込み処理要求フラグ３２０とを用いて汎用ＯＳタスク４００の実行が必要であるか否かを判定することができる。
【００５１】
そこで、汎用ＯＳタスク４００の処理が必要であるか否かを判定する処理手順について説明する。図６は、汎用ＯＳタスク処理必要性判定処理の処理手順を示すフローチャートである。同図に示すように、この汎用ＯＳタスク処理必要性判定処理は、まずＴＣＢからカレントスタックポインタを取得する（ステップＳ６０１）。
【００５２】
そして、カレントスタックポインタからスタックの先頭アドレスを求め、スタックの先頭に格納されたＰＣＢ先頭アドレスを取得する（ステップＳ６０２）。このＰＣＢ先頭アドレスは、最後に実行されたプロセスのＰＣＢ先頭アドレスである。
【００５３】
そして、ＰＣＢ先頭アドレスに一定の値を加えてＰＩＤ６０１の格納アドレスを算出し（ステップＳ６０３）、算出したアドレスからＰＩＤ６０１を読み出してこのプロセスがアイドルプロセスであるか否かを判定する（ステップＳ６０４）。
【００５４】
その結果、アイドルプロセスである場合には、スケジュール要求フラグ６０２の格納アドレスを算出し（ステップＳ６０５）、算出したアドレスからスケジュール要求フラグ６０２を読み出してスケジュール要求があるか否かを判定する（ステップＳ６０６）。
【００５５】
そして、スケジュール要求がない場合には、割込み処理要求フラグ３２０を読み出し（ステップＳ６０７）、割込み要求があるか否かを判定する（ステップＳ６０８）。その結果、割込み要求がない場合には、汎用ＯＳタスク処理不要と判定し（ステップＳ６０９）、割込み要求がある場合には、汎用ＯＳタスク処理必要と判定する（ステップＳ６１０）。また、スケジュール要求がある場合またはアイドルプロセスでない場合には、汎用ＯＳタスク処理必要と判定する（ステップＳ６１０）。
【００５６】
このように、タイマ割込みハンドラ１３０がＰＣＢに格納されたＰＩＤ６０１およびスケジュール要求フラグ６０２ならびに汎用ＯＳ３００のグローバル領域に格納された割込み処理要求フラグ３２０を用いて汎用ＯＳタスク４００の処理が必要か否かを判定することによって、汎用ＯＳタスク４００の処理が必要な場合にだけ汎用ＯＳタスク４００の優先度を上げることができ、不要な汎用ＯＳタスク４００の処理を防ぐことができる。
【００５７】
次に、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００が資源待ちになったときのスケジューラ２３０の処理について説明する。図７は、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００が資源待ちになったときのスケジューラ２３０の処理手順を示すフローチャートである。
【００５８】
同図に示すように、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００が資源待ちになると、スケジューラ２３０は、ＯＳ間負荷処理均衡化を中止する処理をおこなう。すなわち、スケジューラ２３０は、実優先度５０２を本優先度５０１に戻し（ステップＳ７０１）、均衡化実行タイマ５０３を「０」クリアする（ステップＳ７０２）。そして、汎用ＯＳタスク４００の状態を実行状態から処理必要状態に変更する（ステップＳ７０３）。
【００５９】
次に、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００の実行権が他のリアルタイムタスクによって横取りされるときのスケジューラ２３０の処理について説明する。図８は、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００の実行権が他のリアルタイムタスクによって横取りされるときのスケジューラ２３０の処理手順を示すフローチャートである。
【００６０】
同図に示すように、ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスク４００の実行権が他のリアルタイムタスクによって横取りされると、スケジューラ２３０は、残された均衡化実行時間４０２の均衡化処理を打切るか否かを判定する（ステップＳ８０１）。ここで、残された均衡化実行時間４０２の均衡化処理を打切るか否かは、スケジューリング方式として変更することが可能である。
【００６１】
そして、残された均衡化実行時間４０２の均衡化処理を打切る場合には、実優先度５０２を本優先度５０１に戻し（ステップＳ８０２）、持続タイマ５０４に持続タイムアウト値４０３を設定し、持続タイマ５０４を起動する（ステップＳ８０３）。そして、均衡化実行タイマ５０３を「０」クリアし（ステップＳ８０４）、汎用ＯＳタスク４００の状態を実行状態から処理必要状態に変更する（ステップＳ８０５）。
【００６２】
一方、残された均衡化実行時間４０２の均衡化処理を打切らない場合には、実優先度５０２、持続タイマ５０４および均衡化実行タイマ５０３を変更することなく、汎用ＯＳタスク４００の状態を実行状態から処理必要状態に変更する（ステップＳ８０５）。
【００６３】
次に、図１に示したシステムコール処理部２４０によるＯＳ間負荷処理均衡化要求に対する処理について説明する。図９は、図１に示したシステムコール処理部２４０によるＯＳ間負荷処理均衡化要求に対する処理手順を示すフローチャートである。
【００６４】
同図に示すように、システムコール処理部２４０は、ＯＳ間負荷処理均衡化要求があると、汎用ＯＳタスク４００を処理する必要があるか否かを判定する（ステップＳ９０１）。なお、この判定は、図６に示した処理手順によっておこなわれる。
【００６５】
そして、汎用ＯＳタスク４００を処理する必要がある場合には、実優先度５０２を均衡化優先度４０１に上げ（ステップＳ９０２）、均衡化実行タイマ５０３に均衡化実行時間４０２を設定する（ステップＳ９０３）。
【００６６】
そして、持続タイマ５０４を「０」クリアし（ステップＳ９０４）、ディスパッチをおこなう（ステップＳ９０５）。ここで、汎用ＯＳタスク４００の優先度が最も高くなった場合には、ディスパッチによって汎用ＯＳタスク４００が実行されることになる。一方、汎用ＯＳタスク４００を処理する必要がない場合には、そのまま処理を終了する。
【００６７】
次に、ＯＳ間負荷処理均衡化に関する汎用ＯＳタスク４００の状態遷移について説明する。図１０は、ＯＳ間負荷処理均衡化に関する汎用ＯＳタスク４００の状態遷移を示す図である。同図に示すように、汎用ＯＳタスク４００の状態としては、初期状態（Ｓ１）と、優先度が本優先度５０１である処理必要状態（Ｓ２）と、優先度が均衡化優先度４０１である処理必要状態（Ｓ３）と、実行状態（Ｓ４）と、アイドル状態（Ｓ５）とがある。
【００６８】
また、汎用ＯＳタスク４００の状態を遷移させるイベントまたは条件としては、タスク生成（Ｅ１）と、タイマ割込み（Ｅ２）と、持続タイマ５０４に設定された持続タイムアウト値の時間経過（Ｅ３）と、タスクスイッチング（Ｅ４）と、均衡化実行時間経過（Ｅ５）と、資源待ち（Ｅ６）と、資源待ち解除（Ｅ７）と、均衡化要求システムコール（Ｅ８）とがある。
【００６９】
汎用ＯＳタスク４００は、最初は初期状態（Ｓ１）にあり、タスクとして生成されると優先度が本優先度５０１である処理必要状態（Ｓ２）に遷移する。また、持続タイマ５０４に持続タイムアウト値４０３を設定し、持続タイマ５０４を起動する。そして、このＳ２の状態でタイマ割込み（Ｅ２）が発生するたびに、リアルタイムＯＳは、持続タイマ５０４の値を「１」ずつ減らしていく。なお、ここでのリアルタイムＯＳは、図１に示した割込みハンドラ１００とリアルタイムＯＳ２００とを含むものとする。
【００７０】
そして、持続タイマ５０４の値が「０」になると、リアルタイムＯＳは、実優先度５０２を均衡化優先度４０１に変更し、均衡化実行タイマ５０３に均衡化実行時間４０２を設定する。また、汎用ＯＳタスク４００は、優先度が均衡化優先度４０１である処理必要状態（Ｓ３）に遷移する。
【００７１】
また、汎用ＯＳタスク４００がＳ２の状態にある場合に、タスクスイッチング（Ｅ４）によって汎用ＯＳタスク４００に実行権が与えられると、汎用ＯＳタスク４００は実行状態（Ｓ４）に遷移する。この時、リアルタイムＯＳは、持続タイマ５０４を停止状態とする。
【００７２】
また、均衡化要求システムコール（Ｅ８）があると、リアルタイムＯＳは、実優先度５０２を均衡化優先度４０１に変更し、均衡化実行タイマ５０３に均衡化実行時間４０２を設定する。そして、汎用ＯＳタスク４００は、優先度が均衡化優先度４０１である処理必要状態（Ｓ３）に遷移する。
【００７３】
また、汎用ＯＳタスク４００が、優先度が均衡化優先度４０１である処理必要状態（Ｓ３）である場合にタスクスイッチング（Ｅ４）が発生し、汎用ＯＳタスク４００に実行権が与えられると、汎用ＯＳタスク４００は実行状態（Ｓ４）に遷移する。この時、リアルタイムＯＳは、均衡化実行タイマ５０３の作動を開始する。
【００７４】
また、汎用ＯＳタスク４００が実行状態（Ｓ４）にある場合には、均衡化実行中であれば、タイマ割込み（Ｅ２）が発生するたびに、リアルタイムＯＳは、均衡化実行タイマ５０３の値を「１」ずつ減らしていく。
【００７５】
そして、均衡化実行タイマ５０３の値が「０」になると、リアルタイムＯＳは、実優先度５０２を本優先度５０１に戻し、ディスパッチをおこなう。また、汎用ＯＳタスク４００は、優先度が本優先度５０１である処理必要状態（Ｓ２）に遷移する。
【００７６】
また、汎用ＯＳタスク４００が実行状態（Ｓ４）でタスクスイッチング（Ｅ４）が発生した場合には、リアルタイムＯＳは、実優先度５０２を本優先度５０１に戻し、持続タイマ５０４に持続タイムアウト値４０３を設定し、持続タイマ５０４を起動する。また、汎用ＯＳタスク４００は、優先度が本優先度５０１である処理必要状態（Ｓ２）に遷移する。
【００７７】
また、汎用ＯＳタスク４００が実行状態（Ｓ４）で資源待ち（Ｅ６）が発生した場合には、リアルタイムＯＳは、実優先度５０２を本優先度５０１に戻し、均衡化実行タイマ５０３を停止する。また、汎用ＯＳタスク４００は、アイドル状態（Ｓ５）に遷移する。
【００７８】
そして、アイドル状態（Ｓ５）で資源待ち解除（Ｅ７）が発生すると、リアルタイムＯＳは、持続タイマ５０４に持続タイムアウト値４０３を設定し、持続タイマ５０４を起動する。また、汎用ＯＳタスク４００は、優先度が本優先度５０１である処理必要状態（Ｓ２）に遷移する。
【００７９】
このように、汎用ＯＳタスク４００の各状態において発生するイベントに対応してリアルタイムＯＳが汎用ＯＳタスク４００の実優先度５０２を変更するとともに、持続タイマ５０４および均衡化実行タイマ５０３を操作することによって、ＯＳ間負荷処理の均衡化を図ることができる。
【００８０】
上述してきたように、本実施例では、タイマ割込みハンドラ１３０がＰＣＢリスト３１０および割込み処理要求フラグ３２０を用いて汎用ＯＳタスク４００の処理の必要性を判定し、汎用ＯＳタスク４００の処理が必要な場合にだけ、汎用ＯＳタスク４００の優先度を上げることとしたので、不要に汎用ＯＳタスク４００に実行権が与えられることを防ぎ、ＯＳ間負荷処理の均衡化を図ることができる。
【００８１】
（付記１）オペレーティングシステムを一つのタスクとしてコンピュータに実行させるタスク管理プログラムであって、
前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定する処理有無判定手順と、
前記処理有無判定手順がアイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くする高優先度設定手順と
をコンピュータに実行させることを特徴とするタスク管理プログラム。
【００８２】
（付記２）前記処理有無判定手順および前記高優先度設定手順を実行するシステムコールを備えたことを特徴とする付記１に記載のタスク管理プログラム。
【００８３】
（付記３）前記高優先度設定手順により優先度が高くされたオペレーティングシステムを所定の時間実行後に、該オペレーティングシステムの優先度を元の優先度に戻す低優先度設定手順をさらにコンピュータに実行させることを特徴とする付記１または２に記載のタスク管理プログラム。
【００８４】
（付記４）前記処理有無判定手順は、前記オペレーティングシステムの制御下で実行可能状態にあるプロセスがアイドルプロセス以外にあるか否かを判定するプロセス有無判定手順と、
前記オペレーティングシステムに対するスケジュール要求があるか否かを判定するスケジュール要求有無判定手順と、
前記オペレーティングシステムに対する割込み処理要求があるか否かを判定する割込み有無判定手順と
をコンピュータに実行させることを特徴とする付記１または２に記載のタスク管理プログラム。
【００８５】
（付記５）前記プロセス有無判定手順は、前記オペレーティングシステムの制御下で実行されるプロセスのプロセス制御ブロックに格納されたプロセス識別子を用いて、実行可能状態にあるプロセスがアイドルプロセス以外にあるか否かを判定することを特徴とする付記４に記載のタスク管理プログラム。
【００８６】
（付記６）前記スケジュール要求有無判定手順は、前記オペレーティングシステムの制御下で実行されるプロセスのプロセス制御ブロックに格納されたスケジュール要求フラグを用いて、スケジュール要求があるか否かを判定することを特徴とする付記４に記載のタスク管理プログラム。
【００８７】
（付記７）前記割込み有無判定手順は、前記オペレーティングシステムのグローバル領域に設けられた割込み処理要求フラグを用いて、割込み処理要求があるか否かを判定することを特徴とする付記４に記載のタスク管理プログラム。
【００８８】
（付記８）前記高優先度設定手順は、前記処理有無判定手順がアイドルプロセス処理以外に実行する処理があると判定した場合に、所定の時間経過後前記オペレーティングシステムの優先度を高くすることを特徴とする付記１または２に記載のタスク管理プログラム。
【００８９】
（付記９）オペレーティングシステムを一つのタスクとして実行するタスク制御装置であって、
前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定する処理有無判定手段と、
前記処理有無判定手段がアイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くする高優先度設定手段と
を備えたことを特徴とするタスク制御装置。
【００９０】
（付記１０）オペレーティングシステムを一つのタスクとして実行するタスク制御方法であって、
前記オペレーティングシステムの制御下で実行される処理の中にアイドルプロセス処理以外に実行する処理があるか否かを判定する処理有無判定工程と、
前記処理有無判定工程がアイドルプロセス処理以外に実行する処理があると判定した場合に、前記オペレーティングシステムの優先度を高くする高優先度設定工程と
を含んだことを特徴とするタスク制御方法。
【産業上の利用可能性】
【００９１】
以上のように、本発明にかかるタスク管理プログラムおよびタスク制御装置は、ハイブリッドＯＳを用いるコンピュータシステムに有用であり、特に、汎用ＯＳをリアルタイムタスクの一つとして動作させるハイブリッドＯＳを使用するコンピュータシステムや組み込み機器などに適している。
【図面の簡単な説明】
【００９２】
【図１】本実施例に係るハイブリッドＯＳの構成を示す機能ブロック図である。
【図２】ＯＳ間負荷処理均衡化のためにリアルタイムＯＳに追加したシステムパラメータを示す図である。
【図３】ＯＳ間負荷処理均衡化のためにＴＣＢに設けたパラメータを示す図である。
【図４】図１に示したタイマ割込みハンドラに追加したＯＳ間負荷処理均衡化の処理手順を示すフローチャートである。
【図５】汎用ＯＳ制御下のプロセスの情報を取得する手順を説明するための説明図である。
【図６】汎用ＯＳタスク処理必要性判定処理の処理手順を示すフローチャートである。
【図７】ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスクが資源待ちになったときのスケジューラの処理手順を示すフローチャートである。
【図８】ＯＳ間負荷処理均衡化により実行中の汎用ＯＳタスクの実行権が他のリアルタイムタスクによって横取りされるときのスケジューラの処理手順を示すフローチャートである。
【図９】図１に示したシステムコール処理部によるＯＳ間負荷処理均衡化要求に対する処理手順を示すフローチャートである。
【図１０】ＯＳ間負荷処理均衡化に関する汎用ＯＳタスクの状態遷移を示す図である。
【図１１】ハイブリッドＯＳを説明するための説明図である。
【符号の説明】
【００９３】
１０    ハードウェア
１００    割込みハンドラ
１１０    リアルタイムＯＳ処理向け割込みハンドラ
１２０    汎用ＯＳ処理向け割込みハンドラ
１３０    タイマ割込みハンドラ
２００    リアルタイムＯＳ
２１０    システムパラメータ記憶部
２２０    ＴＣＢリスト
２３０    スケジューラ
２４０    システムコール処理部
３００    汎用ＯＳ
３１０    ＰＣＢリスト
３２０    割込み処理要求フラグ
３３０    汎用ＯＳスケジューラ
４００    汎用ＯＳタスク
４０１    均衡化優先度
４０２    均衡化実行時間
４０３    持続タイムアウト値
５０１    本優先度
５０２    実優先度
５０３    均衡化実行タイマ
５０４    持続タイマ
６０１    ＰＩＤ
６０２    スケジュール要求フラグ
【図１】
2005071161.tif 000003
【図２】
2005071161.tif 000004
【図３】
2005071161.tif 000005
【図４】
2005071161.tif 000006
【図５】
2005071161.tif 000007
【図６】
2005071161.tif 000008
【図７】
2005071161.tif 000009
【図８】
2005071161.tif 000010
【図９】
2005071161.tif 000011
【図１０】
2005071161.tif 000012
【図１１】
2005071161.tif 000013