メインコンテンツへ
ソフトウェアプロセス管理

プロセスの状態遷移において、「実行可能状態(Ready状態)」から「実行状態(Running状態)」への遷移が起きる原因として適切なものはどれか。

ア.プロセスがI/O待ちになったため、CPUを手放した。
イ.OSスケジューラにCPUを割り当てられた(ディスパッチされた)。正解
ウ.要求していたI/Oが完了し、実行再開の準備が整った。
エ.タイムスライスが切れ、他のプロセスにCPUを譲った。

解説

プロセスの状態遷移は「待合室→診察室→検査待ち」のような病院の流れ。Ready状態は「名前を呼ばれ待ち」で、RunningはCPUという「診察台」に乗ったときです。

なぜ イ が正解か

プロセスの主な状態と遷移: ① 生成(New)→ 実行可能(Ready): プロセス生成完了 ② 実行可能(Ready)→ 実行(Running): スケジューラがCPUを割り当て(ディスパッチ)← ここ! ③ 実行(Running)→ 実行可能(Ready): タイムスライス切れ(プリエンプション) ④ 実行(Running)→ 待機(Waiting/Blocked): I/O要求や資源待ち ⑤ 待機(Waiting)→ 実行可能(Ready): I/O完了や資源解放 よってReady→Runningは「スケジューラによるCPU割り当て(ディスパッチ)」が正解です。

なぜ ア は間違いか

I/O待ちになりCPUを手放す遷移は「Running→Waiting(Blocked)」です。Ready状態のプロセスはすでにCPUを持っていないので「手放す」という動作自体が発生しません。

なぜ ウ は間違いか

I/Oが完了して実行再開の準備が整う遷移は「Waiting→Ready」です。I/O完了はReadyに戻るトリガーであり、直接Runningには戻りません(次のスケジューリングを待ちます)。

なぜ エ は間違いか

タイムスライスが切れてCPUを譲る遷移は「Running→Ready(プリエンプション)」です。これはReadyからRunningへの方向と逆の遷移です。

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