2016-10-08 18 views
0

Silberschatz /ガルビン(第9版)の著書「オペレーティングシステムの原則」と同様に、優先順位の逆転のWikipediaの記事はどちらも優先順位の逆転で、優先度の高いプロセスが優先順位の低いで開催されたリソースを使用することはできませんと言います優先順位の低いプロセスを優先してそのリソースを取得します。しかしもしそうなら(、つまり優先度ベースのプリエンプションが許可されている場合は)、なぜ優先度の高いプロセスが優先度の低いプロセス自体を優先してリソースを取得できないのですか?優先度の逆転では、なぜ優先度の高いプロセスが中優先度のプロセスを先取りできないのですか?

は、共有の排他的使用を取得することができます いずれかは、それぞれ高および低優先度の二つのタスクHとLを、考えてみましょう:以下

は書籍だけでなく、Wikipediaの記事に記載されているものですLが獲得した後にH がRを獲得しようとすると、Lはリソースを解放するまで をブロックします。よく設計されたシステムに専用のリソース (ここでR)を共有することは、典型的にはH(優先度の高いタスクが) 滞在時間の過度の期間にわたってブロックされないように、速やかにRを放棄L を含みます。良好な設計にもかかわらず、 しかし、中優先度の第三のタスクM(P(x)がタスクの優先度を表し、P(L)< P(M)< P(H)は、(X))となる可能性があります がLよりも優先され、LがLよりも優先され、L を即座に放棄することができなくなり、Hが最も優先度の高いプロセスとなり、 が実行不能になる走る。これは優先度逆転と呼ばれ、より高い優先度のタスク が優先度の低い優先度によって先取りされます。ここで

答えて

1

あなたが理解するのに役立ちますより良い例です。 私は最後にあなたの質問を説明し答えます。

異なる優先度の3つのプロセスがあります。 低、中、高。 (優先順位の点で、低、中、高)。

低および高プロセスが、異なる時間に同じ重要なリソースにアクセスするようにします。

最低優先度プロセスが実行されていますが、MedおよびHighがブロックされ、クリティカルセクションから外れています。

Lowはクリティカルセクションに入り、Highが必要とするリソースを取得します。

ハイブロックが解除され、システム内で最も優先度の高いタスクであるため、ブロックが実行されます。

重要度が高いリソースを入力しようとしましたが、[低]としてブロックしています。

Medはブロックを解除し、システム内で最も優先度の高いタスクであるため、実行されます。

[低]は、リソースを放棄するまで実行できません。 Medブロックまたは終了までLowを実行することはできません。タスクの優先度は逆転しています。実行チェーンの最下位に高い優先順位がありますが、高いです。

は、優先順位の逆転を「解決」するために、低の優先順位が高いと少なくとも同じに高いことが格上げされなければなりません。

ボトムライン:メディックが待ち受けていました。 クリティカルセクションは同期ツールによって保護されていますが、プライオリティの高いプロセスは、優先度の低いプロセスが自発的に放棄するまで、共有リソースをプリエンプトしません。

しかし、優先度の低いプロセスでは、現在Medプロセスで使用されているリソースが必要です。 =>優先度の高いプロセスが待機しなければなりません。

この読み:コメントの1例を書いた男に What is priority inversion?

クレジットを。

+0

あなたが共有したリンクは、私の正確な質問がコメントの1つにあったため役に立ちました。他の誰かが私と同じ混乱を覚えました。 – Meathead

関連する問題