FE EXAM

OSのプロセス状態遷移(実行・準備完了・待機)

プロセスは「新規→準備完了→実行→…→終了」という決まった状態を行き来します。誰が、いつ、なぜ状態を変えるのかを可視化します。

STATE MACHINE
準備完了
実行
待機
現在のシナリオ
基本のライフサイクル
生成→準備完了→実行→終了 の最もシンプルな流れ。これが全プロセスの基本パターン。
現在の状態
新規
直前のイベント
-
シナリオ
ステップ1 / 4
STEP 1/4プロセスが生成されるプロセス P1 が生成された。OS はメモリ確保や PCB 作成を行うが、まだ実行可能ではない(新規状態)。
解説

📌
プロセス状態遷移とは

準備完了dispatch実行I/O要求待機

プロセスは、生まれてから死ぬまで決まった状態(state)を行き来します。これをプロセス状態遷移と呼びます。基本は 準備完了 / 実行 / 待機 の3状態モデル、拡張版で 新規 / 終了 を加えた5状態モデルです。

身近な例えでは、「コールセンターのオペレーター」に似ています。電話が掛かってくるまで待機列で待ち(準備完了)、自分の番が来て応対中(実行)、お客様の保留中(待機)、対応終了(終了)── と決まった流れがあります。スーパーバイザー(OS)が誰を応対担当に回すか決め、対応時間が長すぎると交代させたりします。

上のツールで「基本のライフサイクル」を ▶ 再生すると、プロセスが状態を順に渡り歩く流れを観察できます。

📌
3つの基本状態 — 準備完了・実行・待機

プロセスがとる主要な状態は 3つ。これがプロセス状態遷移の基本骨格です。


準備完了(Ready):CPU を待っている状態。実行可能だが、まだ CPU が回ってきていない
実行(Running):CPU で実際に命令を実行中。同時に1つだけがこの状態(1コアの場合)
待機(Waiting / Blocked):I/O 完了や他プロセスの応答などを待っている。CPU は使わない

この3つの違いは「CPU を使えるか / 使っているか / 待ちで使えないか」で区別できます。特に準備完了と待機の違いが重要で、準備完了は「いつでも実行できるけど順番待ち」、待機は「外部要因が解決しないと実行を再開できない」です。

📌
4つの主要な遷移イベント

イベント遷移誰が起こす?
ディスパッチ準備完了 → 実行スケジューラ
タイムアウト実行 → 準備完了タイマー割り込み
I/O 要求実行 → 待機プロセス自身
I/O 完了待機 → 準備完了装置からの割り込み

状態遷移はイベントで引き起こされます。プロセス自身が起こすもの、OS のタイマーが起こすもの、外部装置が起こすものに分かれます。

特に重要なのは:
ディスパッチ:「準備完了 → 実行」を引き起こす。スケジューラの仕事
タイムアウト(プリエンプション):「実行 → 準備完了」。タイマー割り込みで強制的に CPU を取り上げる
ブロック(I/O 要求):「実行 → 待機」。プロセス自身が外部処理を要求した瞬間に発生
ウェイクアップ(I/O 完了):「待機 → 準備完了」。外部装置から「処理終わったよ」の通知を受けて目を覚ます

📌
タイムアウトとプリエンプション

P1 実行タイマー作動⏱ 時間切れP1 準備完了順番待ち

実行中のプロセスから OS が強制的に CPU を取り上げることをプリエンプション(preemption)と呼びます。これによって 1つのプロセスが CPU を占有し続けないように制御しています。

仕組み:
・OS はタイマー割り込みを一定間隔(例: 10ms)で発生させる
・割り込みを受けた OS は「もうこのプロセスのタイムスライスは切れた」と判断
・プロセスを準備完了状態に戻し、別のプロセスにディスパッチ

このおかげで、複数のプロセスがあたかも同時に動いているように見えるのです(実際は超高速で交代しているだけ)。上のツール「タイムアウト」シナリオで、P1 と P2 が交互に CPU を使う様子を確認できます。

📌
なぜ「待機」状態が必要か

「実行」と「準備完了」だけでは足りません。プロセスがディスクからファイルを読んだり、ネットワークから応答を待ったりするとき、CPU は数百万〜数十億サイクル分も待たされます。その間ずっと CPU を独占していたら大きな無駄です。

そこで OS は次のように動きます:
・プロセスが I/O 要求をしたら待機状態に移し、CPU を取り上げる
・空いた CPU を準備完了の別プロセスに渡す
・I/O が完了したら、待機中のプロセスを準備完了状態に戻す(wakeup)
・また順番が来たら実行を再開

この仕組みのおかげで、複数プロセスを抱えていても CPU を遊ばせないマルチタスクが実現できます。上のツール「I/O 待ちのフロー」を ▶ 再生すると、P1 が待つ間に P2 が CPU を使う様子が確認できます。

📌
5状態モデル — 新規と終了を加えた拡張版

新規準備完了実行待機終了

3状態モデルを拡張し、プロセスの誕生と終了を明示的に扱うのが5状態モデルです。基本は3状態モデルですが、5状態モデルも合わせて理解しておくとよいでしょう。


新規(New):プロセス生成中。PCB は作成中だがまだスケジュールには参加しない
終了(Terminated):実行が終わり、メモリ等の片付け中

3状態モデルで覚えてから、5状態は「新規が前に追加、終了が後ろに追加」と覚えれば十分。さらに「中断(suspended)」を加えた7状態モデルもあります。

📌
各遷移はなぜ起きるのか — 理由を深掘り

準備完了dispatch実行中← スケジューラが選ぶ準備完了timeout実行中← タイマー割り込み待機I/O要求実行中← プロセス自身が要求準備完了へ← 外部装置が完了通知を送る

状態が変わるたびに必ず理由(イベント)があります。「誰が・なぜ」を理解すると、状態遷移図が暗記ではなく理屈で分かるようになります。

準備完了 → 実行(dispatch):OSのスケジューラ(=プロセスに番を割り振る係)が準備完了の中から1つ選んでCPUを渡します。次に実行するプロセスをどう選ぶかはスケジューリングアルゴリズム(到着順・優先度順など)で決まります。

実行 → 準備完了(timeout):OSは一定時間ごとにタイマー割り込み(=強制的な中断信号)を発生させます。これでプロセスが長く居座るのを防ぎ、別のプロセスに順番を回します。これがプリエンプション(強制的な交代)の仕組みです。

実行 → 待機(I/O要求):プロセス自身がディスク読み込みやネットワーク応答待ちをOSに依頼した瞬間、OSはそのプロセスを待機状態に移してCPUを別のプロセスに渡します。プロセスが「自分から止まる」遷移です。
待機 → 準備完了(I/O完了):外部装置が処理を終えると割り込み(=「終わったよ」の信号)でOSに通知します。OSが待機中のプロセスを準備完了キューに戻します。

📌
複数プロセスが同時に動いて見える理由

時間 →P1P2切替切替切替切替実際は高速で交代しているが、見かけ上は同時に見える

1つのCPUコアは、ある瞬間に実行できるのは1つのプロセスだけです。それなのに「複数のアプリが同時に動いている」ように見えるのはなぜでしょうか。

答えは超高速の切り替えにあります。OSのスケジューラは数ミリ秒(1ミリ秒=0.001秒)単位でプロセスを切り替え続けます。人間の目にはその切り替えが見えないので、まるで同時に動いているように感じます。これをマルチタスク(複数の仕事を並行してこなす仕組み)と呼びます。

上の図では、P1とP2がCPUを交互に使っている様子を表しています。それぞれが「実行」→「準備完了(待ち)」→「実行」を繰り返し、全体としてどちらも少しずつ進んでいます。状態遷移図を理解すると、この「なぜ同時に動いて見えるのか」というマルチタスクの仕組みが自然に分かるようになります。

練習問題

🎯
基本情報技術者 練習問題

Q1.プロセスが I/O 要求を行うとどの状態へ遷移するか。
A.実行
B.準備完了
C.待機
D.終了
Q2.「準備完了 → 実行」の遷移を引き起こすイベントはどれか。
A.プリエンプション
B.ディスパッチ
C.ブロック
D.ウェイクアップ
Q3.プリエンプション(タイムアウト)による状態遷移はどれか。
A.実行 → 準備完了
B.実行 → 待機
C.待機 → 準備完了
D.準備完了 → 実行

関連コンテンツ