応用情報技術者 2017年 秋期 午前2 問15
問題文
ジョブの多重度が1で、到着順にジョブが実行されるシステムにおいて、表に示す状態のジョブA〜Cを処理するとき、ジョブCが到着してから実行が終了するまでのターンアラウンドタイムは何秒か。ここで、OSのオーバヘッドは考慮しないものとする。

選択肢
ア:11(正解)
イ:12
ウ:13
エ:14
🔒 解説は解答すると表示されます
到着順処理のターンアラウンド【午前2解説】
正解の理由
到着順(FCFS)で単一プロセッサ、OSオーバヘッド無視の場合、各ジョブは先に到着したジョブの処理が完了してから開始します。本問ではジョブCの到着時刻が3秒で、Cの実行が完了する時刻は14秒です(以下で時刻の開始・終了を明確に示します)。したがってターンアラウンドタイムは完了時刻から到着時刻を引いた 秒であり、選択肢アの11秒が正しい結論です。
解法ステップ
- 各ジョブの開始時刻・終了時刻を順に決める(到着順=到着が早い順に実行)。
- ジョブの開始時刻は「前のジョブの終了時刻」と「そのジョブの到着時刻」の大きい方。
- ジョブCのターンアラウンドタイムは 。
具体的な時刻計算(開始時刻と終了時刻を明示):
- ジョブA:到着0秒、処理時間5秒 → 開始0秒、終了5秒(0 ≤ t < 5 を処理)
- ジョブB:到着2秒、処理時間6秒 → Aが5秒で終わるのでBは5秒に開始、終了は5 + 6 = 11秒(5 ≤ t < 11 を処理)
- ジョブC:到着3秒、処理時間3秒 → Bが11秒で終わるのでCは11秒に開始、終了は11 + 3 = 14秒(11 ≤ t < 14 を処理)
よってジョブCのターンアラウンドタイムは 秒。
(上の各区間は開始時刻と終了時刻を明確に示しており、「5秒から6秒間」などの曖昧な表現は使っていません。)
選択肢別の誤答解説
- ア: 11秒 — 正解。上記の通り、Cの完了時刻14秒と到着3秒の差が11秒になるため正しい。
- イ(12秒): 多くは「離散的に秒を数える際のオフバイワン誤り」に由来します(例:処理時間の加算で1秒余分に数えてしまい、完了時刻を15秒とし とする誤り)。連続時間として開始・終了を明確に扱えば避けられます。
- ウ(13秒): 例えばBの処理終了を12秒と誤認(Bの開始時刻を6秒と誤解)し、Cの終了を15秒とするような開始時刻取り違えで生じる誤りです。到着・開始の関係を正確に追うことで防げます。
- エ(14秒): 「ターンアラウンドタイム」を「完了時刻そのもの」と誤って扱ったケース(完了時刻14秒をそのまま解答)による誤りです。定義は「完了時刻 − 到着時刻」である点を忘れないでください。
よくある誤解
- 到着時刻と開始時刻の混同:到着していてもCPUが使われている間は開始しないため、開始時刻は「前ジョブの終了時刻」を優先する点を見落としやすい。
- 完了時刻とターンアラウンドタイムの取り違え:完了時刻(今回14秒)とターンアラウンドタイム(完了時刻−到着時刻=11秒)を混同する受験者がいる。
- 秒の数え方(離散 vs 連続):0秒開始で処理時間5秒は「0から5までで終了=終了時刻5秒」であり、「5秒から5秒間」など誤解しないこと。
補足コラム
- ターンアラウンドタイム(Turnaround time)は一般にジョブ単位での「応答性」を表す指標で、待ち時間(キューで待った時間)と実行時間を含みます。式としては 、または 。
- 本問のような非先占(non-preemptive)FCFSでは到着順が実行順に直結します。先占(preemptive)スケジューリングや優先度付きだと計算方法が変わります。
- 小さなスクリプトで時刻計算を再現して確認するのも有効です(参考例)。
参考のPythonシミュレーション(単純化):
jobs = [('A',0,5), ('B',2,6), ('C',3,3)]
time = 0
results = {}
for name, arrival, duration in jobs:
start = max(time, arrival)
finish = start + duration
results[name] = (start, finish)
time = finish
# 結果表示
for n,(s,f) in results.items():
print(n, "start", s, "finish", f, "turnaround", f - dict((j[0], j[1]) for j in jobs)[n])
(上スニペットは学習確認用。入出力の細部は用途に応じて調整してください。)
FAQ
Q. 到着時刻が同じジョブが複数ある場合はどう扱うか?
A. 問題文で特別なルールがない限り通常は表やリストの順序(与えられた順)に従うか、問題ごとに明示された同順位の扱いに従います。FCFSでは「先に記載されているもの」を先に実行するのが一般的です。
A. 問題文で特別なルールがない限り通常は表やリストの順序(与えられた順)に従うか、問題ごとに明示された同順位の扱いに従います。FCFSでは「先に記載されているもの」を先に実行するのが一般的です。
Q. 「処理時間5秒」は開始時刻を含むのか?終了時刻を含むのか?
A. 連続時間で扱えば「開始時刻 + 処理時間 = 終了時刻」です。たとえば開始0秒で処理時間5秒なら終了は5秒です(0〜5秒の期間を利用)。整数秒の数え方で誤差が出やすいので、開始・終了の時刻を明示して計算してください。
A. 連続時間で扱えば「開始時刻 + 処理時間 = 終了時刻」です。たとえば開始0秒で処理時間5秒なら終了は5秒です(0〜5秒の期間を利用)。整数秒の数え方で誤差が出やすいので、開始・終了の時刻を明示して計算してください。
関連キーワード: FCFS, ターンアラウンドタイム, 待ち時間, 到着時刻, 非先占スケジューリング, 完了時刻, 処理順序

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

