(57)【要約】【課題】  タスク間においてリソース競合が生じた時にタスクの優先度に基づいたリソース管理を行って優先度逆転現象を回避するタスクの優先度逆転現象の回避処理装置および回避処理方法を提供する。【解決手段】  優先度の高いタスクが必要とするリソースと優先度の低いタスクが使用しているリソースが競合していることを検知した時、優先度の低いタスクからリソースを借用して優先度の高いタスクで利用可能とする。これにより優先度の高いタスクが、優先度の低いタスクで使用されているリソースを獲得できなくて実行を阻害されることなく実行できるため、優先度逆転現象を回避することができる。【選択図】  図１
2006293559.tif 000002
【特許請求の範囲】
【請求項１】
実行状態の第１のタスクから共有資源の獲得要求を受け、かつ当該共有資源が前記第１のタスクの優先度より低い優先度である第２のタスクによって獲得されている場合に、当該共有資源を第１のタスクに借用させる第１の制御手段と、
前記第２のタスクが実行状態となった時に、前記第２のタスクに前記共有資源を取り戻す第２の制御手段と
を備えることを特徴とするタスクの優先度逆転現象の回避処理装置。
【請求項２】
前記共有資源の借用の可否を示す情報と、前記共有資源が借用されたことを示す情報と、前記共有資源を獲得したタスクの識別情報と、前記獲得したタスクの優先度情報とを少なくとも記憶する記憶手段を有し、
前記第１の制御手段は、前記共有資源の借用の可否を示す情報と前記共有資源を獲得したタスクの識別情報と前記獲得したタスクの優先度情報とを参照して、前記第２のタスクが獲得している前記共有資源を前記第１のタスクに獲得させ、
前記第２の制御手段は、前記共有資源が借用されたことを示す情報を参照して、前記第２のタスクに前記共有資源を取り戻す
ことを特徴とする請求項１に記載のタスクの優先度逆転現象の回避装置。
【請求項３】
前記第２の制御手段は、取り戻し後の設定された処理への分岐手段を含むことを特徴とする請求項１または請求項２に記載のタスクの優先度逆転現象の回避処理装置。
【請求項４】
デバッグ手段と、
前記実行状態のタスクのタスク識別情報と、前記共有資源の共有資源識別情報と、前記共有資源を獲得しているタスクのタスク識別情報と、前記共有資源を獲得しているタスクのタスク優先度と、獲得要求したタスクのプログラム実行アドレス情報とを少なくとも記憶する記憶手段とを更に有し、
前記第１の制御手段は、前記第１のタスクが獲得要求した前記共有資源を前記第２のタスクによって獲得していることを検知した時、前記記憶手段に前記第１のタスクのタスク識別情報と、前記第１のタスクが獲得要求した前記共有資源識別情報と、前記第２のタスクのタスク識別情報と、前記第２のタスクのタスク優先度と、前記第１のタスクのプログラム実行アドレス情報とを記憶し、優先順位逆転状態であることを前記デバッグ手段に通知する
ことを特徴とする請求項１または請求項２に記載のタスクの優先度逆転現象の回避装置。
【請求項５】
第１のタスクから共有資源の獲得要求が発せられた時に当該共有資源が第２のタスクによって既に獲得されていて、かつ、前記第２のタスクの優先度が前記第１のタスクの優先度より低い場合、前記第２のタスクから前記共有資源を借用し、前記第１のタスクに前記共有資源を獲得させ、前記第２のタスクのタスク管理情報に前記第１のタスクに貸与した情報を記録する
ことを特徴とするタスクの優先度逆転現象の回避処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行優先度に基づいて複数のタスクに与える計算機資源等を管理してタスクを実行するオペレーティングシステムに関し、特に、タスク間で発生する優先度逆転現象を回避する回避処理装置および回避処理方法に関する。
【背景技術】
【０００２】
複数のタスクを見かけ上同時に実行して、システムを動作させることが行われている。この時、複数のタスクにはそれぞれ生成時に優先度が付与されて、その優先度に基づいてオペレーティングシステム（以下、ＯＳと記す）が処理の実行を管理する。また、複数のタスクが共通の計算機資源（リソース）を使用する時には、ＯＳが提供する排他制御や同期制御の機能を用いることで、タスク毎のデータの整合性などを確保して、システムとして正常な動作を実現している。
【０００３】
しかしながら、従来の優先度に基づくタスクの実行管理ＯＳにおける、排他制御や同期制御に用いるセマフォの仕組みでは、優先度の高いタスクが、優先度の低いタスクの実行終了を待つような優先度の逆転現象の問題が生じる可能性がある。
【０００４】
このような優先度逆転現象が生じると、特に優先度の差が２以上の場合では、その中間の優先度であるタスクが、自分より優先度の低いタスクの実行を停止させて処理を行うことがあり、このような場合、自分より高い優先度のタスクによる処理の中断時間を予測することが不可能となる。このため、各タスクの処理がある一定時間内に終わらなければ、システムとして正常な動作が維持できなくなり、例えばリアルタイムシステムでは致命的な問題となる。
【０００５】
また、優先度逆転現象で優先度の高いタスクの実行が中断され、実行状態になった優先度の低いタスクがその後の処理手順で逆転現象の原因となった第１のリソースを返却する前に、優先度の高いタスクが獲得している第２のリソースを要求するような設計が行われると、優先度の低いタスクは第２のリソースを獲得できなくなって実行が中断され、２つの第１および第２のタスクとも、いわゆるデッドロック状態となって処理が停止する問題があった。
【０００６】
このデッドロック状態を回避する方法としては、例えばリソースの獲得と返却の順序を取り決めてプログラム設計することで回避が行われている。しかしながら、最近の複雑な処理システムでは、多数のプログラマーによって設計されているので、ルールの徹底が不十分となって、プログラムの設計ミスを起こしたりする。また、多数の共有資源を取り扱うためミスを生じやすく、その誤りがシステム停止などを引き起こす原因となって大きな問題となる。
【０００７】
このように、タスクの優先度逆転現象がシステム停止などを引き起こす原因となるため、タスクの優先度逆転現象を回避する技術開発が行われている。
【０００８】
例えば、共通のリソースを操作する複数のタスクは、操作が終了するまでそれぞれのタスクに用意された領域で処理を行い、終了時に有効タスクＩＤを確認して、タスクＩＤが一致すれば共通のリソースに操作内容を代入するように設計することで、操作の一貫性を維持しながら優先度の高いタスクを優先度の低いタスクの実行状況によらず実行させて、優先度逆転現象を回避する技術が開示されている（例えば、特許文献１参照。）。
【０００９】
しかしながら、この技術を用いたシステムでは、共通のリソースと同じ量の資源が複数必要となり、計算機資源量に制約がある場合、採用することが困難な問題があった。また、優先度逆転現象が生じて優先度の低いタスクの再実行のために処理に時間が掛かるような場合にも、その逆転現象の状況を検知することが困難な問題があった。
【特許文献１】特開２００３−１３１８９３号公報（第４−５頁、第２図）
【発明の開示】
【発明が解決しようとする課題】
【００１０】
システムの小型、高機能化に対応して小容量で複数のタスクが見かけ上同時に動作し、更にタスク間の優先度逆転現象が生じないマルチタスクＯＳが求められてきている。
【００１１】
しかしながら、特許文献１に記述された優先度逆転現象の回避技術を用いたシステムでは、共通のリソースと同じ量の資源が複数必要となり、計算機資源量に制約がある場合、採用することが困難な問題があった。また、優先度逆転状況が生じて優先度の低いタスクが再実行されるためにシステムの処理に時間が掛かるような場合にも、その逆転現象の状況を検知することが困難な問題があった。
【００１２】
本発明は上記問題を解決するためになされたもので、タスク間においてリソース競合が生じた時にタスクの優先度に基づいたリソース管理を行って優先度逆転現象を回避するタスクの優先度逆転現象の回避処理装置および回避処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記目的を達成するために、本発明のタスクの優先度逆転現象の回避処理装置は、実行状態の第１のタスクから共有資源の獲得要求を受け、かつ当該共有資源が前記第１のタスクの優先度より低い優先度である第２のタスクによって獲得されている場合に、当該共有資源を第１のタスクに借用させる第１の制御手段と、前記第２のタスクが実行状態となった時に、前記第２のタスクに前記共有資源を取り戻す第２の制御手段とを備えることを特徴とする。
【００１４】
また、本発明のタスクの優先度逆転現象の回避処理方法は、第１のタスクから共有資源の獲得要求が発せられた時に当該共有資源が第２のタスクによって既に獲得されていて、かつ、前記第２のタスクの優先度が前記第１のタスクの優先度より低い場合、前記第２のタスクから前記共有資源を借用し、前記第１のタスクに前記共有資源を獲得させ、前記第２のタスクのタスク管理情報に前記第１のタスクに貸与した情報を記録することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、ＯＳが優先度の高いタスクが必要とするリソースと優先度の低いタスクが使用しているリソースが競合していることを検知した時、優先度の低いタスクからリソースを借用して優先度の高いタスクでの利用を可能とすることができる。これにより、優先度の高いタスクは、優先度の低いタスクが使用しているリソース開放を優先度の低いタスクの実行の終了まで待つ必要がなく実行できるため、優先度逆転現象を回避することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施例を説明する。
【実施例１】
【００１７】
本発明に係るタスクの優先度逆転現象の回避処理装置および回避処理方法の実施例１を図１乃至図１２を参照して説明する。
【００１８】
図１は、実施例１の回避処理機能を有するＯＳのブロック図である。図２は、実施例１のタスクの状態遷移図である。図３は、実施例１の回避処理機能を有するＯＳ上で動作する２個のタスクの状態と共有資源（リソース）である２個のセマフォ資源の残り数とを示す図である。図４乃至図７は、ＯＳ管理データに含まれるタスク管理テーブルと、リソース管理テーブルと、貸出情報管理テーブルと、リソース獲得管理テーブルの構造を示す図である。図８および図９は、リソース獲得処理手順を示すフローチャートである。図１０は、リソース返却処理手順を示すフローチャートである。図１１および図１２は、リソース取戻し処理手順を示すフローチャートである。
【００１９】
図１に示すＯＳ１００は、マルチタスク処理やタスク同期・通信処理や時間管理処理や割込み管理処理やメモリ管理処理などを行うが、図１には本発明に係る機能ブロックと処理の流れを中心に図示している。複数のタスク１０１の少なくとも１つのタスクからサービス処理要求をＯＳ１００に対し行われ、そのサービス処理要求がリソースに係るサービス処理要求であると、ＯＳ１００のリソース操作機能ブロック１０２が要求内容に応じて、ＯＳ管理データ１０３などを操作する。そのサービス処理要求の実行結果によってリソース操作機能ブロック１０２は、タスク１０１に操作結果を通知してサービス処理要求の処理を終了する。なお、ここで言うタスク１０１は、タスク以外にルーチンも含まれる。
【００２０】
しかし、リソース操作機能ブロック１０２の処理機能では要求処理が完了しない場合、ＯＳ１００は、図１の矢印で示すようにＯＳ１００内の他の機能ブロックにサービス処理要求を行い、複数の機能ブッロクが協働してタスク１０１からのサービス処理要求を処理する構成になっている。
【００２１】
例えば、リソースレンタル機能ブロック１０４は、リソース操作機能ブロック１０２からのサービス処理要求に従って動作し、要求された条件に合ったリソースを獲得しているタスクをＯＳ管理データ１０３から探し出して、そのタスクからリソースを借用し、要求元のタスクにリソースを貸し出す処理を主に行うブロックである。
【００２２】
また、リソース取戻機能ブロック１０５は、タスクおよびルーチンの実行調停機能ブロック１０６からのサービス処理要求に従って動作し、指定されたタスクのリソース貸し出し状況をＯＳ管理データ１０３より認識し、要求元のタスクに貸し出していた同じリソースを取り戻す処理を主に行うブロックである。
【００２３】
また、ルーチンの実行調停機能ブロック１０６は、タスクスケジューラ機能によって実行状態および実行可能状態のタスクの中から一番優先度の高いタスクをＯＳ管理データ１０３より認識し、一つのタスクを実行状態にし、他のタスクを実行可能状態とする。
【００２４】
ＯＳ管理データ１０３は、タスク管理テーブル２００（図４参照）、リソース管理テーブル３００（図５参照）、リソース獲得管理テーブル（図７参照）、および貸出情報管理テーブル（図９参照）などから構成されている。
【００２５】
図１のＯＳ１００に含まれていないリソース取戻の後処理ルーチン１０７は、タスク設計者（ユーザ）が定義するルーチンであり、タスクおよびルーチンの実行調停機能ブロック１０６から呼び出されて実行され、ユーザが次に実行状態になるタスクあるいはシステムの状態を制御できる。
【００２６】
ＯＳ１００は、通常のマルチタスクＯＳと同様に、例えば１つのＣＰＵを有する計算機上で動作する場合、複数のタスク１０１にタスクスケジューリングのルールを適用して、１つのタスクを実行状態にしてそのタスク処理を行わせ、他のタスクを実行状態でないタスクとする。なお、図２に示す実行状態１５０以外の状態には、それぞれ複数のタスクが存在することできる。
【００２７】
そして、ＯＳ１００はタスク１０１を図２に示す状態間で遷移させる。例えば、実行状態のタスクが処理を終了した時は、実行状態１５０から休止状態１５２へ遷移させる。また実行状態のタスクが、処理中に継続実行できないとＯＳ１００が判断した時は、待ち状態１５１へ遷移させる。また待ち状態のタスクの待機条件が解除された時は、待ち状態１５１から実行可能状態１５３へ遷移させる。これらの遷移が発生した時に、タスクスケジューラ機能を有するタスクおよびルーチンの実行調整機能ブロック１０６が、実行可能状態１５３と実行状態１５０のタスクの中から、一番優先度の高いタスクを実行状態１５０に遷移させる。また、実行状態１５０にあるタスクの処理や割込み処理に起因して、待ち状態１５１および実行可能状態１５３にあるタスクが休止状態に遷移することもある。また同様に、実行状態１５０にあるタスクの処理や割込み処理に起因して、休止状態１５２のタスクが実行可能状態１５３に遷移することもある。
【００２８】
次に、タスク間で生じる優先度逆転現象と実施形態の回避処理の動作を、図１乃至図５を用いて説明する。この図３は、優先度の異なる２つのタスク（タスクＸ、タスクＹ）が２種類の共有資源（セマフォ資源１、セマフォ資源２）を使用しながらタスク処理を行う様子を示している。なお、この図３の時刻ｔ１乃至ｔ１２は、タスクの状態遷移やリソース獲得要求が行われる時系列を示すもので、処理に要した時間を示すものではない。また、セマフォ資源１はＳＥＭＡＰＨＯＲＥ  ＩＤ＝１を示し、セマフォ資源２はＳＥＭＡＰＨＯＲＥ  ＩＤ＝２を示している。
【００２９】
例えば、タスクＸ（図３のＴＡＳＫ＿Ｘ）のタスク識別情報のタスク識別子は「ＩＤ＝１」で、タスク優先度は「ＰＲＩ＝３」であり、タスクＹ（図３のＴＡＳＫ＿Ｙ）のタスク識別子は「ＩＤ＝２」で、タスク優先度は「ＰＲＩ＝５」であるとする。ここでは、タスク優先度ＰＲＩは数字が小さなものを優先度が高いとしているので、タスクＸはタスクＹより優先度が高いタスクである。
【００３０】
これらタスクＸ，Ｙと共有資源のリソースの管理情報は、ＯＳ管理データ１０３に記憶される。図４は、このＯＳ管理データ１０３の一部であるタスクＸ、Ｙ、・・・毎に設けられたタスク管理テーブル２００を示すもので、それぞれのタスク識別子２０１（ｔｓｋｉｄ）や、タスク優先度２０２（ｐｒｉ）の情報が記憶されている。また、タスク管理テーブル２００には、当該タスクが貸与したリソースについての貸出情報管理テーブル２２０（図９を参照）へのポインタが記憶されるｌｅｎｄ＿ｌｉｎｋや、レンタル許可状態／不許可状態のフラグが設定されるリソースレンタルフラグ２１１や、リソース取戻の後処理ルーチン１０７を呼び出すためのリソース取戻の後処理２１２が記憶されている。
【００３１】
また図５は、ＯＳ管理データ１０３の一部である共有資源（セマフォ資源）毎に設けられたリソース管理テーブル３００を示すもので、それぞれのリソース識別子３０１（ｏｂｊｉｄ）や、その最大資源数３０２、残り資源数３０３などの情報が記憶されている。
【００３２】
図３に戻り、例えば時刻ｔ１に、実行状態１５０のタスクＸがセマフォ資源１の資源獲得要求を行ったとする。ＯＳ１００は、セマフォ資源１のリソース管理テーブル３００を参照して、セマフォ資源１の残り資源数３０３が「１」とすると、タスクＸにセマフォ資源１を１個獲得させ、残り資源数３０３を「０」とする。セマフォ資源１を獲得したタスクＸは処理を進め、例えば何らかの要因により、タスクＸが、実行状態１５０から待ち状態１５１へ遷移する事象が発生した場合、ＯＳ１００は、時刻ｔ２でタスクＸを待ち状態１５１に遷移させ、実行可能状態１５３のタスクの中で優先度の高いタスク（本例では、タスクＹ）を実行状態１５０にする。
【００３３】
実行状態１５０のタスクＹは処理を進め、例えば時刻ｔ３にセマフォ資源２の資源獲得要求を行ったとする。ＯＳ１００は、セマフォ資源２の残り資源数が「１」であるとすると、タスクＹにセマフォ資源２を１個獲得させ、セマフォ資源２の残り資源数３０３を「０」とする。セマフォ資源２を獲得したタスクＹは処理を進め、例えば、タスクＸの待ち状態を解除する要因が発生したなどの理由で、ＯＳ１００は時刻ｔ４に、待ち状態のタスクＸを実行可能状態を経由して実行状態１５０にするとともに、タスクＹを実行可能状態１５３にする。
【００３４】
次に、時刻ｔ４で再び実行状態１５０となったタスクＸは処理を進め、例えば時刻ｔ５にセマフォ資源２の資源獲得要求を行ったとする。この時、セマフォ資源２の残り資源数３０３が「０」であるため、タスクＸはセマフォ資源２を獲得できず処理が進められなくなる。このセマフォ資源２のように、タスクＸより優先度の低いタスクＹが共有資源のセマフォ資源２を獲得しているために、優先度の高いタスクＸがその共有資源のセマフォ資源２を獲得できずに、処理が阻害される現象を優先度逆転現象という。
【００３５】
そこで、優先度逆転現象の回避処理機能を有するＯＳ１００のリソースレンタル機能ブロック１０４は、時刻ｔ５にセマフォ資源２の資源獲得要求を行ない、セマフォ資源２の残り資源数が「０」である場合で、タスクＸのタスク管理テーブル２００のリソースレンタルフラグ２１１がレンタル許可状態であれば、時刻ｔ６にリソースレンタル処理を実行する。
【００３６】
即ち、リソースレンタル機能ブロック１０４は、セマフォ資源２についてＯＳ管理データ１０３のリソース管理テーブル３００を調べ、タスクＸより優先度の低いタスクＹがセマフォ資源２を獲得していると判断すると、タスクＹからセマフォ資源２を借用してタスクＸにセマフォ資源２を獲得させて優先度逆転現象を回避し、更にタスクＹのタスク管理テーブル２００にセマフォ資源２を貸与したことを記憶させる。その結果、タスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０にセマフォ資源２を貸し出したことを記憶する図９の貸出情報管理テーブル２２０へのポインタが設定される。
【００３７】
そして、時刻ｔ７にリソースレンタル処理が終了すると、セマフォ資源２を獲得したタスクＸは処理を進める。その後、タスクＸの処理が終了すると、タスクＸは時刻ｔ８に獲得していたセマフォ資源１およびセマフォ資源２をＯＳ１００に返却するなどのタスク終了処理を行い、休止状態１５２への切り替え要求を行う。
【００３８】
ＯＳ１００は、時刻ｔ９にタスクＸを休止状態にするとともに、実行可能状態１５３のタスクＹを再び実行状態１５０とする。次に、実行状態１５０となったタスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０を調べ、セマフォ資源２を貸与していることの情報に基づいて、リソース取戻機能ブロック１０５がリソース取戻処理を行う。
【００３９】
即ち、リソース取戻機能ブロック１０５は、タスクＹが貸与したセマフォ資源２の獲得処理を行う。タスクＹはセマフォ資源２を再獲得してタスク処理を進める。なお、このセマフォ資源２の獲得処理が実行されると、タスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０をＮＵＬＬとし、セマフォ資源２の貸与を記憶していた貸出情報管理テーブル２２０が解除される。
【００４０】
しかし、共有資源（セマフォ資源）の種類により、実行状態になった時に他のタスクに貸与した共有資源が取り戻せればタスクの処理に影響がない場合と、取り戻せてもタスクの処理に影響がある場合がある。例えば、共有資源に蓄えられた情報が破壊されて情報の再構成が必要となる場合や、タスクの初期化から再実行することが必要となる場合や、システムを初期化することが必要となる場合などである。
【００４１】
このようにリソース取戻処理後の処理は、タスク設計者（ユーザ）が処理内容を決定する必要がある時に用いる。ＯＳ１００はリソース取戻処理の後、ユーザが処理内容を定義するリソース取戻の後処理ルーチン１０７を用意して設定すれば、時刻ｔ１１にタスクおよびルーチンの実行調停機能ブロック１０６を介して、リソース取戻の後処理ルーチン１０７を実行して、時刻ｔ１２に、タスクやシステムを所望の状態に制御する。
【００４２】
次に、上述した優先度逆転現象の回避処理機能の詳細な処理手順を、フローチャートを用いて以下に説明する。なお、ここでも前記タスクＸ，Ｙ、共有資源であるセマフォ資源１、２を用いた例で説明する。
【００４３】
上述したタスクＸ、又はＹからのリソースを獲得するリソース獲得処理は、主にＯＳ１００のリソース操作機能ブロック１０２がリソースレンタル機能ブロック１０４と連携して実行する。このリソース獲得処理手順を図６のフローチャートを用いて説明する。
【００４４】
先ず、タスクＸからのリソース獲得要求により、リソース操作機能ブロック１０２は、リソース獲得要求対象のセマフォ資源１の残り資源数を、セマフォ資源１のリソース管理テーブル３００の残り資源数３０３から調べる（ステップＳ１０１）。
【００４５】
その結果、残り資源数３０３の値が「１」以上であれば、タスクＸにセマフォ資源１を獲得させ、残り資源数３０３の値を「１」減らす（ステップＳ１０２）。
【００４６】
前記ステップＳ１０１で、リソース管理テーブル３００の残り資源数３０３の値が「０」の時、タスクＸのタスク管理テーブル２００のリソースレンタルフラグ２１１を調べる（ステップＳ１０６）。
【００４７】
そして、リソースレンタルフラグ２１１の値がレンタル不許可状態の時、リソース操作機能ブロック１０２は、獲得要求したタスクＸを待ち状態１５１に遷移させる（ステップＳ１０７）。そして、タスクおよびルーチンの実行調停機能ブロック１０６にタスクのスケジューリングを要求し、そこでタスクスケジューリングを行い（ステップＳ１０８）、リソース獲得処理を終了する。
【００４８】
またステップＳ１０１で、タスクＸからセマフォ資源２の資源獲得要求を行ない、セマフォ資源２の残り資源数が「０」である場合で、タスクＸのタスク管理テーブル２００のリソースレンタルフラグ２１１がレンタル許可状態であれば、リソースレンタル機能ブロック１０４はタスクＹからセマフォ資源２を借用するリソースレンタルルーチンを実行する（ステップＳ１０９）。
【００４９】
次に、リソースレンタル機能ブロック１０４はリソースレンタルルーチンのステータスを調べて、要求したセマフォ資源２が獲得できたか調べる（ステップＳ１１０）。セマフォ資源２が獲得できた時、又はステップＳ１０２の終了後、ステップＳ１０３に進む。一方、セマフォ資源２の獲得に失敗した時は、前記ステップＳ１０７の手順に進む。
【００５０】
そして、ステップＳ１０３でリソース操作機能ブロック１０２は、ＯＳ管理データ１０３のリソース管理テーブル３００のｇｅｔ＿ｌｉｎｋ３１０に基づき、図７に示す先頭のリソース獲得管理テーブル３２０ａ〜最後尾のリソース獲得管理テーブル３２０ｎに記憶された各タスクのタスクＩＤ３２１a乃至３２１ｎとタスクＸのタスクＩＤとを比較する。
【００５１】
このステップＳ１０３の比較処理で、タスクＩＤが一致するリソース獲得管理テーブル３２０ｉ（ｉは、一致するテーブル等の意味）があれば、当該リソース獲得管理テーブル３２０ｉのｇｅｔ＿ｄａｔａ３２３ｉの値を１増加させて（ステップＳ１０４）、リソース獲得処理を終了する。
【００５２】
一方、ステップＳ１０３の比較処理で、タスクＩＤが全て不一致の時は、ＯＳ管理データ１０３のリソース獲得管理テーブルに新しいリソース獲得管理テーブル３２０ｎ＋１（ｎ＋１は、追加されたテーブル等の意味）を追加する。このリソース獲得管理テーブル３２０ｎ＋１には、タスクＸのタスクＩＤ（ｔｓｋｉｄ）と、そのタスク優先度ｐｒｉと、ｇｅｔ＿ｄａｔａ＝１、ｎｅｘｔ＝ＮＵＬＬとが記憶され、リソース獲得処理を終了する（ステップＳ１０５）。
【００５３】
なお、図７に示すリソース獲得管理テーブル３２０ａ乃至ｎは、テーブルの数が変化するので、ポインタで次のテーブルとリンクされる構成となっている。
【００５４】
すなわち、リソース管理テーブル３００のｇｅｔ＿ｌｉｎｋ３１０に設定されるポインタで、最初のリソース獲得管理テーブル３２０ａにリンクされるとともに、そのリソース獲得管理テーブル３２０ａのｎｅｘｔに設定されるポインタで次のリソース獲得管理テーブル３２０ｂへリンクし、以降も同様のリンクが形成されている。なお、ｎｅｘｔポインタの値がＮＵＬＬの時は、リンク先のテーブルが存在しないことを示している。
【００５５】
次に、リソースレンタル機能ブロック１０４に含まれるリソースレンタルルーチン（図６のステップＳ１０９）の処理手順を図８のフローチャートを用いて説明する。
【００５６】
まず、ＯＳ管理データ１０３から上述した獲得要求対象となるセマフォ資源２のリソース管理テーブル３００の情報を得る（ステップＳ１０９ａ）。
【００５７】
次に、セマフォ資源２のリソース管理テーブル３００のｇｅｔ＿ｌｉｎｋ３１０に設定されたポインタで示される先頭のリソース獲得管理テーブル３２０ａ〜最後尾のリソース獲得管理テーブル３２０ｎに記憶された各タスクの優先度３２２ａ乃至３２２ｎと獲得要求元のタスクＸの優先度ｐｒｉとを比較する（ステップＳ１０９ｂ）。
【００５８】
ステップＳ１０９ｂでタスクＸの優先度より低い優先度のタスクが無い時は、レンタルを失敗したことを示す情報をルーチンのリターンコードに定義して（ステップＳ１０９ｃ）、リソースレンタルルーチンの処理を終了する。
【００５９】
一方、ステップＳ１０９ｂで、タスクＸの優先度より低い優先度のタスク（例えば、タスクＹ）が有る時、リソースレンタルルーチンは、該当するタスクＹのリソース獲得管理テーブル３２０ｋ（ｋは、タスクＹに対応するものの意味）からタスクＩＤ（ｔｓｋｉｄ）３２１ｋを得て、そのタスクＩＤ３２１ｋが示すタスク管理テーブル２００ｋのｌｅｎｄ＿ｌｉｎｋ２１０ｋを参照する（ステップＳ１０９ｄ）。
【００６０】
そして、このタスクＹが既にリソース（セマフォ資源２）を貸与しているかどうかを調べるため、ｌｅｎｄ＿ｌｉｎｋ２１０ｋがＮＵＬＬであるか否かを調べる（ステップＳ１０９ｅ）。
【００６１】
ｌｅｎｄ＿ｌｉｎｋ２１０ｋがＮＵＬＬでなければ、図９に示すｌｅｎｄ＿ｌｉｎｋ２１０ｋに設定されたポインタが示す先頭の貸出情報管理テーブル２２０ａ〜最後尾の貸出情報管理テーブル２２０ｍに記憶されたリソース（セマフォ資源）の識別子２２１ａ乃至２２１ｍとステップＳ１０９ａで参照したセマフォ資源２のリソース管理テーブル３００から得られたセマフォ資源２の識別子ｏｂｊｉｄとを比較する（ステップ１０９ｆ）。
【００６２】
ステップＳ１０９ｆの比較処理で、セマフォ資源２の識別子ｏｂｊｉｄが一致する貸出情報管理テーブル２２０ｇ（ｇは、一致するテーブル等の意味）があれば、一致するセマフォ資源２の貸出情報管理テーブル２２０ｇの貸出詳細２２２ｇに含まれる「貸出数」を「１」増加させる（ステップＳ１０９ｇ）。
【００６３】
また、セマフォ資源２が借用されたタスクＹのリソース獲得管理テーブル３２０ｋのｇｅｔ＿ｄａｔａ３２３ｋの値を「１」減らす。減らした結果が「０」となる時は、そのリソース管理テーブル３００から、該当するタスクＹのリソース獲得管理テーブル３２０ｋを削除し、ＯＳ管理データ１０３の該当リソース領域を開放する。次いで、レンタルが成功したことを示す情報をルーチンのリターンコードに定義して（ステップＳ１０９ｈ）、リソースレンタルルーチンの処理を終了する。
【００６４】
ステップＳ１０９ｅにおいてタスクＹのｌｅｎｄ＿ｌｉｎｋ２１０がＮＵＬＬか、またはステップＳ１０９ｆの比較処理でセマフォ資源２の識別子が貸出情報管理テーブル２２０ａ乃至２２０ｍに記憶されたセマフォ資源の識別子２２１ａ乃至２２１ｍと一致しない時は、セマフォ資源２が借用されたタスクＹの貸出情報管理テーブル２２０に新しい貸出情報管理テーブル２２０ｍ＋１が追加される。この貸出情報管理テーブル２２０ｍ＋１には、セマフォ資源２の識別子と、「貸出詳細」と、ｎｅｘｔにＮＵＬＬが記憶され（ステップＳ１０９ｉ）、上述したステップＳ１０９ｈに進む。
【００６５】
なお、図９に示す貸出情報管理テーブル２２０ａ乃至２２０ｍも、テーブルの数が変化するので、ポインタで次のテーブルとリンクされる構成となっている。
【００６６】
すなわち、貸出情報管理テーブル２２０ａはタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０に設定されるポインタでリンクされるとともに、その貸出情報管理テーブル２２０ａのｎｅｘｔに設定されるポインタで次の貸出情報管理テーブル２２０ｂへリンクし、以下も同じリンクを形成する。なお、ポインタの値がＮＵＬＬの時はリンク先の貸出情報管理テーブルが存在しないことを示している。
【００６７】
次に、タスクＸのリソース返却処理手順を図１０のフローチャートを用いて説明する。
【００６８】
このリソースの返却処理は、タスクの終了処理手順に含まれていて、タスク設計者（ユーザ）がＯＳ１００で提供される各種サービス要求を適宜用いて実現することが出来る。
【００６９】
図１０のリソース返却処理では、まず実行状態のタスクＸのタスク管理テーブル２００の獲得セマフォ資源情報（図示せず）を参照して獲得しているセマフォ資源があるかを調べる（ステップＳ２０１）。
【００７０】
このステップＳ２０１で、獲得しているセマフォ資源が存在しない時は、リソース返却処理を終了する。
【００７１】
一方、ステップＳ２０１で獲得しているセマフォ資源が存在する時は、該当するセマフォ資源のリソース管理テーブル３００ｈ（ｈは、該当するテーブル等の意味）を参照し、実行状態のタスクＸのタスクＩＤと一致するリソース獲得管理テーブル３２０ｈに含まれるｇｅｔ＿ｄａｔａ３２３ｈの値を得て、一致するリソース獲得管理テーブル３２０ｈを削除する（ステップＳ２０２）。
【００７２】
次に、ｇｅｔ＿ｄａｔａ３２３ｈの値を、該当するセマフォ資源のリソース管理テーブル３００ｈの残り資源数３０３の値に加え（ステップＳ２０３）、ＯＳ管理データ１０３の該当リソース領域を開放する。
【００７３】
次に、実行状態のタスクＸのタスク管理テーブル２００の獲得セマフォ資源情報（図示せず）から該当のセマフォ資源の情報を削除する（ステップＳ２０４）。最後に、他に獲得したセマフォ資源が無いかを調べるために、ステップＳ２０１に戻る。
【００７４】
次に、リソース取戻機能ブロック１０５のリソース取戻しルーチンの処理手順とリソース取戻の後処理ルーチン１０７の処理手順を、図１１のフローチャートを用いて説明する。
【００７５】
図１１において、タスクおよびルーチンの実行調停機能ブロック１０６は、実行可能状態１５３のタスクの中から優先度の高いタスクＹを選択して、実行状態にする（ステップＳ３０１）。そして、タスクおよびルーチンの実行調停機能ブロック１０６はリソース取戻機能ブロック１０５にサービス要求を行い、それを受けてリソース取戻機能ブロック１０５は実行状態１５０となったタスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０の値を調べる（ステップＳ３０２）。このｌｅｎｄ＿ｌｉｎｋ２１０の値がＮＵＬＬの時は、貸与したリソースが無いので、リソース取戻し処理を終了する。
【００７６】
ステップＳ３０２で調べたｌｅｎｄ＿ｌｉｎｋ２１０に、貸出情報管理テーブル２２０の先頭アドレスを示すポインタが設定されている時は、実行状態になったタスクＹがリソースを貸与したことを示しているので、リソース取戻機能ブロック１０５のリソース取戻しルーチンを呼び出して実行する（ステップＳ３０３）。
【００７７】
次に、タスクおよびルーチンの実行調停機能ブロック１０６は、タスクＹのタスク管理テーブル２００のリソース取戻の後処理２１２の値を調べる（ステップＳ３０４）。
【００７８】
そして、リソース取戻の後処理２１２がＮＵＬＬの時は、リソースを取戻した後にユーザが設定した特別な処理を行わないため、リソース取戻し処理を終了する。
【００７９】
一方、ステップＳ３０４で調べたリソース取戻の後処理２１２がＮＵＬＬでない時は、リソース取戻の後処理２１２に設定されたユーザが用意したリソース取戻の後処理ルーチン１０７を呼び出す（ステップＳ３０５）。
【００８０】
このリソース取戻の後処理ルーチン１０７では、ＯＳ１００で提供されるサービス要求を用いてＯＳ管理データ１０３内のデータにアクセスし処理を行うことができる。例えば、実行状態のタスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０からリンクされている貸出情報管理テーブル２２０の「貸出詳細」の情報を得て、貸与したリソースの情報やリソースの取戻しの成功不成功の結果情報などに従って処理を行う。また、この後のステップで、タスクを遷移させる状態を指示する情報（図示せず）などを設定する。なお、このリソース取戻の後処理ルーチン１０７の処理中にタスクスケジューリングなどが発生してはならないため、ＯＳ１００はルーチンの呼び出し時にタスクスケジューリングなどの発生を制限するように制御する。
【００８１】
ステップＳ３０５の次に、実行状態のタスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０からリンクされる最初の貸出情報管理テーブル２２０ａ〜最後の貸出情報管理テーブル２２０ｍを削除して、ｌｅｎｄ＿ｌｉｎｋ２１０をＮＵＬＬとする（ステップＳ３０６）。
【００８２】
次に、リソース取戻の後処理ルーチン１０７で設定される情報に従って、タスクＹの状態を遷移させたり、新たな処理へ分岐したりする（ステップＳ３０７）。
【００８３】
ここで、リソース取戻の後処理ルーチン１０７で設定される情報が示す４つの例を以下に示す。第１は、リソース取戻の後処理ルーチン１０７で実行状態のタスクＹの処理継続が可能となった場合であり、この場合はリソース取戻し処理を終了する。
【００８４】
第２は、実行状態のタスクＹを実行状態以外の状態に遷移させる場合であり、遷移させる状態への遷移要求を行い、タスクＹをその状態に遷移させる。そして、タスクおよびルーチンの実行調停機能ブロック１０６がタスクスケジューリングを行って、新たなタスクを実行状態にして（ステップＳ３０８）、リソース取戻し処理を終了する。
【００８５】
第３は、システムリセットの場合であり、システム全体のリセットを行う処理を行う（ステップＳ３０９）。
【００８６】
第４は、実行状態のタスクＹをリセットする場合で、実行状態のタスクＹに関連する管理領域の情報を初期化と、タスクＹが獲得しているリソースを全て開放して、タスクＹの処理を最初から行うように設定し(ステップＳ３１０）、次にタスクおよびルーチンの実行調停機能ブロック１０６がタスクスケジューリングを行い、新たなタスクを実行状態にして（ステップＳ３０８）、リソース取戻し処理を終了する。
【００８７】
次に、前記ステップＳ３０３のリソース取戻しルーチンの処理手順を図１２のフローチャートを用いて説明する。
【００８８】
最初に、リソース取戻し処理対象となるリソース資源の貸出情報管理テーブル２２０の先頭アドレスを示す処理対象ポインタに、実行状態のタスクＹのタスク管理テーブル２００のｌｅｎｄ＿ｌｉｎｋ２１０の値をセットする（ステップＳ３０３ａ）。
【００８９】
次に、リソース取戻し処理対象となるリソース（セマフォ資源）の貸出情報管理テーブルの先頭アドレスを示す処理対象ポインタの値がＮＵＬＬであるか否かを調べる（ステップＳ３０３ｂ）。そして、処理対象ポインタの値がＮＵＬＬの場合は、タスクＹが貸与した全てのセマフォ資源の取戻し処理が終了したことを示しているので、リソース取戻しルーチンＳ３０３の処理を終了する。
【００９０】
一方、処理対象ポインタの値がＮＵＬＬでなく、リソース取戻し処理対象となるリソース資源の貸出情報管理テーブル２２０ｇ（ｇは、取戻し対象のリソース資源の意味）の先頭アドレスがセットされている時は、ポインタが示す貸出情報管理テーブル２２０ｇを参照して、そのリソース識別子２２１ｇから対象セマフォ資源の識別子、貸出詳細２２２ｇから貸出数を得るとともに、ｎｅｘｔ２２３ｇに示される次の貸出情報管理テーブルの先頭アドレス情報を処理対象ポインタにセットする（ステップＳ３０３ｃ）。
【００９１】
次に、図８のフローチャートに手順示すリソース獲得処理を行う（ステップＳ３０３ｄ）。この時、図８に示された獲得要求対象のセマフォ資源を貸出情報管理テーブル２２０から得た対象セマフォ資源に、また獲得要求したタスクを実行状態となったタスクに読み替える。リソースであるセマフォ資源が獲得できた時は、貸出数を１減らす（ステップＳ３０３ｅ）。貸出数が「０」であるか否か調べ（ステップＳ３０３ｆ）、「０」でなければ、ステップＳ３０３ｄに進む。
【００９２】
また、貸出数が「０」の時は、対象セマフォ資源の取戻しが終了したので、対象となるセマフォ資源の貸出情報管理テーブル２２０ｇの貸出詳細２２２ｇに取戻し成功の情報を保存（記録）し（ステップＳ３０３ｇ）、ステップＳ３０３ｂに進む。
【００９３】
ステップ３０３ｄのリソース獲得処理において、リソースレンタルフラグ２１１がレンタル不許可状態である時や、リソースのレンタルに失敗した時は、対象のセマフォ資源の貸出情報管理テーブル２２０ｇの貸出詳細２２２ｇに取戻し失敗の情報を保存（記録）し（ステップＳ３０３ｈ）、ステップ３０３ｂに進む。
【００９４】
上述のようにして、計算機資源の制約がある環境においてもＯＳ１００に設けた機能ブロックにより、複数のタスクが共有資源へのアクセスで競合して、タスク間の優先度が逆転して実行されることを回避することができる。
【００９５】
なお、タスクの優先度２０２の数値が大きなものほど優先度が高いタスクとしてもよく、その場合はタスクＸとタスクＹの優先度の数値を入れ替えることで上述した動作説明を適用できる。また、ＯＳ管理データ１０３の共有資源には、セマフォ資源以外にメモリやメールボックスなどがあり、それらを用いてもよい。
【実施例２】
【００９６】
本発明の実施例２を図１３および図１４を参照して説明する。図１３は、実施例２における優先度逆転現象記録テーブルの構造を示す図である。図１４は、そのリソース獲得処理手順を示すフローチャートである。この実施例２のＯＳの機能ブロックと処理手順において、図１乃至図１２で説明した実施例１のＯＳ１００の機能と同一部分は同一番号を付し、詳細な説明を省略する。
【００９７】
実施例２のＯＳが実施例１と異なる点は、タスクのリソース獲得処理において、優先度逆転現象となる時に、優先度逆転現象の情報を記録して獲得処理を中断し、ユーザに報告するプログラムを起動することである。
【００９８】
図１３に示す優先度逆転現象記録テーブル４００は、獲得要求を行った実行状態のタスクＩＤ４０１（Ｒｅｎｔａｌ  ｔｓｋｉｄ）と、獲得対象のセマフォ資源のリソース獲得管理テーブル３２０の先頭アドレスを示すポインタ４０２（ｃｏｎｎｅｃｔｉｏｎ＿ｌｉｎｋ）と獲得対象セマフォ資源情報４０３と獲得要求を行ったタスクのプログラム実行アドレス４０４（ＰＣ）から構成される。
【００９９】
タスクのリソース獲得処理手順において、実施例１と異なる点を図１４のフローチャートを参照して説明する。
【０１００】
獲得要求対象のセマフォ資源の残り資源数が「０」であるか否か調べ（ステップＳ４０１）、残り資源数が「０」の場合、ユーザがＯＳ管理データ１０３にデバッガプログラムなどで設定する優先度逆転報告モードフラグ（図示せず）を調べる（ステップＳ４０２）。
【０１０１】
そして、前記優先度逆転報告モードフラグが優先度逆転報告モードでない時は、ステップＳ１０６に進む。
【０１０２】
一方、前記優先度逆転報告モードフラグが優先度逆転報告モードの時は、優先度逆転現象となっているか否かを調べるため、リソース獲得要求をしたタスクのタスク優先度と、獲得要求対象のセマフォ資源のリソース獲得管理テーブル３２０に登録されているタスク優先度３２１とを比較し、登録されたタスク優先度３２１が等しいか高い場合は、順次リンクされたリソース獲得管理テーブル３２０のタスク優先度３２１との比較を行う（ステップＳ４０３）。
【０１０３】
ステップＳ４０３で、獲得要求したタスクの優先度３２１に比べて登録されたタスク優先度３２１が全て等しいか高い場合は、ステップＳ１０７に進む。
【０１０４】
ステップＳ４０３で、獲得要求したタスクの優先度３２１に比べて登録されたタスクにタスク優先度３２１に低いものがある時は、優先度逆転現象となっているので、優先度逆転現象記録テーブル４００に、獲得要求したタスクのタスク識別子、獲得要求対象のセマフォ資源のリソース獲得管理テーブルの先頭アドレス、セマフォ資源情報、リソース獲得要求時のプログラムの実行アドレスなどを記録する（ステップＳ４０４）。
【０１０５】
次に、リソース獲得処理を終了し、優先度逆転現象をユーザに報告するプログラムを起動する。
【０１０６】
上述のように、ＯＳ１００は、ユーザが優先度逆転報告モードに設定すると複数のタスクが共有資源へのアクセスで競合し、それらタスク間の優先度が逆転している場合は、優先度逆転現象を発生したタスクやリソース情報をユーザに報告するため、優先度逆転現象を回避する方法の設計が容易になる。
【０１０７】
更に、本発明は、上述した各実施例に限定されるものではなく、本発明の主旨を逸脱しない範囲で種々に変形して実施することができる。
【図面の簡単な説明】
【０１０８】
【図１】本発明のタスクの優先度逆転現象の回避処理装置および回避処理方法の実行を処理するＯＳの構成を示すブロック図。
【図２】実施例１に係るＯＳによるタスクの状態遷移図。
【図３】本発明の実施例１に係るＯＳで制御される２個のタスクの状態遷移とリソースのセマフォ資源の残り数の変化を示す図。
【図４】実施例１に係るタスク管理テーブルの構造を示す図。
【図５】実施例１に係るリソース管理テーブルの構造を示す図。
【図６】実施例１に係るリソース獲得処理手順を示すフローチャート。
【図７】実施例１に係るリソース獲得管理テーブルの構造を示す図。
【図８】実施例１に係るリソース獲得処理手順を示すフローチャート。
【図９】実施例１に係る貸出情報管理テーブルの構造を示す図。
【図１０】実施例１に係るタスクのリソース返却処理手順を示すフローチャート。
【図１１】実施例１に係るリソース取戻し処理手順を示すフローチャート。
【図１２】実施例１に係るリソース取戻しルーチンの処理手順を示すフローチャート。
【図１３】実施例２に係る優先度逆転現象記録テーブルの構造を示す図。
【図１４】実施例２に係るリソース獲得処理手順を示すフローチャート。
【符号の説明】
【０１０９】
１００  ＯＳ
１０１  タスク
１０２、１０４、１０５、１０６  ＯＳの機能ブロック
１０３  ＯＳ管理データ
１０７  リソース取戻の後処理ルーチン
１５０〜１５３  タスクの状態
２００  タスク管理テーブル
３００  リソース管理テーブル
４００  優先度逆転現象記録テーブル
【図１】
2006293559.tif 000003
【図２】
2006293559.tif 000004
【図３】
2006293559.tif 000005
【図４】
2006293559.tif 000006
【図５】
2006293559.tif 000007
【図６】
2006293559.tif 000008
【図７】
2006293559.tif 000009
【図８】
2006293559.tif 000010
【図９】
2006293559.tif 000011
【図１０】
2006293559.tif 000012
【図１１】
2006293559.tif 000013
【図１２】
2006293559.tif 000014
【図１３】
2006293559.tif 000015
【図１４】
2006293559.tif 000016