三つのタスクの優先度と,各タスクを単独で実行した場合のCPUと入出力(I/O)装置の動作順序と処理時間は,表のとおりである。
優先度方式のタスクスケジューリングを行うOSの下で,三つのタスクが同時に実行可能状態になってから,全てのタスクの実行が終了するまでの,CPUの遊休時間は何ミリ秒か。
ここで,CPUは1個であり,1CPUは1コアで構成され,I/Oは競合せず,OSのオーバヘッドは考慮しないものとする。
また,表中の()内の数字は処理時間を示すものとする。
優先度|単独実行時の動作順序と処理時間(ミリ秒)/高|CPU(3) → I/O(5) → CPU(2)/中|CPU(2) → I/O(6) → CPU(2)/低|CPU(1) → I/O(5) → CPU(1)
正答2
解説
正解は2です。
優先度方式では、実行可能なタスクのうち優先度の高いものにCPUを割り当てます。
I/Oは競合しないので、時刻を追ってCPUが空く時間を数えます。
【処理のトレース】
0〜3ミリ秒は、高のタスクがCPUを使います。
3〜8ミリ秒は、高のタスクがI/Oを行います。
3〜5ミリ秒は、中のタスクがCPUを使い、5〜11ミリ秒にI/Oを行います。
5〜6ミリ秒は、低のタスクがCPUを使い、6〜11ミリ秒にI/Oを行います。
6〜8ミリ秒は、全タスクがI/O中なのでCPUは遊休です(2ミリ秒)。
8〜10ミリ秒は、高のタスクがCPUを使って終了します。
10〜11ミリ秒は、中と低がまだI/O中なのでCPUは遊休です(1ミリ秒)。
11〜13ミリ秒は中、13〜14ミリ秒は低がCPUを使って終了します。
【計算】
遊休時間=2+1=3ミリ秒です。
【選択肢別解説】
1:× 2ミリ秒は6〜8ミリ秒の遊休だけを数えた値で、10〜11ミリ秒の遊休が漏れています。
2:○ 6〜8ミリ秒の2ミリ秒と10〜11ミリ秒の1ミリ秒を合わせて3ミリ秒です。
3:× 4ミリ秒は、トレースで求めた遊休時間の合計(3ミリ秒)と合いません。
4:× 5ミリ秒も、遊休時間の合計と合いません。
中と低のタスクは11ミリ秒以降すぐにCPUを使えるので、遊休はそれ以上増えません。
【ポイント】
タスクスケジューリングの問題は、時刻を区切って各タスクの状態を一つずつ書き出すと確実に解けます。
I/O待ちの間に他のタスクへCPUを渡すことで、遊休時間を減らせることが分かります。