応用情報技術者 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: 「優先順位方式」とのみある場合はプリエンプティブを想定するのが一般的です。ただし設問で非プリエンプティブと明示されていればそちらを優先します。
関連キーワード: 優先度スケジューリング、プロセス状態遷移、実行可能状態、プリエンプション、待ち時間計算

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

