3

プリエンプションが優先順位の逆転の問題を解決しない理由を知りたいですか?
プリエンプティブ カーネルがある場合。では、なぜ優先順位の逆転問題が解決しないのでしょうか?

4

6 に答える 6

8

さて、2 つのプロセスがあるとしましょう。また、優先度の低いプロセスがロックを取得すると仮定しましょう。優先度の高いプロセスの準備が整うと、他のプロセスを横取りします。優先度の高いプロセスがそのロックを必要とする場合、優先度の低い他のプロセスのためにロックを取得できません。つまり、優先度の低いプロセスが優先度の高いプロセスをブロックします。優先度の高いプロセスが実行されないようにします。これを「優先順位の逆転」と呼びます。

明らかに、プリエンプションは優先度逆転の解決策ではありません。解決策は「優先継承」です。これは、優先度の高いプロセスでも必要とされるロックを取得するたびに、プロセスの優先度を一時的に上げる必要があることを意味します。これは、同じロックを必要とする他のプロセスの中で最も優先度の高いプロセスでなければなりません。

于 2012-07-05T07:17:57.633 に答える
5

それぞれ優先度がHighMediumLowの3つのスレッドABCとします。

Cはプロセッサを取得し、ロックLを取得します。次に、Bはいくつかのイベントによってウェイクアップされ、 Cをプリエンプトします。これで、 Aがウェイクアップし、 Bをプリエンプトしてプロセッサを取得します。AはロックLを必要としますが、 LはすでにCによって所有されているため、失敗します。ロックが使用できないためにAがプリエンプトされ、プロセッサがBに戻されます。Bが完了するのを待つ必要があります。これにより、最終的にプロセッサがCに返されます。Cが完了してロックを解除し、最終的にウェイクアップしますA。 _

これは優先順位の逆転です。これは、 Bが実行されるのに対し、システムには優先順位の高いスレッドAがあり、優先順位の低いスレッド(この場合はC )の完了を待機しているためです。

ちなみに、解決策は優先度継承です。

于 2012-07-05T07:30:35.183 に答える
1

プリエンプションとは、タスクが実行されないようにプロセッサを取り除くことを意味します。

優先度の低いタスクは、優先度の高いタスクが必要とするリソースを保持しているため、これでは十分ではありません。

ここで、リソースを取り除くことができる場合 (別の種類の「プリエンプション」)、これにより実際に優先順位の逆転が解決されます。しかし、これは通常は不可能です。なぜなら、優先度の低いタスクのアクションが中途半端であると、矛盾が生じるからです。

于 2012-07-05T12:32:15.130 に答える
0

ウィキから

検討、

L --> 優先度の低いタスク
H --> 優先度の高いタスク
M --> 優先度の高いタスク
R --> リソース

ステップ 1: L が R を取得する
ステップ 2: H が R を要求する (現在 L で使用されているため、H は L が R を放棄するのを待つ)
ステップ 3: M が到着する (M はブロックされていないタスクである。つまり、R を必要としない)
ステップ 4: L は M によって横取りされます (したがって、L は R を放棄できません。このため、H は実行できません。)

M が実行を終了すると、L は R を放棄します。その後、H だけが続行できます。上記のシナリオでは、中優先度 (M) のタスクが高優先度 (H) のタスクの前に実行されました。

これは、プリエンプティブ カーネルにおける実際の優先順位の逆転シナリオです。

于 2012-07-05T08:53:34.363 に答える
0

3 つのプロセスがあるとします。

  • A - 高優先度
  • B - 通常の優先度
  • C - 低優先度

また、ACの両方が、たとえば同じファイル (これは任意の共有リソースである可能性があります) を使用しており、その使用法を同期する必要があります。

ここで、 ABのどちらも実行する準備ができておらず、Cが実行され、ファイルを使用するためのロックを取得するとします。Cがファイルへのロックを保持している間に、A実行の準備が整い、オペレーティング システムはCをプリエンプトし、 Aを実行します。Aもファイルを必要とするところまで実行し、ロックを取得しようとすると、Cがロックを保持しているためブロックされます。その間にBが実行可能になった場合、 Aの実行準備が整っていないため、Aの代わりに B が実行されます。A の準備が整うためには、ファイル ロックを解除する必要があります。C、およびCは実行されず、優先度の高いプロセスBが実行されているため、ロックを解放しません。したがって、ACを待っており、その C はBを待っています。この状況でBをプリエンプトするだけでは役に立ちません。Aは準備ができておらず、C が実行れない限り準備ができておらず、プリエンプトされた優先度の高いBが実行する準備ができているため、 Cは実行できません。

于 2012-07-05T07:18:19.380 に答える
0

優先度の逆転は、優先度の高いタスクが優先度の低いタスクによって間接的に横取りされ、2 つのタスクの相対的な優先度が効果的に「反転」する場合に、スケジューリングで問題となるシナリオです。

優先度の低いタスク L があるとします。このタスクにはリソース R が必要です。L が実行中であり、リソース R を取得しているとします。ここで、優先度の高い別のタスク H があります。このタスクにはリソース R も必要です。L がリソース R を取得した後に H が開始されるとします。ここで、H は L がリソース R を解放するまで待機する必要があります。 R) は、この間中優先度で開始します。R はまだ (L によって) 使用されているため、H は実行できません。M はブロックされていない最も優先度の高いタスクであるため、L の前にスケジュールされます。L は M によってプリエンプトされているため、L は R を放棄できません。したがって、M は完了するまで実行され、その後 L が実行されます。少なくとも、 R を放棄することができます - そして H が実行されます。したがって、上記のシナリオでは、

于 2012-07-05T16:47:29.073 に答える