2台のCPUから成るシステムがあり,使用中でないCPUは実行要求があったタスクに割り当てられるようになっている。
このシステムで,二つのタスクA,Bを実行する際,それらのタスクは共通の資源Rを排他的に使用する。
それぞれのタスクA,BのCPU使用時間,資源Rの使用時間と実行順序は図に示すとおりである。
二つのタスクの実行を同時に開始した場合,二つのタスクの処理が完了するまでの時間は何ミリ秒か。
ここで,タスクA,Bを開始した時点では,CPU,資源Rともに空いているものとする。
タスクA:CPU 10ミリ秒 → 資源R 50ミリ秒 → CPU 60ミリ秒/タスクB:CPU 40ミリ秒 → 資源R 50ミリ秒 → CPU 30ミリ秒
正答2
解説
正解は2です。
CPUは2台あるので、二つのタスクがCPUを奪い合うことはありません。
一方、資源Rは排他的に使うため、片方が使用中ならもう一方は待たされます。
時刻0から両タスクの動きを順にたどります。
【計算】
タスクAは、0~10ミリ秒にCPUを使います。
タスクAは、10~60ミリ秒に資源Rを使います。
タスクAは、60~120ミリ秒にCPUを使い、120ミリ秒で終了します。
タスクBは、0~40ミリ秒にCPUを使います。
タスクBは、40ミリ秒で資源Rを要求しますが、Aが60ミリ秒まで使用中なので20ミリ秒待ちます。
タスクBは、60~110ミリ秒に資源Rを使います。
タスクBは、110~140ミリ秒にCPUを使い、140ミリ秒で終了します。
110~120ミリ秒はAとBが同時にCPUを使いますが、CPUは2台あるので待ちは生じません。
両方の処理が完了するのは140ミリ秒です。
【選択肢別解説】
1:× 120ミリ秒はタスクAの完了時刻です。
タスクBはまだ処理中です。
2:○ タスクBが資源Rを20ミリ秒待つため、全体の完了は140ミリ秒になります。
3:× 150ミリ秒は、CPUが1台しかない場合の値です。
その場合、タスクBの最後のCPU処理はタスクAのCPU処理が終わる120ミリ秒まで待たされ、120~150ミリ秒になります。
実際はCPUが2台あるので、CPUの待ちは発生しません。
4:× 200ミリ秒は、タスクBがタスクAの完了(120ミリ秒)まで待ってから資源Rを使った場合の値です。
資源Rは60ミリ秒で解放されるので、そこまで待つ必要はありません。
【ポイント】
排他的な資源の待ちを考える問題では、時刻ごとに「誰が何を使っているか」を書き出すと確実です。
CPUの台数が十分にあるかどうかも、必ず確認します。