優先度スケジューリングで中断タスクはどうなる?
基本情報技術者試験 令和元年度秋期 午前 問18 / ソフトウェア › オペレーティングシステム
過去問にチャレンジ
優先度に基づくプリエンプティブなスケジューリングを行うリアルタイムOSで,二つのタスクA,Bをスケジューリングする。Aの方がBよりも優先度が高い場合にリアルタイムOSが行う動作のうち,適切なものはどれか。
- ア
Aの実行中にBに起動がかかると,Aを実行可能状態にしてBを実行する。
- イ
Aの実行中にBに起動がかかると,Aを待ち状態にしてBを実行する。
- ウ
Bの実行中にAに起動がかかると,Bを実行可能状態にしてAを実行する。
- エ
Bの実行中にAに起動がかかると,Bを待ち状態にしてAを実行する。
会話形式の解説
講師注目するのは、起動したタスクの優先度と、実行を中断されたタスクの状態です。まず、優先度が高いAの実行中にBが起動したら、どちらが動きますか。
受験者Bが起動したので、Aはいったん止まると思いました。
講師Bの優先度はAより低いので、Aの実行が続きます。BはCPUの割当てを受ければ動ける実行可能状態になります。Aを中断してBを実行する説明は適切ではありません。
受験者Aを待ち状態にしてBを実行する説明も、切り替える点で違うのですね。待ち状態にもならないのですか。
講師はい。待ち状態は、入出力などの条件が整うまで実行できない状態です。Bが起動しただけでは、Aを待ち状態にする理由もありません。
受験者では、Bの実行中に優先度が高いAが起動した場合は、Aへ切り替わりますか。
講師そのとおりです。プリエンプティブ方式では、実行中のタスクより優先度が高いタスクが起動すると、実行を切り替えます。
受験者中断されたBは、Aの実行が終わるまで待ち状態になるのでしょうか。
講師BはCPUの割当てを譲っただけなので、実行可能状態です。したがって、Bを実行可能状態にしてAを実行する記述が正解です。Bを待ち状態にする記述は、切替え先は合っていますが状態が違います。
受験者起動時には優先度を比べ、中断されたタスクがすぐ動けるなら実行可能状態と考えるのですね。
講師はい。実行可能状態はCPUの割当てを受ければ動ける状態、待ち状態は入出力などを待っていて動けない状態です。この違いを切替えの判断と分けて確認すると整理しやすいです。
まとめ
優先度に基づくプリエンプティブ方式では、実行中のタスクより優先度が高いタスクが起動すると、実行を切り替えます。AはBより優先度が高いため、Bの実行中にAが起動した場合はAを実行します。中断されたBはCPUの割当てを譲っただけなので、待ち状態ではなく実行可能状態になります。
解答・解説
正解はウです
この問題のテーマ
優先度に基づくプリエンプティブ方式で、タスクの起動時にどちらを実行し、中断されたタスクをどの状態に置くかを問う問題です。
解き方の考え方
まず、起動したタスクと実行中のタスクの優先度を比べます。より優先度の高いタスクが起動した場合は実行を切り替えます。CPUの割当てを譲っただけのタスクは、再び割当てを受ければ動ける実行可能状態になります。
選択肢ごとの解説
- ×ア Aの実行中にBに起動がかかると,Aを実行可能状態にしてBを実行する。Aの実行中に、優先度の低いBが起動する場合です。Bは実行可能状態になりますが、Aから実行を奪うことはできず、Aの実行が続きます。
- ×イ Aの実行中にBに起動がかかると,Aを待ち状態にしてBを実行する。Bの起動は、実行中のAが入出力などを待つ条件には当たりません。Aを待ち状態にしてBへ切り替えるという記述が誤りです。
- ○ウ Bの実行中にAに起動がかかると,Bを実行可能状態にしてAを実行する。Bの実行中に、より優先度の高いAが起動する場合です。OSはBを中断してAを実行し、Bを実行可能状態に置きます。
- ×エ Bの実行中にAに起動がかかると,Bを待ち状態にしてAを実行する。Aへ実行を切り替える点は合っています。しかし、BはCPUの割当てを譲っただけなので、待ち状態ではなく実行可能状態になります。
POINT
- プリエンプティブ方式では、実行中のタスクより優先度の高いタスクが起動すると、実行を切り替えます。
- 実行可能状態は、CPUの割当てを受ければ実行できる状態です。
- 待ち状態は、入出力などの条件が整うまで実行できない状態です。
