メインコンテンツへ
ソフトウェアコンピュータシステム

マルチプロセス環境でのプロセス状態遷移に関して、次のシナリオを考える。プロセスAは実行中(Running)にI/O要求を発行した。I/O完了後にスケジューラがプロセスBを実行中のまま維持した。このときプロセスAの状態遷移として正しいものはどれか。

ア.実行中 → 待機(Waiting)→ 実行可能(Ready)正解
イ.実行中 → 実行可能(Ready)→ 待機(Waiting)
ウ.実行中 → 停止(Terminated)→ 実行可能(Ready)
エ.実行中 → 実行可能(Ready)→ 実行中(Running)

解説

プロセスは「走る→待つ→準備できた→また走る」のサイクルを繰り返す。I/O待ちは「バスを待っている状態」。バスが来たら(I/O完了)乗れる準備ができる(Ready)!

なぜ ア が正解か

Step1: プロセスAはI/O要求を発行→CPUを手放し「待機(Waiting/Blocked)」状態へ。Step2: I/Oデバイスが処理完了→割り込みが発生→OSがプロセスAを「実行可能(Ready)」キューへ移動。Step3: スケジューラが現在プロセスBを実行中なのでプロセスAはReadyキューで待機。遷移: 実行中→待機→実行可能。

なぜ イ は間違いか

I/O要求でReadyに行くことはない。I/Oイベント待ちはWaiting状態に入る必要がある。ReadyはCPUを待つ状態であり、I/O待ちとは別。

なぜ ウ は間違いか

Terminatedは正常/異常終了した状態。I/O要求で終了するわけではなく、終了後にReadyに戻ることもない。

なぜ エ は間違いか

I/O要求によってReadyに遷移することはない。また直後にRunningにはなれない(プロセスBが実行中のため)。

出典: AI生成問題(学習用)