優先度に基づくプリエンプティブなスケジューリングを行うリアルタイムOSで,二つのタスクA,Bをスケジューリングする。
Aの方がBよりも優先度が高い場合にリアルタイムOSが行う動作のうち,適切なものはどれか。
正答3
解説
正解は3です。
プリエンプティブなスケジューリングでは、実行中のタスクより優先度の高いタスクが実行可能になると、実行中のタスクを中断して切り替えます。
中断されたタスクは、CPUが空けばすぐ動ける実行可能状態に戻ります。
待ち状態は、入出力の完了などのイベントを待っている状態であり、中断とは異なります。
【選択肢別解説】
1:× Aの方が優先度が高いので、Aの実行中にBが起動しても、Aは中断されません。
BはAが終わるまで実行可能状態で待ちます。
2:× 1と同じく、優先度の低いBのためにAが中断されることはありません。
また、中断されたタスクは待ち状態ではなく実行可能状態になります。
3:○ Bの実行中に優先度の高いAが起動すると、Bを中断して実行可能状態にし、Aを実行します。
プリエンプションの正しい動作です。
4:× AがBを中断する点は正しいですが、Bはイベントを待っているわけではないので、待ち状態ではなく実行可能状態になります。
【ポイント】
タスクの状態は、実行状態・実行可能状態・待ち状態の3つが基本です。
横取り(プリエンプション)された場合は実行可能状態、イベント待ちの場合は待ち状態になります。