優先度上限プロトコル
出典: フリー百科事典『ウィキペディア(Wikipedia)』
優先度上限プロトコル(ゆうせんどじょうげんプロトコル、Priority Ceiling Protocol)とは、優先順位の逆転によるデッドロックを防ぐためのスケジューリング手法である。
以下では、特にICPP(Immediate Ceiling Priority Protocol)を解説する。Alan Burns と Andy Wellings によれば[1]、POSIXでは "Priority Protect Protocol"、Java言語では "Priority Ceiling Emulation" と呼ばれている。OCPP(Original Ceiling Priority Protocol)も最悪の場合の性能は同程度だが、ICPPに比較して粒度の細かい優先度継承機構を実装できる点が微妙に異なる。
優先度上限プロトコルでは、各リソースに優先度の上限が設定され、その優先度上限値はリソースをロックする可能性のあるタスクの最高優先度に等しい。
あるタスクがリソースをロックすると、その優先度は一時的に上限値まで上げられるので、そのリソースをロックしようとする他のタスクがスケジュールされることがなくなる。
- これにより低優先度タスクが高優先度タスクに先んじて動作可能となる。
これはロックされるリソースに関わる任意の手法に当てはまる。
- このようにしてデッドロック発生を防ぐ。
プロセスはロックしようとするリソースが他のプロセスによってロックされている間はスケジュールされない。