三つのタスクA~Cの優先度と,各タスクを単独で実行した場合のCPUと入出力(I/O)装置の動作順序と処理時間は,表のとおりである。
A~Cが同時に実行可能状態になって3ミリ秒経過後から7ミリ秒間のスケジューリングの状況を表したものはどれか。
ここで,I/Oは競合せず,OSのオーバヘッドは考慮しないものとする。
また,表中の()内の数字は処理時間を表すものとし,解答群の中の“待ち”は,タスクが実行可能状態にあり,CPUの割当て待ちであることを示す。
表:タスク|優先度|単独実行時の動作順序と処理時間(ミリ秒)/A|高|CPU(2)→I/O(2)→CPU(2)/B|中|CPU(3)→I/O(5)→CPU(2)/C|低|CPU(2)→I/O(2)→CPU(3)
正答3
解説
正解は3です。
優先度の高いタスクが実行可能になるとCPUを横取りする、優先度順のプリエンプティブなスケジューリングを時刻ごとにたどる問題です。
図の4つの選択肢は、時刻3〜10ミリ秒の各タスクの状態(CPU、I/O、待ち、完了)を帯で示しています。
【時刻ごとのたどり方】
0〜2ミリ秒は、優先度が最も高いAがCPUを使い、BとCは待ちます。
2〜4ミリ秒は、AがI/Oに移り、空いたCPUを優先度が中のBが使います。
4ミリ秒にAがI/Oを終えて戻り、BからCPUを奪います。
4〜6ミリ秒は、Aが残りのCPU処理を実行し、6ミリ秒で完了します。
6〜7ミリ秒は、Bが残りのCPU処理1ミリ秒を実行します。
7ミリ秒からBはI/O(5ミリ秒)に入り、CがようやくCPUを7〜9ミリ秒使います。
9〜10ミリ秒は、CがI/Oを行います。
したがって3〜10ミリ秒では、AはI/O、CPU、完了の順です。
BはCPU、待ち、CPU、I/Oの順で、Cは7ミリ秒まで待ち、その後CPU、I/Oの順です。
【選択肢別解説】
1:× 選択肢1(図のア)は、Aが3〜5ミリ秒にCPUを使っています。
実際のAは2〜4ミリ秒がI/Oなので、3〜4ミリ秒はI/Oの最中です。
2:× 選択肢2(図のイ)は、Aが3〜4ミリ秒にCPU、Bが3〜8ミリ秒にI/Oとなっています。
Bは3ミリ秒の時点でまだCPU処理を終えていないので一致しません。
3:○ 選択肢3(図のウ)は、Aが3〜4ミリ秒にI/O、4〜6ミリ秒にCPUで完了し、Bが3〜4ミリ秒にCPU、4〜6ミリ秒に待ち、6〜7ミリ秒にCPU、以降はI/Oです。
Cは7ミリ秒まで待ち、7〜9ミリ秒にCPU、9〜10ミリ秒にI/Oで、たどった結果と一致します。
4:× 選択肢4(図のエ)は、I/Oを終えたAが4〜7ミリ秒に待たされ、その間に低優先度のCがCPUを使っています。
優先度の高いAが低いCに待たされることはないので誤りです。
【ポイント】
優先度方式では、高い優先度のタスクが実行可能になった時点でCPUを横取り(プリエンプション)します。
時刻0から1ミリ秒刻みで各タスクの状態を書き出すと、確実に判定できます。