基本情報技術者 2013年 春期 午前(科目A) 問18
問題文
三つのタスクの優先度と、各タスクを単独で実行した場合のCPUと入出力装置(I/O)の動作順序と処理時間は、表のとおりである。三つのタスクが同時に実行可能状態になってから、全てのタスクの実行が終了するまでの、CPUの遊休時間は何ミリ秒か。ここで、I/Oは競合せず、OSのオーバヘッドは考慮しないものとする。また、表の()内の数字は処理時間を示す。

選択肢
ア:1
イ:2
ウ:3(正解)
エ:4
🔒 解説は解答すると表示されます
タスク優先度とCPU遊休時間【午前解説】
正解の理由
全タスク同時に実行可能状態でスタートすると、プリエンプティブな優先度(高→中→低)でCPUが割り当てられます。各タスクの動作は以下の通りであり、I/Oは独立で並列に処理されるため、I/O中のCPUの割当て状況を時系列で追えばCPUの遊休時間が求まります。計算の結果、CPUの遊休時間は合計で3msとなるため、正解は ウ(3)です。
解法ステップ
- 各タスクを時刻0に並べ、優先度高→中→低でCPUを割り当て開始。
- 各タスクの最初のCPUバースト終了時刻と、その後のI/O終了時刻を計算する。
- CPUが他のタスクに割り当てられない時間帯(全タスクがI/O中、かつまだ次のCPUバーストが到着していない時間)を合算する。
- 最後に全区間の遊休時間を合計して選択肢と比較する。
具体的な時刻表(ms単位):
- t=0–3: 高優先度CPU(3) 実行 → 高はt=3でI/O(5) に移行(完了t=8)
- t=3–5: 中優先度CPU(2) 実行 → 中はt=5でI/O(6) に移行(完了t=11)
- t=5–6: 低優先度CPU(1) 実行 → 低はt=6でI/O(5) に移行(完了t=11)
- t=6–8: CPUに実行可能タスクがなく遊休(2ms)
- t=8–10: 高の第2 CPU(2) 実行(高終了t=10)
- t=10–11: 再びCPUに実行可能タスクがなく遊休(1ms)
- t=11–13: 中の第2 CPU(2) 実行
- t=13–14: 低の第2 CPU(1) 実行(全タスク終了)
合計遊休時間 = 2 + 1 = 3 ms
(上記より正解は ウ)
選択肢別の誤答解説
- ア: 1 — おそらくt=6–8の2msのみを見て、t=10–11の1msを見落としたケース。I/O復帰のタイミングを最後まで追えていない。
- イ: 2 — 中央の2ms区間(t=6–8)だけを合算した誤り。最終の高の第2 CPU終了後の短時間の遊休を忘れがち。
- ウ: 3 — 正答。上の全時刻を正確に追跡した結果。
- エ: 4 — 過剰に遊休を見積もったケース(例えば、I/Oの並列性を誤って扱い、余分に待ち時間を加算した)。
よくある誤解
- 「I/Oが並列ならCPUは常に稼働する」と思い込む誤解:I/Oが並列でも、全タスクが同時にI/Oに入っている期間はCPUに実行するタスクがなくなり遊休が発生します。
- 「優先度順だけ考えていればよい」と考える誤解:優先度だけでなく各段の処理時間(I/Oの終了時刻)がCPUの空き時間を決めるため、時刻追跡が重要です。
- 「最後のI/Oが終わるまでCPUは働く」と誤認:I/O終了とCPUバーストの到着時刻のずれが遊休時間を生みます。
補足コラム
本問は「優先度スケジューリング」と「CPU/I/Oバーストの時刻追跡」を組み合わせた典型問題です。ポイントは「I/Oが競合しない=同時に複数のI/Oが進行する」ため、I/Oの終了タイミングがCPUの有無を決める点です。実務的には、CPU利用率を上げるためにI/OバウンドとCPUバウンドの混在を活用したスケジューリングが行われますが、試験では時刻を正確に追う練習が重要です。
簡単なPythonによるシミュレーション(参考)
tasks = {
'H': [(3,'CPU'),(5,'IO'),(2,'CPU')],
'M': [(2,'CPU'),(6,'IO'),(2,'CPU')],
'L': [(1,'CPU'),(5,'IO'),(1,'CPU')],
}
# 上の擬似データを基に時刻追跡すれば遊休3msを確認できます(省略)。
FAQ
Q1: I/Oが並列ならCPUは遊休にならないのでは?
A1: I/Oが並列でも「全タスクが同時にI/Oにいる期間」はCPUに実行可能なプロセスが存在せず遊休が発生します。
A1: I/Oが並列でも「全タスクが同時にI/Oにいる期間」はCPUに実行可能なプロセスが存在せず遊休が発生します。
Q2: プリエンプトがないスケジューリングならどうなる?
A2: 非プリエンプティブなら一度CPUを取ったタスクはI/Oに入るまで続行するため、順序が変わり遊休時間が異なる可能性があります。本問は優先度割当と同時開始が前提です。
A2: 非プリエンプティブなら一度CPUを取ったタスクはI/Oに入るまで続行するため、順序が変わり遊休時間が異なる可能性があります。本問は優先度割当と同時開始が前提です。
Q3: I/Oの競合があったら結果は変わる?
A3: はい。I/Oが競合し待ち列が発生するとI/Oの完了時刻が遅延し、CPUの遊休時間や完了順序が変わります。
A3: はい。I/Oが競合し待ち列が発生するとI/Oの完了時刻が遅延し、CPUの遊休時間や完了順序が変わります。
関連キーワード: プロセススケジューリング、プリエンプティブ優先度、CPU遊休時間、I/O待ち時間、スケジューリング解析

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

