応用情報技術者 2018年 春期 午前2 問17
問題文
三つのタスク A〜Cの優先度と各タスクを単独で実行した場合のCPUと入出力(I/O)装置の動作順序と処理時間は、表のとおりである。優先順位方式のタスクスケジューリングを行う OSの下で、三つのタスクが同時に実行可能状態になってから、タスク Cが終了するまでに、タスク Cが実行可能状態にある時間は延べ何ミリ秒か。ここで、I/O は競合せず、OSのオーバヘッドは考慮しないものとする。また、表中の( )内の数字は処理時間を示すものとする。

選択肢
ア:6
イ:8
ウ:10(正解)
エ:12
🔒 解説は解答すると表示されます
実行可能状態の合計時間【午前2解説】
正解の理由
本問で求める「実行可能状態」は、CPUを実行中ではなく「CPUを待っている(実行可能〈待ち〉)状態」を指します。I/O中はブロック状態であり実行可能状態に含めません。タスクCが実行可能である区間は、最初に他タスクのCPU実行を待っている 0–4ms と、後半に高・中優先タスクが処理を終えるのを待っている 8–14ms の合計で、ms となるため選択肢の ウ が正解です。
解法ステップ
- 前提確認:優先度方式(プリエンプティブ)であり、優先度が高いタスクがCPUを奪う。I/Oはブロック(実行不可)で競合しない。
- 初期状態(時刻0):A(高)、B(中)、C(低)が同時に実行可能(ready)状態。
- 時系列でスケジューリングを追う:
- 0–2ms:A が CPU(C は ready、B も ready)。→ C は実行可能(待ち)にある区間:0–2
- 2–4ms:A が I/O に入り、B が CPU(C は引き続き ready)。→ C の実行可能:2–4
- 4–6ms:B が I/O に入り、C が CPU(この間は C は実行中であり「CPUを待っている実行可能(待ち)」には含めない)
- 6–8ms:C が I/O(ブロック) → C は実行可能でない
- 8ms:A と B が I/Oから戻り ready となる。優先度により A が先に CPU を得る。
- 8–12ms:A が CPU(C は ready)。→ C の実行可能:8–12
- 12–14ms:A 完了後、B が CPU(C は ready)。→ C の実行可能:12–14
- 14–17ms:C が CPU を得て残りを実行(実行中のため「待ち」には含めない)
- C の実行可能(待ち)時間の合計 = (0–4) の 4ms + (8–14) の 6ms = 10ms。
式で表すと: (ms)。
選択肢別の誤答解説
- ア: 6
8–14 の 6ms のみを数え、初期の 0–4ms を見落としてしまった場合に出る誤答です。初期の 0–4ms も C は CPU を待っている実行可能状態です。 - イ: 8
例えば 0–4 の 4ms と 8–12 の 4ms(A の実行中のみカウント)を合わせた解釈や、実行中の一部を誤って含めた計算で出ることがあります。正しくは 8–14 の全 6ms が待ち時間に該当します。 - ウ: 10
正しい。C の「CPUを待っている」時間だけ(0–4 と 8–14)を合算しています。 - エ: 12
0–4 の 4ms に加え、8–17 の 9ms(C が I/O後から終了までを全て含める)等、I/O中や実行中を実行可能に含めてしまう誤りで生じます。I/O中(6–8)はブロックであり、また実行中(4–6, 14–17)は「CPUを待っている」状態ではない点に注意。
よくある誤解
- I/O待ちを実行可能状態に含める誤り:I/O 実行中はブロック状態であって、ready(実行可能)ではありません。今回の 6–8ms は含めないこと。
- 実行中の時間も「実行可能」として数える誤り:問題文が求める「実行可能状態」は CPU を待っている状態(ready/waiting)を指す設問の読みが多いです。実行中は除外する場合があるため、設問文の用語解釈を確かめること。
- 非プリエンプティブとして扱う誤り:優先度方式と書かれている場合、通常プリエンプティブを想定するため、高優先度が到着すれば中断されます。これを誤ると時間分配が変わります。
補足コラム
プロセス/タスクの状態分類は問題で微妙に使い分けられます。一般に:
- 実行中(running):CPU を占有している状態
- 実行可能(ready / 実行可能状態〈待ち〉):CPU を得るのを待っている状態(これが本問でカウントする対象)
- ブロック(blocked / waiting for I/O):I/O 等で動作せず CPU を要求していない状態
試験では「実行可能状態」を「CPU を待っている状態」と解釈する問題が多く、実行中は含めないことが問題文の意図である場合があるので、設問の語句を正確に読む習慣を付けましょう。なおプリエンプティブか否かが明記されていないときは、優先度方式の文脈でプリエンプティブを想定するのが標準的です。
FAQ
- Q: 実行中は実行可能に含まれますか?
A: 本問では「実行可能状態」は CPU を待っている状態を指し、実行中は含めません。問題文の定義に従って解釈してください。 - Q: I/O 待ちが重なった場合はどう扱いますか?
A: 本問は「I/O は競合しない」とあるため各タスクの I/O は独立で、I/O 中はブロックとして扱います。競合がある場合は別途 I/O スケジューリングを考慮します。 - Q: プリエンプションが明示されていないときは?
A: 「優先順位方式」とのみある場合はプリエンプティブを想定するのが一般的です。ただし設問で非プリエンプティブと明示されていればそちらを優先します。
関連キーワード: 優先度スケジューリング、プロセス状態遷移、実行可能状態、プリエンプション、待ち時間計算

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

