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