五つのタスクA~Eの優先度と,各タスクを単独で実行した場合のCPUと入出力装置(I/O)の動作順序と処理時間は,表のとおりである。
優先度“高”のタスクAとB~Eのどのタスクを組み合わせれば,組み合わせたタスクが同時に実行を開始してから,両方のタスクの実行が終了するまでの間のCPUの遊休時間をゼロにできるか。
ここで,I/Oは競合せず,OSのオーバヘッドは無視できるものとする。
また,表の( )内の数字は処理時間を表すものとする。
正答3
解説
正解は3です。
優先度の高いタスクAが入出力(I/O)を行っている間に、低優先度のタスクがCPUを使い切れるかを確かめる問題です。
CPUは優先度の高いAが使い、AがI/O中または終了後だけ相手のタスクがCPUを使えます。
【図の読み取り】
表では、各タスクの動作順序と処理時間(ミリ秒)が次のように示されています。
タスクAは、CPU3、I/O3、CPU3、I/O3、CPU2の順です。
選択肢1(図のア)のタスクBは、CPU2、I/O5、CPU2、I/O2、CPU3です。
選択肢2(図のイ)のタスクCは、CPU3、I/O2、CPU2、I/O3、CPU2です。
選択肢3(図のウ)のタスクDは、CPU3、I/O2、CPU3、I/O1、CPU4です。
選択肢4(図のエ)のタスクEは、CPU3、I/O4、CPU2、I/O5、CPU2です。
【計算】
AとDを組み合わせた場合を時刻順に追います。
0〜3ミリ秒はAがCPUを使い、Dは待ちます。
3〜6ミリ秒はAがI/Oを行い、DがCPUを3ミリ秒使います。
6〜9ミリ秒はAがCPUを使い、その間にDはI/Oを2ミリ秒行います。
9〜12ミリ秒はAがI/Oを行い、DがCPUを3ミリ秒使います。
12〜14ミリ秒はAが最後のCPUを使って終了し、その間にDはI/Oを1ミリ秒行います。
14〜18ミリ秒はDが最後のCPUを4ミリ秒使って終了します。
0〜18ミリ秒の間、CPUは常にどちらかのタスクが使っており、遊休時間はゼロです。
【選択肢別解説】
1:× AとBでは、3〜5ミリ秒にBがCPUを2ミリ秒使った後、BはI/Oに入ります。
AのI/Oは6ミリ秒まで続くので、5〜6ミリ秒にCPUが空きます。
2:× AとCでは、9〜11ミリ秒にCがCPUを2ミリ秒使った後、CはI/Oに入ります。
AのI/Oは12ミリ秒まで続くので、11〜12ミリ秒にCPUが空きます。
3:○ AとDでは、AのI/O中は必ずDがCPUを使い、DのI/OはAのCPU処理中に収まります。
最後もDがCPUを使い続けるので、遊休時間は生じません。
4:× AとEでは、6〜10ミリ秒にEがI/Oを行います。
AのCPU処理は9ミリ秒で終わってI/Oに入るため、9〜10ミリ秒にCPUが空きます。
【ポイント】
この種の問題は、時刻を区切って「CPUを使っているのは誰か」を順に書き出すと確実に解けます。
相手のタスクのI/Oが、AのCPU処理中に収まるかどうかが判断の分かれ目です。