処理は全てCPU処理である三つのジョブA,B,Cがある。
それらを単独で実行したときの処理時間は,ジョブAは5分,ジョブBは10分,ジョブCは15分である。
この三つのジョブを次のスケジューリング方式に基づいて同時に開始すると,ジョブBが終了するまでの経過時間はおよそ何分か。
〔スケジューリング方式〕
(1) 一定時間(これをタイムクウォンタムと呼ぶ)内に処理が終了しなければ,処理を中断させて,待ち行列の最後尾へ回す。
(2) 待ち行列に並んだ順に実行する。
(3) タイムクウォンタムは,ジョブの処理時間に比べて十分に小さい値とする。
(4) ジョブの切替え時間は考慮しないものとする。
正答3
解説
正解は3です。
この問題は、タイムクウォンタムが十分小さいラウンドロビン方式で、3つのジョブを同時に開始したときのジョブBの終了時刻を求めるものです。
タイムクウォンタムが十分小さいと、実行中のジョブがCPUを均等に分け合っているとみなせます。
ジョブがn個あれば、各ジョブは実時間1分当たり1/n分ずつ処理が進みます。
【計算】
最初はA、B、Cの3つが実行中で、各ジョブは実時間1分当たり1/3分ずつ進みます。
処理時間が最も短いAの5分が終わるのは、5÷(1/3) = 15分後です。
この時点で、BとCもそれぞれ5分ずつ処理が進んでいます。
Bの残りは 10-5 = 5分です。
以降はBとCの2つで分け合うので、Bは実時間1分当たり1/2分ずつ進みます。
Bの残り5分が終わるのは、5÷(1/2) = 10分後です。
Bの終了は、開始から 15+10 = 25分後です。
【選択肢別解説】
1:× 15分はAが終了する時刻です。
この時点のBは、10分のうち5分しか処理されていません。
2:× 20分は、Aの終了後にBが単独でCPUを使うと考えた場合の値です。
実際にはCも実行中なので、BとCでCPUを分け合います。
3:○ 15分後にAが終わり、その後BとCで分け合う10分間でBが終わるので、25分後です。
4:× 30分は3つのジョブの処理時間の合計で、最後のCが終了する時刻です。
Bはそれより前に終わります。
【ポイント】
ラウンドロビンでは処理時間の短いジョブから順に終わり、全体の終了時刻は処理時間の合計になります。
各区間で「同時に実行中のジョブ数」を数えて実時間を割り出すのが解き方のコツです。