ITパスポート 2010年 春期 問76
問題文
OSが、ジョブを到着順に、前のジョブが終わってから次のジョブを処理する場合について考える。ジョブの到着時刻と処理時間が表のとおりであるとき、ジョブ4は、到着してからその処理が終了するまでに何秒を要するか。ここで、四つのジョブ以外の処理に要する時間は無視できるものとする。表の到着時刻は、ジョブ1が到着した時刻を開始時刻とする。

選択肢
ア:5
イ:8
ウ:9(正解)
エ:12
🔒 解説は解答すると表示されます
ジョブの到着順(非プリエンプティブ)処理での所要時間計算【ITパスポート 解説】
正解の理由
問題では「到着順に、前のジョブが終わってから次のジョブを処理する」とあります。これは到着順(FCFS:First-Come-First-Served)で、処理中のジョブを中断しない(ノンプリエンプティブ)方式です。ジョブ4は到着時刻が7秒、処理時間が5秒なので、ジョブ4が実際に開始される時刻はそれより前に到着したジョブの終了時刻に依存します。前のジョブの終了時刻を順に計算すると、ジョブ4の完了時刻は16秒、到着時刻7秒からの経過は 秒となります。したがって正しい選択肢は ウ(9秒)です。
解法ステップ
- 各ジョブの到着時刻と処理時間を確認する。
- ジョブ1:到着0秒、処理3秒
- ジョブ2:到着4秒、処理4秒
- ジョブ3:到着5秒、処理3秒
- ジョブ4:到着7秒、処理5秒
- 到着順で順に実行する。現在の時刻(CPUが空く時刻)を追う。
- ジョブ1 は時刻0に開始、3秒で終了 → 終了時刻=3秒
- 次にジョブ2は到着が4秒。時刻3→4の間はCPUは空く(アイドル)。ジョブ2は到着時刻4秒に開始、処理4秒で終了 → 終了時刻=8秒
- ジョブ3は5秒に到着しているが、ジョブ2が8秒まで動作しているため8秒に開始、処理3秒で終了 → 終了時刻=11秒
- ジョブ4は7秒に到着しているが、ジョブ3の終了(11秒)まで待ってから開始、処理5秒で終了 → 終了時刻=16秒
- ジョブ4の所要時間(到着から完了まで)を計算する。
- 到着7秒、完了16秒 → 秒
選択肢別の誤答解説
- ア: 5
- ジョブ4の「処理時間」だけ(5秒)を答えてしまったパターン。設問は「到着してから完了するまで」の時間(到着からの経過)を問っているため、待ち時間を無視すると誤りです。
- イ: 8
- おそらく「到着時刻7秒 + 処理1秒」など誤った計算や、前のジョブの終了時刻を短く見積もった結果です。実際はジョブ4は11秒開始→16秒終了なので到着からの時間は9秒になります。
- ウ: 9
- 正解。上記の通り、到着7秒から完了16秒までで 秒です。
- エ: 12
- 前のジョブの待ち時間を二重に数えた、またはアイドル時間を不適切に加算した可能性があります。正しい順序で終了時刻を求めると12秒にはなりません。
よくある誤解
- 「CPUは常に忙しい」と思い込むこと
- ジョブ1終了(3秒)からジョブ2到着(4秒)までのように、CPUがアイドルになる時間が生じることがあります。アイドル時間を無視すると開始時刻の計算を誤ります。
- 到着順=到着時間の単純な足し算で済むと考えること
- 各ジョブの開始時刻は「そのジョブの到着時刻」と「前のジョブの終了時刻」のどちらか遅い方(max)になります。これを忘れると間違います。
補足コラム
- 用語メモ
- ジョブ:処理すべき仕事(タスク)。ここではプログラムや処理要求を指します。
- 到着時刻:ジョブがスケジューラに現れる時刻。
- 処理時間(サービス時間):そのジョブを終わらせるのに必要な実行時間。
- ターンアラウンドタイム(到着から完了までの時間):今回問われている量。
- FCFS(First-Come-First-Served:到着順): 到着順に処理する方式。ノンプリエンプティブ(実行中のジョブは中断されない)であることが多いです。
- 一般式(ジョブiの開始時刻)
- start_i = max(arrival_i, finish_{i-1})
- finish_i = start_i + service_i
- 到着から完了まで = finish_i - arrival_i
簡単なシミュレーション(参考、Python)
jobs = [(0,3),(4,4),(5,3),(7,5)] # (arrival, service)
finish = 0
for idx,(a,s) in enumerate(jobs, start=1):
start = max(a, finish)
finish = start + s
print(f"Job{idx}: arrival={a}, start={start}, finish={finish}, turnaround={finish-a}")
# Job4 の turnaround は 9
FAQ
Q1. ジョブが同じ時刻に複数到着したらどうなる?
A1. FCFSでは到着順の内訳(例えばキューに入った順)で処理されます。問題文で明示がないときは「どちらも同時に到着したが順序は不問」として、どちらが先でも影響ない場合もあります。
A1. FCFSでは到着順の内訳(例えばキューに入った順)で処理されます。問題文で明示がないときは「どちらも同時に到着したが順序は不問」として、どちらが先でも影響ない場合もあります。
Q2. プリエンプティブ(割り込みで中断する)方式なら結果は変わりますか?
A2. はい。プリエンプティブ方式では短いジョブが割り込んで先に終わることがあり、ジョブ4の開始・完了時刻が変わる可能性があります。今回の問題は非プリエンプティブ(中断しない)と明示されています。
A2. はい。プリエンプティブ方式では短いジョブが割り込んで先に終わることがあり、ジョブ4の開始・完了時刻が変わる可能性があります。今回の問題は非プリエンプティブ(中断しない)と明示されています。
Q3. 「到着してから処理が終了するまで」は別名で何と言いますか?
A3. ターンアラウンドタイム(turnaround time、到着応答時間)と呼びます。
A3. ターンアラウンドタイム(turnaround time、到着応答時間)と呼びます。
関連キーワード: スケジューリング, FCFS(First-Come-First-Served), 到着時刻, 処理時間, ターンアラウンドタイム, 待ち時間, ノンプリエンプティブ, CPUスケジューラ

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

