エンベデッドシステムスペシャリスト 2018年 午前2 問10
問題文
優先度に基づくプリエンプティブなスケジューリングを行うリアルタイムOSにおいて、タスクの優先度逆転が発生する可能性があるのはどれか。
選択肢
ア:排他制御(正解)
イ:ポーリング
ウ:リエントラント
エ:割込み
🔒 解説は解答すると表示されます
優先度逆転と排他制御【午前2解説】
正解の理由
優先度逆転とは、優先度の高いタスクが、優先度の低いタスクの処理を待たされる現象です。
たとえば、低優先度タスクが共有資源を使用中に排他制御を行い、その資源をロックしているとします。そこへ高優先度タスクが同じ資源を使おうとしても、ロックが解除されるまで待つ必要があります。さらに中優先度タスクが実行されると、低優先度タスクがロックを解除できず、高優先度タスクの待ち時間が長くなることがあります。
このように、共有資源の利用を調整するアの排他制御を原因として、優先度逆転が発生する可能性があります。
解法ステップ
- 優先度逆転が、タスクの実行順序と共有資源の待ち合わせに関する現象だと捉えます。
- 低優先度タスクが資源を保持している間、高優先度タスクがその資源を使えずに待つ状況を考えます。
- 共有資源への同時アクセスを防ぐ仕組みである排他制御が該当すると判断します。
選択肢別の誤答解説
- ア 排他制御:共有資源をロックしているタスクを、別のタスクが待つ状況が生じます。タスクの優先度によっては、優先度逆転の原因になります。
- イ ポーリング:一定間隔で状態を繰り返し確認する方式です。CPUの使用効率に影響することはありますが、それ自体が優先度逆転の原因ではありません。
- ウ リエントラント:複数のタスクなどから同時に呼び出されても安全に動作できる性質です。排他制御が必要な場合もありますが、リエントラントそのものを優先度逆転の原因とはしません。
- エ 割込み:実行中の処理を中断し、割込み処理へ移る仕組みです。優先度に応じた実行制御に関係しますが、設問で問われる優先度逆転の典型的な原因ではありません。
よくある誤解
- 優先度が高いタスクは常に最優先で実行されると思いがちです。資源のロック待ちが発生すると、すぐには実行できないことがあります。
- 優先度逆転は、単に低優先度タスクが先に実行されることだと誤解しがちです。重要なのは、高優先度タスクが低優先度タスクの資源保持によって待たされる点です。
- 排他制御そのものが常に悪いと思う必要はありません。共有資源を安全に使うために必要ですが、タスクの優先度を考慮した対策が求められます。
補足コラム
優先度逆転への対策として、優先度継承プロトコルがあります。高優先度タスクが待っている場合、資源を保持している低優先度タスクの優先度を一時的に引き上げます。これにより、資源を保持するタスクが早く処理を終え、ロックを解除しやすくなります。
FAQ
Q. 優先度逆転では、高優先度タスクと低優先度タスクの優先度が入れ替わるのですか?
A. 実際の優先度が入れ替わるわけではありません。低優先度タスクが資源を保持しているために、高優先度タスクが待たされる状態を指します。
A. 実際の優先度が入れ替わるわけではありません。低優先度タスクが資源を保持しているために、高優先度タスクが待たされる状態を指します。
Q. 排他制御をなくせば、優先度逆転を防げますか?
A. 排他制御をなくすと、共有資源への同時アクセスによってデータが壊れるおそれがあります。排他制御を適切に行い、必要に応じて優先度継承などの仕組みを利用します。
A. 排他制御をなくすと、共有資源への同時アクセスによってデータが壊れるおそれがあります。排他制御を適切に行い、必要に応じて優先度継承などの仕組みを利用します。
関連キーワード: 優先度逆転、排他制御、プリエンプティブスケジューリング、優先度継承、リアルタイムOS

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

