二つのタスクA,Bを単独で実行した場合のCPUと入出力装置(I/O)の動作順序と処理時間は,表のとおりである。
次の条件で二つのタスクが同時に実行可能状態になってから,タスクBの実行が完了するまでの時間は何ミリ秒か。
ここで,表の()内の数字は処理時間を表すものとする。
〔条件〕
(1) タスクA,Bは同一のI/Oを使用し,タスクAが先に実行される。
(2) CPU処理を実行中のタスクは,入出力処理を開始するまでは処理を継続し,中断されない。
(3) I/Oも入出力が終了するまで処理を中断されない。
(4) その他のオーバヘッドは考慮しない。
表:タスク|単独実行時の動作順序と処理時間(単位 ミリ秒)/A|CPU(20)→I/O(30)→CPU(20)→I/O(40)→CPU(10)/B|CPU(10)→I/O(30)→CPU(20)→I/O(20)→CPU(20)
正答3
解説
正解は3です。
2つのタスクが1つのCPUと1つのI/Oを共有するときの処理の流れを、時間軸でたどる問題です。
CPUやI/Oが使用中なら、もう一方のタスクはそれが空くまで待ちます。
【計算】
0〜20ミリ秒では、AがCPUを使います。
20〜50ミリ秒では、AがI/Oを使い、BはCPUを20〜30ミリ秒に使います。
BはI/Oを使いたいのですが、Aが使用中なので50ミリ秒まで待ちます。
50〜70ミリ秒ではAがCPUを使い、50〜80ミリ秒ではBがI/Oを使います。
AはI/Oを70ミリ秒から使いたいのですが、Bが使用中なので80ミリ秒まで待ちます。
80〜120ミリ秒ではAがI/Oを使い、80〜100ミリ秒ではBがCPUを使います。
Bは100ミリ秒からI/Oを使いたいのですが、Aが使用中なので120ミリ秒まで待ちます。
120〜130ミリ秒ではAがCPUを使い、Aはここで完了します。
120〜140ミリ秒ではBがI/Oを使い、140〜160ミリ秒ではBがCPUを使って完了します。
【選択肢別解説】
1:× 120ミリ秒の時点では、BはまだI/O待ちの状態で完了していません。
2:× 140ミリ秒の時点では、BはI/Oを終えたところで、最後のCPU処理20ミリ秒が残っています。
3:○ 時間軸をたどると、Bの最後のCPU処理が終わるのは160ミリ秒です。
4:× 180ミリ秒は、上のたどり方で求めた160ミリ秒と一致しません。
【ポイント】
この種の問題は、CPUとI/Oの使用状況を時間ごとに書き出すと確実です。
装置が使用中のときは待ち時間が発生する点を見落とさないようにします。