1

HPT->最も優先度の高いタスク。
MPT->中優先度タスク
LPT->低優先度タスク

こんにちは友人、私は多くのウェブサイトから優先順位の逆転を読みました(例えばhttp://www.embeddedheaven.com/priority-inversion-2.htm)。しかし、なぜHPTがLPTをプリエンプトできないのか知りたいのですが。セクション3.3UnboundedInversionを読むと、LPTがリソースを取得したかどうか、同時にHPTの準備ができているが、LPTのためにブロックされているかどうかがわかります。ただし、MPTの準備ができている場合は、LPTをプリエンプトし、それ自体を実行します。次に、LPTはMPTが終了するまで待機する必要があります。MPTが終了すると、LPTが再開されます。そして、LPTが終了すると、HPTが開始します。だから私の質問は、なぜHPTがLPTまたはMPTをプリエンプトできないのですか?

4

3 に答える 3

7

ウィキペディアの説明は、あなたが提供したリンクよりも理解しやすいかもしれません: https://en.wikipedia.org/wiki/Priority_inversion

少し違う言葉であなたの質問に答えるために、大まかに時系列で起こることは

  1. LPTがRを取得
  2. MPT が実行可能になり、LPT がプリエンプトされる
  3. HPT が実行可能になり、MPT がプリエンプトされる
  4. HPT は R を取得しようとし、ブロックします。
  5. スケジューラは、実行可能な最も優先度の高いタスク、つまり MPT を選択します。
  6. MPT は無制限に (潜在的に「永遠に」) 実行されるため、LPT の実行と R の解放が妨げられ、HPT の実行が妨げられます。
于 2012-05-23T10:40:26.680 に答える
1

優先度の低いタスクが排他的なリソース保持している場合は、プリエンプト(タスクがCPU時間を取得するため)では不十分です。次に、優先度の高いタスクはリソースの取得を試み(たとえば、ミューテックスをロックすることにより)、優先度の低いタスクがリソースで完了するまでリソースをブロックします。

したがって、優先度の高いタスクはブロックされて(実行されない)、優先度の低いタスクは実行されます。

于 2012-05-23T09:42:55.310 に答える
1

優先順位の逆転は、共有リソースを持つ先制的な幹部の無期限の延期の一形態です。

優先順位の逆転は、優先順位の高いタスクが、優先順位の低いタスクに現在割り当てられている共有リソースへのアクセスを要求したときに発生します。優先度の高いタスクは、優先度の低いタスクがリソースを解放するまでブロックする必要があります。

この問題は、優先度の低いタスクが1つ以上の中優先度のタスクによって実行されない場合に複雑になります。優先度の低いタスクが実行されていないため、リソースとの対話を完了してそのリソースを解放することはできません。したがって、優先度の高いタスクは、優先度の低いタスクによって効果的に実行されなくなります。

于 2012-06-14T06:17:26.383 に答える