メインコンテンツへ
ソフトウェアOS実践

優先度逆転問題(Priority Inversion)の説明として最も正しいものはどれか。

ア.優先度の高いプロセスが低いプロセスの実行を直接停止させてしまう問題
イ.低優先度タスクが資源を保持したまま中優先度タスクにプリエンプトされ、高優先度タスクが実質的に低優先度タスクを待ち続ける問題正解
ウ.プロセスの優先度が実行中に自動的に低下してしまうOSのバグ
エ.優先度の高いプロセスどうしが互いにリソースを待ち合うデッドロック状態

解説

優先度逆転は「偉い部長(高優先度)が平社員(低優先度)の会議室利用を待っているのに、課長(中優先度)がずっと割り込んで仕事を続ける」状況。平社員は会議室(資源)を持ったまま課長に仕事を奪われ、部長はいつまでも会議室を使えない。実際にMars Pathfinderで発生した有名な問題!

なぜ イ が正解か

優先度逆転の発生メカニズム:①低優先度タスクLが共有資源を取得②高優先度タスクHが起動し同じ資源を要求→ブロック③中優先度タスクMがLをプリエンプト④LはMが終わるまで資源を解放できず⑤結果: H(高)がM(中)より先に実行されるべきなのに、M→L→Hの順になる(逆転!)。解決策:優先度継承プロトコル(Lの優先度を一時的にHと同等に上げる)、優先度上限プロトコル。

なぜ ア は間違いか

高優先度プロセスが低優先度を直接停止させる(プリエンプション)は正常な優先度制御の動作であり、問題ではない。優先度逆転はその逆のシナリオ。

なぜ ウ は間違いか

優先度が実行中に自動低下するのは「エイジング(老化)」の逆の概念か設計上のポリシーの話であり、優先度逆転とは別の概念。

なぜ エ は間違いか

高優先度プロセスどうしの循環待ちはデッドロックであり、優先度逆転とは異なる。デッドロックは複数プロセスが互いに相手の資源を待つ状態。

出典: AI生成問題(学習用)