五つのタスクを単独で実行した場合のCPUと入出力装置(I/O)の動作順序と処理時間は,表のとおりである。
優先度"高"のタスクと,優先度"低"のタスクのうち一つだけを同時に実行する。
実行を開始してから,両方のタスクの実行が完了するまでの間のCPUの遊休時間が最も短いのは,どの優先度"低"のタスクとの組合せか。
ここで,I/Oは競合せず,OSのオーバヘッドは考慮しないものとする。
また,表の()内の数字は処理時間を示すものとする。
表:優先度/単独実行時の動作順序と処理時間(単位 ミリ秒)
高|CPU(3) → I/O(3) → CPU(3) → I/O(3) → CPU(2)
ア・低|CPU(2) → I/O(5) → CPU(2) → I/O(2) → CPU(3)
イ・低|CPU(3) → I/O(2) → CPU(2) → I/O(3) → CPU(2)
ウ・低|CPU(3) → I/O(2) → CPU(3) → I/O(1) → CPU(4)
エ・低|CPU(3) → I/O(4) → CPU(2) → I/O(5) → CPU(2)
正答3
解説
正解は3です。
優先度の高いタスクがI/Oを行っている間に、優先度の低いタスクがCPUを使えるかどうかを、時刻を追って確かめる問題です。
高のタスクは、0〜3ミリ秒がCPU、3〜6がI/O、6〜9がCPU、9〜12がI/O、12〜14がCPUです。
低のタスクは、高がCPUを使っていない時間にだけCPUを使えます。
【計算】
表のタスク ウ(選択肢3)と組み合わせた場合、低は3〜6でCPUを使い、6〜8でI/Oを行います。
低は9〜12でCPUを使い、12〜13でI/Oを行います。
高は14で終了し、低は14〜18で最後のCPUを使います。
0〜18の間、CPUは常にどちらかが使っているので、遊休時間は0ミリ秒です。
タスク ア(選択肢1)と組み合わせた場合、低は3〜5でCPU、5〜10でI/Oです。
5〜6と9〜10はどちらもCPUを使わないので、遊休時間は2ミリ秒です。
タスク イ(選択肢2)と組み合わせた場合、低は9〜11でCPU、11〜14でI/Oです。
11〜12に1ミリ秒の遊休が生じます。
タスク エ(選択肢4)と組み合わせた場合、9〜10に1ミリ秒、低のI/O(12〜17)の間の14〜17に3ミリ秒の遊休が生じます。
タスク エの遊休時間は合計4ミリ秒です。
【選択肢別解説】
1:× タスク「ア」は最初のI/Oが5ミリ秒と長く、高のI/O中にCPUを使えない時間ができます。
遊休時間は2ミリ秒です。
2:× タスク「イ」は2回目のCPUが2ミリ秒で終わり、高のI/Oの残り1ミリ秒が空きます。
遊休時間は1ミリ秒です。
3:○ タスク「ウ」は、高がI/Oを行う3ミリ秒にちょうど自分のCPU処理3ミリ秒を当てられます。
CPUが空く時間がなく、遊休時間は0ミリ秒で最短です。
4:× タスク「エ」は2回目のI/Oが5ミリ秒と長く、高の終了後にCPUが空いてしまいます。
遊休時間は4ミリ秒で最長です。
【ポイント】
この種の問題は、時刻を横軸にしてCPUとI/Oの使用状況を並べて書くと確実に解けます。
高のI/O時間と低のCPU時間がかみ合う組合せほど、CPUの遊休時間は短くなります。