JP2006293559A - タスクの優先度逆転現象の回避処理装置および回避処理方法 - Google Patents

タスクの優先度逆転現象の回避処理装置および回避処理方法 Download PDF

Info

Publication number
JP2006293559A
JP2006293559A JP2005111338A JP2005111338A JP2006293559A JP 2006293559 A JP2006293559 A JP 2006293559A JP 2005111338 A JP2005111338 A JP 2005111338A JP 2005111338 A JP2005111338 A JP 2005111338A JP 2006293559 A JP2006293559 A JP 2006293559A
Authority
JP
Japan
Prior art keywords
task
resource
priority
shared resource
acquired
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2005111338A
Other languages
English (en)
Inventor
Akira Sawaoka
明 澤岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Kioxia Systems Co Ltd
Original Assignee
Toshiba Corp
Toshiba Memory Systems Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, Toshiba Memory Systems Co Ltd filed Critical Toshiba Corp
Priority to JP2005111338A priority Critical patent/JP2006293559A/ja
Publication of JP2006293559A publication Critical patent/JP2006293559A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 タスク間においてリソース競合が生じた時にタスクの優先度に基づいたリソース管理を行って優先度逆転現象を回避するタスクの優先度逆転現象の回避処理装置および回避処理方法を提供する。
【解決手段】 優先度の高いタスクが必要とするリソースと優先度の低いタスクが使用しているリソースが競合していることを検知した時、優先度の低いタスクからリソースを借用して優先度の高いタスクで利用可能とする。これにより優先度の高いタスクが、優先度の低いタスクで使用されているリソースを獲得できなくて実行を阻害されることなく実行できるため、優先度逆転現象を回避することができる。
【選択図】 図1

Description

本発明は、実行優先度に基づいて複数のタスクに与える計算機資源等を管理してタスクを実行するオペレーティングシステムに関し、特に、タスク間で発生する優先度逆転現象を回避する回避処理装置および回避処理方法に関する。
複数のタスクを見かけ上同時に実行して、システムを動作させることが行われている。この時、複数のタスクにはそれぞれ生成時に優先度が付与されて、その優先度に基づいてオペレーティングシステム(以下、OSと記す)が処理の実行を管理する。また、複数のタスクが共通の計算機資源(リソース)を使用する時には、OSが提供する排他制御や同期制御の機能を用いることで、タスク毎のデータの整合性などを確保して、システムとして正常な動作を実現している。
しかしながら、従来の優先度に基づくタスクの実行管理OSにおける、排他制御や同期制御に用いるセマフォの仕組みでは、優先度の高いタスクが、優先度の低いタスクの実行終了を待つような優先度の逆転現象の問題が生じる可能性がある。
このような優先度逆転現象が生じると、特に優先度の差が2以上の場合では、その中間の優先度であるタスクが、自分より優先度の低いタスクの実行を停止させて処理を行うことがあり、このような場合、自分より高い優先度のタスクによる処理の中断時間を予測することが不可能となる。このため、各タスクの処理がある一定時間内に終わらなければ、システムとして正常な動作が維持できなくなり、例えばリアルタイムシステムでは致命的な問題となる。
また、優先度逆転現象で優先度の高いタスクの実行が中断され、実行状態になった優先度の低いタスクがその後の処理手順で逆転現象の原因となった第1のリソースを返却する前に、優先度の高いタスクが獲得している第2のリソースを要求するような設計が行われると、優先度の低いタスクは第2のリソースを獲得できなくなって実行が中断され、2つの第1および第2のタスクとも、いわゆるデッドロック状態となって処理が停止する問題があった。
このデッドロック状態を回避する方法としては、例えばリソースの獲得と返却の順序を取り決めてプログラム設計することで回避が行われている。しかしながら、最近の複雑な処理システムでは、多数のプログラマーによって設計されているので、ルールの徹底が不十分となって、プログラムの設計ミスを起こしたりする。また、多数の共有資源を取り扱うためミスを生じやすく、その誤りがシステム停止などを引き起こす原因となって大きな問題となる。
このように、タスクの優先度逆転現象がシステム停止などを引き起こす原因となるため、タスクの優先度逆転現象を回避する技術開発が行われている。
例えば、共通のリソースを操作する複数のタスクは、操作が終了するまでそれぞれのタスクに用意された領域で処理を行い、終了時に有効タスクIDを確認して、タスクIDが一致すれば共通のリソースに操作内容を代入するように設計することで、操作の一貫性を維持しながら優先度の高いタスクを優先度の低いタスクの実行状況によらず実行させて、優先度逆転現象を回避する技術が開示されている(例えば、特許文献1参照。)。
しかしながら、この技術を用いたシステムでは、共通のリソースと同じ量の資源が複数必要となり、計算機資源量に制約がある場合、採用することが困難な問題があった。また、優先度逆転現象が生じて優先度の低いタスクの再実行のために処理に時間が掛かるような場合にも、その逆転現象の状況を検知することが困難な問題があった。
特開2003−131893号公報(第4−5頁、第2図)
システムの小型、高機能化に対応して小容量で複数のタスクが見かけ上同時に動作し、更にタスク間の優先度逆転現象が生じないマルチタスクOSが求められてきている。
しかしながら、特許文献1に記述された優先度逆転現象の回避技術を用いたシステムでは、共通のリソースと同じ量の資源が複数必要となり、計算機資源量に制約がある場合、採用することが困難な問題があった。また、優先度逆転状況が生じて優先度の低いタスクが再実行されるためにシステムの処理に時間が掛かるような場合にも、その逆転現象の状況を検知することが困難な問題があった。
本発明は上記問題を解決するためになされたもので、タスク間においてリソース競合が生じた時にタスクの優先度に基づいたリソース管理を行って優先度逆転現象を回避するタスクの優先度逆転現象の回避処理装置および回避処理方法を提供することを目的とする。
上記目的を達成するために、本発明のタスクの優先度逆転現象の回避処理装置は、実行状態の第1のタスクから共有資源の獲得要求を受け、かつ当該共有資源が前記第1のタスクの優先度より低い優先度である第2のタスクによって獲得されている場合に、当該共有資源を第1のタスクに借用させる第1の制御手段と、前記第2のタスクが実行状態となった時に、前記第2のタスクに前記共有資源を取り戻す第2の制御手段とを備えることを特徴とする。
また、本発明のタスクの優先度逆転現象の回避処理方法は、第1のタスクから共有資源の獲得要求が発せられた時に当該共有資源が第2のタスクによって既に獲得されていて、かつ、前記第2のタスクの優先度が前記第1のタスクの優先度より低い場合、前記第2のタスクから前記共有資源を借用し、前記第1のタスクに前記共有資源を獲得させ、前記第2のタスクのタスク管理情報に前記第1のタスクに貸与した情報を記録することを特徴とする。
本発明によれば、OSが優先度の高いタスクが必要とするリソースと優先度の低いタスクが使用しているリソースが競合していることを検知した時、優先度の低いタスクからリソースを借用して優先度の高いタスクでの利用を可能とすることができる。これにより、優先度の高いタスクは、優先度の低いタスクが使用しているリソース開放を優先度の低いタスクの実行の終了まで待つ必要がなく実行できるため、優先度逆転現象を回避することができる。
以下、本発明の実施例を説明する。
本発明に係るタスクの優先度逆転現象の回避処理装置および回避処理方法の実施例1を図1乃至図12を参照して説明する。
図1は、実施例1の回避処理機能を有するOSのブロック図である。図2は、実施例1のタスクの状態遷移図である。図3は、実施例1の回避処理機能を有するOS上で動作する2個のタスクの状態と共有資源(リソース)である2個のセマフォ資源の残り数とを示す図である。図4乃至図7は、OS管理データに含まれるタスク管理テーブルと、リソース管理テーブルと、貸出情報管理テーブルと、リソース獲得管理テーブルの構造を示す図である。図8および図9は、リソース獲得処理手順を示すフローチャートである。図10は、リソース返却処理手順を示すフローチャートである。図11および図12は、リソース取戻し処理手順を示すフローチャートである。
図1に示すOS100は、マルチタスク処理やタスク同期・通信処理や時間管理処理や割込み管理処理やメモリ管理処理などを行うが、図1には本発明に係る機能ブロックと処理の流れを中心に図示している。複数のタスク101の少なくとも1つのタスクからサービス処理要求をOS100に対し行われ、そのサービス処理要求がリソースに係るサービス処理要求であると、OS100のリソース操作機能ブロック102が要求内容に応じて、OS管理データ103などを操作する。そのサービス処理要求の実行結果によってリソース操作機能ブロック102は、タスク101に操作結果を通知してサービス処理要求の処理を終了する。なお、ここで言うタスク101は、タスク以外にルーチンも含まれる。
しかし、リソース操作機能ブロック102の処理機能では要求処理が完了しない場合、OS100は、図1の矢印で示すようにOS100内の他の機能ブロックにサービス処理要求を行い、複数の機能ブッロクが協働してタスク101からのサービス処理要求を処理する構成になっている。
例えば、リソースレンタル機能ブロック104は、リソース操作機能ブロック102からのサービス処理要求に従って動作し、要求された条件に合ったリソースを獲得しているタスクをOS管理データ103から探し出して、そのタスクからリソースを借用し、要求元のタスクにリソースを貸し出す処理を主に行うブロックである。
また、リソース取戻機能ブロック105は、タスクおよびルーチンの実行調停機能ブロック106からのサービス処理要求に従って動作し、指定されたタスクのリソース貸し出し状況をOS管理データ103より認識し、要求元のタスクに貸し出していた同じリソースを取り戻す処理を主に行うブロックである。
また、ルーチンの実行調停機能ブロック106は、タスクスケジューラ機能によって実行状態および実行可能状態のタスクの中から一番優先度の高いタスクをOS管理データ103より認識し、一つのタスクを実行状態にし、他のタスクを実行可能状態とする。
OS管理データ103は、タスク管理テーブル200(図4参照)、リソース管理テーブル300(図5参照)、リソース獲得管理テーブル(図7参照)、および貸出情報管理テーブル(図9参照)などから構成されている。
図1のOS100に含まれていないリソース取戻の後処理ルーチン107は、タスク設計者(ユーザ)が定義するルーチンであり、タスクおよびルーチンの実行調停機能ブロック106から呼び出されて実行され、ユーザが次に実行状態になるタスクあるいはシステムの状態を制御できる。
OS100は、通常のマルチタスクOSと同様に、例えば1つのCPUを有する計算機上で動作する場合、複数のタスク101にタスクスケジューリングのルールを適用して、1つのタスクを実行状態にしてそのタスク処理を行わせ、他のタスクを実行状態でないタスクとする。なお、図2に示す実行状態150以外の状態には、それぞれ複数のタスクが存在することできる。
そして、OS100はタスク101を図2に示す状態間で遷移させる。例えば、実行状態のタスクが処理を終了した時は、実行状態150から休止状態152へ遷移させる。また実行状態のタスクが、処理中に継続実行できないとOS100が判断した時は、待ち状態151へ遷移させる。また待ち状態のタスクの待機条件が解除された時は、待ち状態151から実行可能状態153へ遷移させる。これらの遷移が発生した時に、タスクスケジューラ機能を有するタスクおよびルーチンの実行調整機能ブロック106が、実行可能状態153と実行状態150のタスクの中から、一番優先度の高いタスクを実行状態150に遷移させる。また、実行状態150にあるタスクの処理や割込み処理に起因して、待ち状態151および実行可能状態153にあるタスクが休止状態に遷移することもある。また同様に、実行状態150にあるタスクの処理や割込み処理に起因して、休止状態152のタスクが実行可能状態153に遷移することもある。
次に、タスク間で生じる優先度逆転現象と実施形態の回避処理の動作を、図1乃至図5を用いて説明する。この図3は、優先度の異なる2つのタスク(タスクX、タスクY)が2種類の共有資源(セマフォ資源1、セマフォ資源2)を使用しながらタスク処理を行う様子を示している。なお、この図3の時刻t1乃至t12は、タスクの状態遷移やリソース獲得要求が行われる時系列を示すもので、処理に要した時間を示すものではない。また、セマフォ資源1はSEMAPHORE ID=1を示し、セマフォ資源2はSEMAPHORE ID=2を示している。
例えば、タスクX(図3のTASK_X)のタスク識別情報のタスク識別子は「ID=1」で、タスク優先度は「PRI=3」であり、タスクY(図3のTASK_Y)のタスク識別子は「ID=2」で、タスク優先度は「PRI=5」であるとする。ここでは、タスク優先度PRIは数字が小さなものを優先度が高いとしているので、タスクXはタスクYより優先度が高いタスクである。
これらタスクX,Yと共有資源のリソースの管理情報は、OS管理データ103に記憶される。図4は、このOS管理データ103の一部であるタスクX、Y、・・・毎に設けられたタスク管理テーブル200を示すもので、それぞれのタスク識別子201(tskid)や、タスク優先度202(pri)の情報が記憶されている。また、タスク管理テーブル200には、当該タスクが貸与したリソースについての貸出情報管理テーブル220(図9を参照)へのポインタが記憶されるlend_linkや、レンタル許可状態/不許可状態のフラグが設定されるリソースレンタルフラグ211や、リソース取戻の後処理ルーチン107を呼び出すためのリソース取戻の後処理212が記憶されている。
また図5は、OS管理データ103の一部である共有資源(セマフォ資源)毎に設けられたリソース管理テーブル300を示すもので、それぞれのリソース識別子301(objid)や、その最大資源数302、残り資源数303などの情報が記憶されている。
図3に戻り、例えば時刻t1に、実行状態150のタスクXがセマフォ資源1の資源獲得要求を行ったとする。OS100は、セマフォ資源1のリソース管理テーブル300を参照して、セマフォ資源1の残り資源数303が「1」とすると、タスクXにセマフォ資源1を1個獲得させ、残り資源数303を「0」とする。セマフォ資源1を獲得したタスクXは処理を進め、例えば何らかの要因により、タスクXが、実行状態150から待ち状態151へ遷移する事象が発生した場合、OS100は、時刻t2でタスクXを待ち状態151に遷移させ、実行可能状態153のタスクの中で優先度の高いタスク(本例では、タスクY)を実行状態150にする。
実行状態150のタスクYは処理を進め、例えば時刻t3にセマフォ資源2の資源獲得要求を行ったとする。OS100は、セマフォ資源2の残り資源数が「1」であるとすると、タスクYにセマフォ資源2を1個獲得させ、セマフォ資源2の残り資源数303を「0」とする。セマフォ資源2を獲得したタスクYは処理を進め、例えば、タスクXの待ち状態を解除する要因が発生したなどの理由で、OS100は時刻t4に、待ち状態のタスクXを実行可能状態を経由して実行状態150にするとともに、タスクYを実行可能状態153にする。
次に、時刻t4で再び実行状態150となったタスクXは処理を進め、例えば時刻t5にセマフォ資源2の資源獲得要求を行ったとする。この時、セマフォ資源2の残り資源数303が「0」であるため、タスクXはセマフォ資源2を獲得できず処理が進められなくなる。このセマフォ資源2のように、タスクXより優先度の低いタスクYが共有資源のセマフォ資源2を獲得しているために、優先度の高いタスクXがその共有資源のセマフォ資源2を獲得できずに、処理が阻害される現象を優先度逆転現象という。
そこで、優先度逆転現象の回避処理機能を有するOS100のリソースレンタル機能ブロック104は、時刻t5にセマフォ資源2の資源獲得要求を行ない、セマフォ資源2の残り資源数が「0」である場合で、タスクXのタスク管理テーブル200のリソースレンタルフラグ211がレンタル許可状態であれば、時刻t6にリソースレンタル処理を実行する。
即ち、リソースレンタル機能ブロック104は、セマフォ資源2についてOS管理データ103のリソース管理テーブル300を調べ、タスクXより優先度の低いタスクYがセマフォ資源2を獲得していると判断すると、タスクYからセマフォ資源2を借用してタスクXにセマフォ資源2を獲得させて優先度逆転現象を回避し、更にタスクYのタスク管理テーブル200にセマフォ資源2を貸与したことを記憶させる。その結果、タスクYのタスク管理テーブル200のlend_link210にセマフォ資源2を貸し出したことを記憶する図9の貸出情報管理テーブル220へのポインタが設定される。
そして、時刻t7にリソースレンタル処理が終了すると、セマフォ資源2を獲得したタスクXは処理を進める。その後、タスクXの処理が終了すると、タスクXは時刻t8に獲得していたセマフォ資源1およびセマフォ資源2をOS100に返却するなどのタスク終了処理を行い、休止状態152への切り替え要求を行う。
OS100は、時刻t9にタスクXを休止状態にするとともに、実行可能状態153のタスクYを再び実行状態150とする。次に、実行状態150となったタスクYのタスク管理テーブル200のlend_link210を調べ、セマフォ資源2を貸与していることの情報に基づいて、リソース取戻機能ブロック105がリソース取戻処理を行う。
即ち、リソース取戻機能ブロック105は、タスクYが貸与したセマフォ資源2の獲得処理を行う。タスクYはセマフォ資源2を再獲得してタスク処理を進める。なお、このセマフォ資源2の獲得処理が実行されると、タスクYのタスク管理テーブル200のlend_link210をNULLとし、セマフォ資源2の貸与を記憶していた貸出情報管理テーブル220が解除される。
しかし、共有資源(セマフォ資源)の種類により、実行状態になった時に他のタスクに貸与した共有資源が取り戻せればタスクの処理に影響がない場合と、取り戻せてもタスクの処理に影響がある場合がある。例えば、共有資源に蓄えられた情報が破壊されて情報の再構成が必要となる場合や、タスクの初期化から再実行することが必要となる場合や、システムを初期化することが必要となる場合などである。
このようにリソース取戻処理後の処理は、タスク設計者(ユーザ)が処理内容を決定する必要がある時に用いる。OS100はリソース取戻処理の後、ユーザが処理内容を定義するリソース取戻の後処理ルーチン107を用意して設定すれば、時刻t11にタスクおよびルーチンの実行調停機能ブロック106を介して、リソース取戻の後処理ルーチン107を実行して、時刻t12に、タスクやシステムを所望の状態に制御する。
次に、上述した優先度逆転現象の回避処理機能の詳細な処理手順を、フローチャートを用いて以下に説明する。なお、ここでも前記タスクX,Y、共有資源であるセマフォ資源1、2を用いた例で説明する。
上述したタスクX、又はYからのリソースを獲得するリソース獲得処理は、主にOS100のリソース操作機能ブロック102がリソースレンタル機能ブロック104と連携して実行する。このリソース獲得処理手順を図6のフローチャートを用いて説明する。
先ず、タスクXからのリソース獲得要求により、リソース操作機能ブロック102は、リソース獲得要求対象のセマフォ資源1の残り資源数を、セマフォ資源1のリソース管理テーブル300の残り資源数303から調べる(ステップS101)。
その結果、残り資源数303の値が「1」以上であれば、タスクXにセマフォ資源1を獲得させ、残り資源数303の値を「1」減らす(ステップS102)。
前記ステップS101で、リソース管理テーブル300の残り資源数303の値が「0」の時、タスクXのタスク管理テーブル200のリソースレンタルフラグ211を調べる(ステップS106)。
そして、リソースレンタルフラグ211の値がレンタル不許可状態の時、リソース操作機能ブロック102は、獲得要求したタスクXを待ち状態151に遷移させる(ステップS107)。そして、タスクおよびルーチンの実行調停機能ブロック106にタスクのスケジューリングを要求し、そこでタスクスケジューリングを行い(ステップS108)、リソース獲得処理を終了する。
またステップS101で、タスクXからセマフォ資源2の資源獲得要求を行ない、セマフォ資源2の残り資源数が「0」である場合で、タスクXのタスク管理テーブル200のリソースレンタルフラグ211がレンタル許可状態であれば、リソースレンタル機能ブロック104はタスクYからセマフォ資源2を借用するリソースレンタルルーチンを実行する(ステップS109)。
次に、リソースレンタル機能ブロック104はリソースレンタルルーチンのステータスを調べて、要求したセマフォ資源2が獲得できたか調べる(ステップS110)。セマフォ資源2が獲得できた時、又はステップS102の終了後、ステップS103に進む。一方、セマフォ資源2の獲得に失敗した時は、前記ステップS107の手順に進む。
そして、ステップS103でリソース操作機能ブロック102は、OS管理データ103のリソース管理テーブル300のget_link310に基づき、図7に示す先頭のリソース獲得管理テーブル320a〜最後尾のリソース獲得管理テーブル320nに記憶された各タスクのタスクID321a乃至321nとタスクXのタスクIDとを比較する。
このステップS103の比較処理で、タスクIDが一致するリソース獲得管理テーブル320i(iは、一致するテーブル等の意味)があれば、当該リソース獲得管理テーブル320iのget_data323iの値を1増加させて(ステップS104)、リソース獲得処理を終了する。
一方、ステップS103の比較処理で、タスクIDが全て不一致の時は、OS管理データ103のリソース獲得管理テーブルに新しいリソース獲得管理テーブル320n+1(n+1は、追加されたテーブル等の意味)を追加する。このリソース獲得管理テーブル320n+1には、タスクXのタスクID(tskid)と、そのタスク優先度priと、get_data=1、next=NULLとが記憶され、リソース獲得処理を終了する(ステップS105)。
なお、図7に示すリソース獲得管理テーブル320a乃至nは、テーブルの数が変化するので、ポインタで次のテーブルとリンクされる構成となっている。
すなわち、リソース管理テーブル300のget_link310に設定されるポインタで、最初のリソース獲得管理テーブル320aにリンクされるとともに、そのリソース獲得管理テーブル320aのnextに設定されるポインタで次のリソース獲得管理テーブル320bへリンクし、以降も同様のリンクが形成されている。なお、nextポインタの値がNULLの時は、リンク先のテーブルが存在しないことを示している。
次に、リソースレンタル機能ブロック104に含まれるリソースレンタルルーチン(図6のステップS109)の処理手順を図8のフローチャートを用いて説明する。
まず、OS管理データ103から上述した獲得要求対象となるセマフォ資源2のリソース管理テーブル300の情報を得る(ステップS109a)。
次に、セマフォ資源2のリソース管理テーブル300のget_link310に設定されたポインタで示される先頭のリソース獲得管理テーブル320a〜最後尾のリソース獲得管理テーブル320nに記憶された各タスクの優先度322a乃至322nと獲得要求元のタスクXの優先度priとを比較する(ステップS109b)。
ステップS109bでタスクXの優先度より低い優先度のタスクが無い時は、レンタルを失敗したことを示す情報をルーチンのリターンコードに定義して(ステップS109c)、リソースレンタルルーチンの処理を終了する。
一方、ステップS109bで、タスクXの優先度より低い優先度のタスク(例えば、タスクY)が有る時、リソースレンタルルーチンは、該当するタスクYのリソース獲得管理テーブル320k(kは、タスクYに対応するものの意味)からタスクID(tskid)321kを得て、そのタスクID321kが示すタスク管理テーブル200kのlend_link210kを参照する(ステップS109d)。
そして、このタスクYが既にリソース(セマフォ資源2)を貸与しているかどうかを調べるため、lend_link210kがNULLであるか否かを調べる(ステップS109e)。
lend_link210kがNULLでなければ、図9に示すlend_link210kに設定されたポインタが示す先頭の貸出情報管理テーブル220a〜最後尾の貸出情報管理テーブル220mに記憶されたリソース(セマフォ資源)の識別子221a乃至221mとステップS109aで参照したセマフォ資源2のリソース管理テーブル300から得られたセマフォ資源2の識別子objidとを比較する(ステップ109f)。
ステップS109fの比較処理で、セマフォ資源2の識別子objidが一致する貸出情報管理テーブル220g(gは、一致するテーブル等の意味)があれば、一致するセマフォ資源2の貸出情報管理テーブル220gの貸出詳細222gに含まれる「貸出数」を「1」増加させる(ステップS109g)。
また、セマフォ資源2が借用されたタスクYのリソース獲得管理テーブル320kのget_data323kの値を「1」減らす。減らした結果が「0」となる時は、そのリソース管理テーブル300から、該当するタスクYのリソース獲得管理テーブル320kを削除し、OS管理データ103の該当リソース領域を開放する。次いで、レンタルが成功したことを示す情報をルーチンのリターンコードに定義して(ステップS109h)、リソースレンタルルーチンの処理を終了する。
ステップS109eにおいてタスクYのlend_link210がNULLか、またはステップS109fの比較処理でセマフォ資源2の識別子が貸出情報管理テーブル220a乃至220mに記憶されたセマフォ資源の識別子221a乃至221mと一致しない時は、セマフォ資源2が借用されたタスクYの貸出情報管理テーブル220に新しい貸出情報管理テーブル220m+1が追加される。この貸出情報管理テーブル220m+1には、セマフォ資源2の識別子と、「貸出詳細」と、nextにNULLが記憶され(ステップS109i)、上述したステップS109hに進む。
なお、図9に示す貸出情報管理テーブル220a乃至220mも、テーブルの数が変化するので、ポインタで次のテーブルとリンクされる構成となっている。
すなわち、貸出情報管理テーブル220aはタスク管理テーブル200のlend_link210に設定されるポインタでリンクされるとともに、その貸出情報管理テーブル220aのnextに設定されるポインタで次の貸出情報管理テーブル220bへリンクし、以下も同じリンクを形成する。なお、ポインタの値がNULLの時はリンク先の貸出情報管理テーブルが存在しないことを示している。
次に、タスクXのリソース返却処理手順を図10のフローチャートを用いて説明する。
このリソースの返却処理は、タスクの終了処理手順に含まれていて、タスク設計者(ユーザ)がOS100で提供される各種サービス要求を適宜用いて実現することが出来る。
図10のリソース返却処理では、まず実行状態のタスクXのタスク管理テーブル200の獲得セマフォ資源情報(図示せず)を参照して獲得しているセマフォ資源があるかを調べる(ステップS201)。
このステップS201で、獲得しているセマフォ資源が存在しない時は、リソース返却処理を終了する。
一方、ステップS201で獲得しているセマフォ資源が存在する時は、該当するセマフォ資源のリソース管理テーブル300h(hは、該当するテーブル等の意味)を参照し、実行状態のタスクXのタスクIDと一致するリソース獲得管理テーブル320hに含まれるget_data323hの値を得て、一致するリソース獲得管理テーブル320hを削除する(ステップS202)。
次に、get_data323hの値を、該当するセマフォ資源のリソース管理テーブル300hの残り資源数303の値に加え(ステップS203)、OS管理データ103の該当リソース領域を開放する。
次に、実行状態のタスクXのタスク管理テーブル200の獲得セマフォ資源情報(図示せず)から該当のセマフォ資源の情報を削除する(ステップS204)。最後に、他に獲得したセマフォ資源が無いかを調べるために、ステップS201に戻る。
次に、リソース取戻機能ブロック105のリソース取戻しルーチンの処理手順とリソース取戻の後処理ルーチン107の処理手順を、図11のフローチャートを用いて説明する。
図11において、タスクおよびルーチンの実行調停機能ブロック106は、実行可能状態153のタスクの中から優先度の高いタスクYを選択して、実行状態にする(ステップS301)。そして、タスクおよびルーチンの実行調停機能ブロック106はリソース取戻機能ブロック105にサービス要求を行い、それを受けてリソース取戻機能ブロック105は実行状態150となったタスクYのタスク管理テーブル200のlend_link210の値を調べる(ステップS302)。このlend_link210の値がNULLの時は、貸与したリソースが無いので、リソース取戻し処理を終了する。
ステップS302で調べたlend_link210に、貸出情報管理テーブル220の先頭アドレスを示すポインタが設定されている時は、実行状態になったタスクYがリソースを貸与したことを示しているので、リソース取戻機能ブロック105のリソース取戻しルーチンを呼び出して実行する(ステップS303)。
次に、タスクおよびルーチンの実行調停機能ブロック106は、タスクYのタスク管理テーブル200のリソース取戻の後処理212の値を調べる(ステップS304)。
そして、リソース取戻の後処理212がNULLの時は、リソースを取戻した後にユーザが設定した特別な処理を行わないため、リソース取戻し処理を終了する。
一方、ステップS304で調べたリソース取戻の後処理212がNULLでない時は、リソース取戻の後処理212に設定されたユーザが用意したリソース取戻の後処理ルーチン107を呼び出す(ステップS305)。
このリソース取戻の後処理ルーチン107では、OS100で提供されるサービス要求を用いてOS管理データ103内のデータにアクセスし処理を行うことができる。例えば、実行状態のタスクYのタスク管理テーブル200のlend_link210からリンクされている貸出情報管理テーブル220の「貸出詳細」の情報を得て、貸与したリソースの情報やリソースの取戻しの成功不成功の結果情報などに従って処理を行う。また、この後のステップで、タスクを遷移させる状態を指示する情報(図示せず)などを設定する。なお、このリソース取戻の後処理ルーチン107の処理中にタスクスケジューリングなどが発生してはならないため、OS100はルーチンの呼び出し時にタスクスケジューリングなどの発生を制限するように制御する。
ステップS305の次に、実行状態のタスクYのタスク管理テーブル200のlend_link210からリンクされる最初の貸出情報管理テーブル220a〜最後の貸出情報管理テーブル220mを削除して、lend_link210をNULLとする(ステップS306)。
次に、リソース取戻の後処理ルーチン107で設定される情報に従って、タスクYの状態を遷移させたり、新たな処理へ分岐したりする(ステップS307)。
ここで、リソース取戻の後処理ルーチン107で設定される情報が示す4つの例を以下に示す。第1は、リソース取戻の後処理ルーチン107で実行状態のタスクYの処理継続が可能となった場合であり、この場合はリソース取戻し処理を終了する。
第2は、実行状態のタスクYを実行状態以外の状態に遷移させる場合であり、遷移させる状態への遷移要求を行い、タスクYをその状態に遷移させる。そして、タスクおよびルーチンの実行調停機能ブロック106がタスクスケジューリングを行って、新たなタスクを実行状態にして(ステップS308)、リソース取戻し処理を終了する。
第3は、システムリセットの場合であり、システム全体のリセットを行う処理を行う(ステップS309)。
第4は、実行状態のタスクYをリセットする場合で、実行状態のタスクYに関連する管理領域の情報を初期化と、タスクYが獲得しているリソースを全て開放して、タスクYの処理を最初から行うように設定し(ステップS310)、次にタスクおよびルーチンの実行調停機能ブロック106がタスクスケジューリングを行い、新たなタスクを実行状態にして(ステップS308)、リソース取戻し処理を終了する。
次に、前記ステップS303のリソース取戻しルーチンの処理手順を図12のフローチャートを用いて説明する。
最初に、リソース取戻し処理対象となるリソース資源の貸出情報管理テーブル220の先頭アドレスを示す処理対象ポインタに、実行状態のタスクYのタスク管理テーブル200のlend_link210の値をセットする(ステップS303a)。
次に、リソース取戻し処理対象となるリソース(セマフォ資源)の貸出情報管理テーブルの先頭アドレスを示す処理対象ポインタの値がNULLであるか否かを調べる(ステップS303b)。そして、処理対象ポインタの値がNULLの場合は、タスクYが貸与した全てのセマフォ資源の取戻し処理が終了したことを示しているので、リソース取戻しルーチンS303の処理を終了する。
一方、処理対象ポインタの値がNULLでなく、リソース取戻し処理対象となるリソース資源の貸出情報管理テーブル220g(gは、取戻し対象のリソース資源の意味)の先頭アドレスがセットされている時は、ポインタが示す貸出情報管理テーブル220gを参照して、そのリソース識別子221gから対象セマフォ資源の識別子、貸出詳細222gから貸出数を得るとともに、next223gに示される次の貸出情報管理テーブルの先頭アドレス情報を処理対象ポインタにセットする(ステップS303c)。
次に、図8のフローチャートに手順示すリソース獲得処理を行う(ステップS303d)。この時、図8に示された獲得要求対象のセマフォ資源を貸出情報管理テーブル220から得た対象セマフォ資源に、また獲得要求したタスクを実行状態となったタスクに読み替える。リソースであるセマフォ資源が獲得できた時は、貸出数を1減らす(ステップS303e)。貸出数が「0」であるか否か調べ(ステップS303f)、「0」でなければ、ステップS303dに進む。
また、貸出数が「0」の時は、対象セマフォ資源の取戻しが終了したので、対象となるセマフォ資源の貸出情報管理テーブル220gの貸出詳細222gに取戻し成功の情報を保存(記録)し(ステップS303g)、ステップS303bに進む。
ステップ303dのリソース獲得処理において、リソースレンタルフラグ211がレンタル不許可状態である時や、リソースのレンタルに失敗した時は、対象のセマフォ資源の貸出情報管理テーブル220gの貸出詳細222gに取戻し失敗の情報を保存(記録)し(ステップS303h)、ステップ303bに進む。
上述のようにして、計算機資源の制約がある環境においてもOS100に設けた機能ブロックにより、複数のタスクが共有資源へのアクセスで競合して、タスク間の優先度が逆転して実行されることを回避することができる。
なお、タスクの優先度202の数値が大きなものほど優先度が高いタスクとしてもよく、その場合はタスクXとタスクYの優先度の数値を入れ替えることで上述した動作説明を適用できる。また、OS管理データ103の共有資源には、セマフォ資源以外にメモリやメールボックスなどがあり、それらを用いてもよい。
本発明の実施例2を図13および図14を参照して説明する。図13は、実施例2における優先度逆転現象記録テーブルの構造を示す図である。図14は、そのリソース獲得処理手順を示すフローチャートである。この実施例2のOSの機能ブロックと処理手順において、図1乃至図12で説明した実施例1のOS100の機能と同一部分は同一番号を付し、詳細な説明を省略する。
実施例2のOSが実施例1と異なる点は、タスクのリソース獲得処理において、優先度逆転現象となる時に、優先度逆転現象の情報を記録して獲得処理を中断し、ユーザに報告するプログラムを起動することである。
図13に示す優先度逆転現象記録テーブル400は、獲得要求を行った実行状態のタスクID401(Rental tskid)と、獲得対象のセマフォ資源のリソース獲得管理テーブル320の先頭アドレスを示すポインタ402(connection_link)と獲得対象セマフォ資源情報403と獲得要求を行ったタスクのプログラム実行アドレス404(PC)から構成される。
タスクのリソース獲得処理手順において、実施例1と異なる点を図14のフローチャートを参照して説明する。
獲得要求対象のセマフォ資源の残り資源数が「0」であるか否か調べ(ステップS401)、残り資源数が「0」の場合、ユーザがOS管理データ103にデバッガプログラムなどで設定する優先度逆転報告モードフラグ(図示せず)を調べる(ステップS402)。
そして、前記優先度逆転報告モードフラグが優先度逆転報告モードでない時は、ステップS106に進む。
一方、前記優先度逆転報告モードフラグが優先度逆転報告モードの時は、優先度逆転現象となっているか否かを調べるため、リソース獲得要求をしたタスクのタスク優先度と、獲得要求対象のセマフォ資源のリソース獲得管理テーブル320に登録されているタスク優先度321とを比較し、登録されたタスク優先度321が等しいか高い場合は、順次リンクされたリソース獲得管理テーブル320のタスク優先度321との比較を行う(ステップS403)。
ステップS403で、獲得要求したタスクの優先度321に比べて登録されたタスク優先度321が全て等しいか高い場合は、ステップS107に進む。
ステップS403で、獲得要求したタスクの優先度321に比べて登録されたタスクにタスク優先度321に低いものがある時は、優先度逆転現象となっているので、優先度逆転現象記録テーブル400に、獲得要求したタスクのタスク識別子、獲得要求対象のセマフォ資源のリソース獲得管理テーブルの先頭アドレス、セマフォ資源情報、リソース獲得要求時のプログラムの実行アドレスなどを記録する(ステップS404)。
次に、リソース獲得処理を終了し、優先度逆転現象をユーザに報告するプログラムを起動する。
上述のように、OS100は、ユーザが優先度逆転報告モードに設定すると複数のタスクが共有資源へのアクセスで競合し、それらタスク間の優先度が逆転している場合は、優先度逆転現象を発生したタスクやリソース情報をユーザに報告するため、優先度逆転現象を回避する方法の設計が容易になる。
更に、本発明は、上述した各実施例に限定されるものではなく、本発明の主旨を逸脱しない範囲で種々に変形して実施することができる。
本発明のタスクの優先度逆転現象の回避処理装置および回避処理方法の実行を処理するOSの構成を示すブロック図。 実施例1に係るOSによるタスクの状態遷移図。 本発明の実施例1に係るOSで制御される2個のタスクの状態遷移とリソースのセマフォ資源の残り数の変化を示す図。 実施例1に係るタスク管理テーブルの構造を示す図。 実施例1に係るリソース管理テーブルの構造を示す図。 実施例1に係るリソース獲得処理手順を示すフローチャート。 実施例1に係るリソース獲得管理テーブルの構造を示す図。 実施例1に係るリソース獲得処理手順を示すフローチャート。 実施例1に係る貸出情報管理テーブルの構造を示す図。 実施例1に係るタスクのリソース返却処理手順を示すフローチャート。 実施例1に係るリソース取戻し処理手順を示すフローチャート。 実施例1に係るリソース取戻しルーチンの処理手順を示すフローチャート。 実施例2に係る優先度逆転現象記録テーブルの構造を示す図。 実施例2に係るリソース獲得処理手順を示すフローチャート。
符号の説明
100 OS
101 タスク
102、104、105、106 OSの機能ブロック
103 OS管理データ
107 リソース取戻の後処理ルーチン
150〜153 タスクの状態
200 タスク管理テーブル
300 リソース管理テーブル
400 優先度逆転現象記録テーブル

Claims (5)

  1. 実行状態の第1のタスクから共有資源の獲得要求を受け、かつ当該共有資源が前記第1のタスクの優先度より低い優先度である第2のタスクによって獲得されている場合に、当該共有資源を第1のタスクに借用させる第1の制御手段と、
    前記第2のタスクが実行状態となった時に、前記第2のタスクに前記共有資源を取り戻す第2の制御手段と
    を備えることを特徴とするタスクの優先度逆転現象の回避処理装置。
  2. 前記共有資源の借用の可否を示す情報と、前記共有資源が借用されたことを示す情報と、前記共有資源を獲得したタスクの識別情報と、前記獲得したタスクの優先度情報とを少なくとも記憶する記憶手段を有し、
    前記第1の制御手段は、前記共有資源の借用の可否を示す情報と前記共有資源を獲得したタスクの識別情報と前記獲得したタスクの優先度情報とを参照して、前記第2のタスクが獲得している前記共有資源を前記第1のタスクに獲得させ、
    前記第2の制御手段は、前記共有資源が借用されたことを示す情報を参照して、前記第2のタスクに前記共有資源を取り戻す
    ことを特徴とする請求項1に記載のタスクの優先度逆転現象の回避装置。
  3. 前記第2の制御手段は、取り戻し後の設定された処理への分岐手段を含むことを特徴とする請求項1または請求項2に記載のタスクの優先度逆転現象の回避処理装置。
  4. デバッグ手段と、
    前記実行状態のタスクのタスク識別情報と、前記共有資源の共有資源識別情報と、前記共有資源を獲得しているタスクのタスク識別情報と、前記共有資源を獲得しているタスクのタスク優先度と、獲得要求したタスクのプログラム実行アドレス情報とを少なくとも記憶する記憶手段とを更に有し、
    前記第1の制御手段は、前記第1のタスクが獲得要求した前記共有資源を前記第2のタスクによって獲得していることを検知した時、前記記憶手段に前記第1のタスクのタスク識別情報と、前記第1のタスクが獲得要求した前記共有資源識別情報と、前記第2のタスクのタスク識別情報と、前記第2のタスクのタスク優先度と、前記第1のタスクのプログラム実行アドレス情報とを記憶し、優先順位逆転状態であることを前記デバッグ手段に通知する
    ことを特徴とする請求項1または請求項2に記載のタスクの優先度逆転現象の回避装置。
  5. 第1のタスクから共有資源の獲得要求が発せられた時に当該共有資源が第2のタスクによって既に獲得されていて、かつ、前記第2のタスクの優先度が前記第1のタスクの優先度より低い場合、前記第2のタスクから前記共有資源を借用し、前記第1のタスクに前記共有資源を獲得させ、前記第2のタスクのタスク管理情報に前記第1のタスクに貸与した情報を記録する
    ことを特徴とするタスクの優先度逆転現象の回避処理方法。
JP2005111338A 2005-04-07 2005-04-07 タスクの優先度逆転現象の回避処理装置および回避処理方法 Pending JP2006293559A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2005111338A JP2006293559A (ja) 2005-04-07 2005-04-07 タスクの優先度逆転現象の回避処理装置および回避処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005111338A JP2006293559A (ja) 2005-04-07 2005-04-07 タスクの優先度逆転現象の回避処理装置および回避処理方法

Publications (1)

Publication Number Publication Date
JP2006293559A true JP2006293559A (ja) 2006-10-26

Family

ID=37414088

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005111338A Pending JP2006293559A (ja) 2005-04-07 2005-04-07 タスクの優先度逆転現象の回避処理装置および回避処理方法

Country Status (1)

Country Link
JP (1) JP2006293559A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279812A (zh) * 2013-06-19 2013-09-04 河海大学 一种可消除优先权冲突的任务与资源优化配置方法
CN110008123A (zh) * 2019-03-28 2019-07-12 武汉达梦数据库有限公司 一种自动部署测试软件的方法以及相应的装置
KR20210094932A (ko) * 2020-01-22 2021-07-30 단국대학교 산학협력단 실시간 기기에서의 보안성 강화 기술의 스케줄 가능성 검증 장치 및 방법

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103279812A (zh) * 2013-06-19 2013-09-04 河海大学 一种可消除优先权冲突的任务与资源优化配置方法
CN110008123A (zh) * 2019-03-28 2019-07-12 武汉达梦数据库有限公司 一种自动部署测试软件的方法以及相应的装置
CN110008123B (zh) * 2019-03-28 2022-04-26 武汉达梦数据库股份有限公司 一种自动部署测试软件的方法以及相应的装置
KR20210094932A (ko) * 2020-01-22 2021-07-30 단국대학교 산학협력단 실시간 기기에서의 보안성 강화 기술의 스케줄 가능성 검증 장치 및 방법
KR102307445B1 (ko) * 2020-01-22 2021-09-30 단국대학교 산학협력단 실시간 기기에서의 보안성 강화 기술의 스케줄 가능성 검증 장치 및 방법

Similar Documents

Publication Publication Date Title
US9798595B2 (en) Transparent user mode scheduling on traditional threading systems
US5748959A (en) Method of conducting asynchronous distributed collective operations
US5632032A (en) Cross address space thread control in a multithreaded environment
US7966459B2 (en) System and method for supporting phased transactional memory modes
US5742830A (en) Method and apparatus for performing conditional operations on externally shared data
TWI423161B (zh) 繪圖處理單元、元命令處理系統以及元命令執行方法
US7657894B2 (en) Detecting lock acquisition hierarchy violations in multithreaded programs
US7472214B2 (en) Real-time embedded simple monitor method and computer product
RU2437144C2 (ru) Способ устранения исключительной ситуации в одном из ядер многоядерной системы
JPH07191944A (ja) 多重プロセッサによる多数の資源への命令におけるデッドロックを防止するためのシステムおよび方法
WO2010067492A1 (ja) マルチプロセッサシステム及びその排他制御の調停方法
US20060136925A1 (en) Method and apparatus for shared resource management in a multiprocessing system
JP2004288162A (ja) 同期タスクを利用したオペレーティングシステムアーキテクチャ
US20140373026A1 (en) Method, Apparatus and System for Coordinating Execution of Tasks in a Computing System Having a Distributed Shared Memory
CN111857993B (zh) 一种内核态调用用户态函数的方法
KR19980070448A (ko) 공동처리 알고리즘을 이용한 다수의 큐 핸들링 방법 및 장치
JP2000215070A (ja) ロバスト且つ回復可能なプロセス間ロック
US20120059997A1 (en) Apparatus and method for detecting data race
JP2006293559A (ja) タスクの優先度逆転現象の回避処理装置および回避処理方法
US5862340A (en) Method operating in each node of a computer system providing and utilizing special records for collective communication commands to increase work efficiency at each node
CN112540871B (zh) 通用寄存器保留恢复的实现方法
US8219762B1 (en) Computer system and method for leasing memory location to allow predictable access to memory location
EP4068094A1 (en) Lock-free ring buffer
US20090217290A1 (en) Method and System for Task Switching with Inline Execution
US7673125B2 (en) Resetting multiple cells within a partition of a multiple partition computer system