0

Silberschatz/Galvin 著の「Operating System Principles」(第 9 版) とウィキペディアの優先順位の逆転に関する記事では、優先順位の逆転では、優先順位の高いプロセスは優先順位の低いプロセスが保持するリソースを使用できないと述べています。優先度が中程度のプロセスは、優先度が低いプロセスを横取りし、そのリソースを取得します。しかし、そうである場合 (つまり、優先度に基づくプリエンプションが許可されている場合)、優先度の高いプロセスが優先度の低いプロセス自体をプリエンプトしてリソースを取得できないのはなぜでしょうか?

以下は、本とウィキペディアの記事で言及されていることです。

それぞれ高優先度と低優先度の 2 つのタスク H と L を考えます。どちらも共有リソース R の排他的使用を取得できます。L が R を取得した後に H が R を取得しようとすると、L がリソースを解放するまで H がブロックされます。適切に設計されたシステムで専用リソース (この場合は R) を共有するには、通常、H (優先度の高いタスク) が長時間ブロックされたままにならないように、L が R をすぐに放棄する必要があります。ただし、優れた設計にもかかわらず、中程度の優先度 (p(L) < p(M) < p(H)、p(x) はタスク (x) の優先度を表す) の 3 番目のタスク M が実行可能になる可能性があります。 L による R の使用。この時点で、M は L より優先度が高いため、L を先取りし、L が R をすぐに放棄できなくなり、H (最も優先度の高いプロセス) が実行できなくなります。

4

1 に答える 1

1

これは、理解に役立つより良い例です。最後に説明と質問にお答えします。

優先度の異なる 3 つのプロセスがあるとします。低、中、高。(優先度に関しては、低、中、高)。

低プロセスと高プロセスが同じクリティカル リソースに異なるタイミングでアクセスできるようにします。

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

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

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

その後、High は重要なリソースに入ろうとしますが、Low がそこにあるためブロックされます。

Med のブロックが解除され、システムで最も優先度の高いタスクになったため、実行されます。

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

優先度の逆転を「解決」するには、Low の優先度を少なくとも High と同じくらい高くする必要があります。

結論: Med は High を待機させました。 クリティカル セクションは同期ツールによって保護されています。優先度の高いプロセスは、優先度の低いプロセスが自発的に共有リソースを放棄するまで、共有リソースを横取りしません。

ただし、優先度の低いプロセスには、Med プロセスによって現在使用されているリソースが必要です。=> 優先度の高いプロセスは待機する必要があります。

これを読んでください: 優先順位の逆転とは?

コメントの1つに例を書いた人の功績。

于 2016-10-08T23:04:20.863 に答える