三つのタスクの優先度と,各タスクを単独で実行した場合のCPUと入出力装置(I/O)の動作順序と処理時間は,表のとおりである。
三つのタスクが同時に実行可能状態になってから,全てのタスクの実行が終了するまでの,CPUの遊休時間は何ミリ秒か。
ここで,I/Oは競合せず,OSのオーバヘッドは考慮しないものとする。
また,表の()内の数字は処理時間を示す。
優先度|単独実行時の動作順序と処理時間(単位 ミリ秒)/高|CPU(3)→I/O(5)→CPU(2)/中|CPU(2)→I/O(6)→CPU(2)/低|CPU(1)→I/O(5)→CPU(1)
正答3
解説
正解は3です。
優先度に基づくプリエンプティブ方式で、三つのタスクの実行をたどる問題です。
CPUは優先度の高いタスクから使い、I/Oは競合しないので各タスクが同時に使えます。
CPUを使うタスクが一つもない時間が、遊休時間です。
【計算】
0〜3ミリ秒は、高がCPUを3ミリ秒使います。
3〜5ミリ秒は、高がI/O(3〜8)に入ったので、中がCPUを2ミリ秒使います。
5〜6ミリ秒は、中がI/O(5〜11)に入ったので、低がCPUを1ミリ秒使います。
低は6ミリ秒からI/O(6〜11)に入ります。
6〜8ミリ秒は、全てのタスクがI/O中なので、CPUは2ミリ秒遊休です。
8〜10ミリ秒は、高がI/Oを終えてCPUを2ミリ秒使い、終了します。
10〜11ミリ秒は、中と低がI/O中なので、CPUは1ミリ秒遊休です。
11〜13ミリ秒は、中と低が同時にI/Oを終え、優先度の高い中がCPUを2ミリ秒使います。
13〜14ミリ秒は、低がCPUを1ミリ秒使い、全て終了します。
遊休時間の合計は、2+1=3ミリ秒です。
【選択肢別解説】
1:× 1ミリ秒は10〜11ミリ秒の遊休だけを数えた値です。
6〜8ミリ秒の遊休も加えます。
2:× 2ミリ秒は6〜8ミリ秒の遊休だけを数えた値です。
10〜11ミリ秒の遊休も加えます。
3:○ 6〜8ミリ秒の2ミリ秒と、10〜11ミリ秒の1ミリ秒を合わせて3ミリ秒です。
4:× 4ミリ秒になる区間はありません。
タイムチャートを正しく描くと遊休は3ミリ秒です。
【ポイント】
この種の問題は、横軸を時間にしてCPUとI/Oの使用状況を書き出すと確実に解けます。