プロセスの状態(実行可能状態・実行状態・待ち状態)(process state)
CPUをもらえる順番待ちが実行可能状態、もらっている最中が実行状態、入出力の終わりを待っているのが待ち状態。
もう少し詳しい説明
CPUは、一度に1つの処理しか進められません。それでも何十個ものプログラムが同時に動いているように見えるのは、OSが短い時間で切り替えているからです。
切り替えるには、いま走っているのはどれで、順番を待っているのはどれかを区別する必要があります。この区別がプロセスの状態です。
| 状態 | どんなありさまか |
|---|---|
| 実行可能状態(ready) | いつでも動ける。CPUの順番を待っている |
| 実行状態(run) | いまCPUをもらって動いている |
| 待ち状態(wait) | 動けない。入出力やほかの資源の終わりを待っている |
実行可能状態と待ち状態の違い
どちらも「待っている」ので混ざりますが、待っているものが違います。
- 実行可能状態が待っているのは、CPUの順番です。動く用意はできていて、渡されればすぐ動きます。
- 待ち状態が待っているのは、CPU以外のものです。ディスクから読んだデータや、人が押すキーです。いまCPUを渡されても動けません。
スーパーのレジにたとえます。レジがCPUにあたります。
- 実行可能状態は、買うものをかごに入れ終えて、レジに並んでいる客です。自分の番が来れば、すぐ会計できます。
- 待ち状態は、まだ売り場で商品を探している客です。レジが空いていても、探している物が見つかるまで会計できません。
探し物が見つかった客は、レジの列の最後尾に並びます。見つかった瞬間にレジへ通されるわけではありません。
状態が変わる4つのきっかけ
| 向き | きっかけ | 呼び名 |
|---|---|---|
| 実行可能 → 実行 | OSがそのプロセスを選んだ | ディスパッチ |
| 実行 → 実行可能 | 割り当てられた時間を使い切った | タイムアウト(プリエンプション) |
| 実行 → 待ち | 入出力などを頼んだ | — |
| 待ち → 実行可能 | 頼んだものが終わった | — |
実行可能 → 実行を選ぶのは、OSの中のディスパッチャです。どれを選ぶかの決め方がスケジューリング方式で、到着順、処理時間の短い順、優先度順などがあります。
待ち状態から実行状態へは移らない
試験でいちばん狙われるのがここです。
入出力が終わったプロセスは、実行状態ではなく実行可能状態へ移ります。
入出力が終わったことと、CPUが空いていることは別の話です。終わった瞬間にほかのプロセスが走っていれば、やはり列に並びます。
状態遷移図に、待ちから実行へ向かう矢印は引かれません。 選択肢に「待ち状態から実行状態へ移る」と書いてあれば、それが誤りです。
時間を使い切ると、追い出される
実行状態のプロセスは、自分から譲らなくても外に出されます。
OSはプロセスにCPUを渡すとき、使える時間をあらかじめ決めて渡します。この持ち時間をタイムクウォンタム(タイムスライス)と呼びます。使い切ると割込みが入り、実行可能状態へ戻されます。
この取り上げを、プリエンプションと呼びます。 取り上げるしくみを持つものがプリエンプティブ方式、プロセスが自分から譲るまで待つものがノンプリエンプティブ方式です。
取り上げがないと、1つのプロセスが長い計算を始めた時点で、ほかが全部止まります。 時間で区切るのは、そうならないための決まりです。
休止状態と終了状態
3つの状態に、2つを足した図で出ることもあります。
休止状態
主記憶(いま使うプログラムとデータを置いておく記憶装置)が足りなくなると、OSはプロセスを丸ごと補助記憶へ追い出します。追い出されているあいだが休止状態(サスペンド)です。
| 言葉 | 向き |
|---|---|
| スワップアウト | 主記憶から補助記憶へ追い出す |
| スワップイン | 補助記憶から主記憶へ連れ戻す |
ロールアウト・ロールインという呼び方も、同じ動きを指します。
追い出されても、プロセスは消えていません。続きをやるための情報は保存されていて、連れ戻されたところから再開します。
仮想記憶のページ単位の入れ替えと混ざりやすいところです。スワッピング(プロセスを丸ごと補助記憶へ出し入れすること)はプロセス丸ごと、ページングはページ単位という違いがあります。
終了状態
処理が終わったプロセスが入る状態です。終わったことは記録されますが、使っていた資源は返されています。
試験ではこう出る
科目A(旧・午前)では、状態遷移図を示して、矢印のどれかを答えさせる形がよく出ます。
出やすい聞き方は、次のとおりです。
| 聞かれ方 | 答え |
|---|---|
| 入出力が終わったプロセスはどの状態へ移るか | 実行可能状態 |
| 実行可能状態から実行状態へ移すことを何と呼ぶか | ディスパッチ |
| 実行状態から実行可能状態へ戻るきっかけは何か | 持ち時間を使い切った(割込み) |
ディスパッチとスケジューリングの区別も問われます。どれを選ぶかを決めるのがスケジューリング、選んだものに実際にCPUを渡すのがディスパッチです。
応用情報では、プリエンプティブかノンプリエンプティブかで、終わる順番がどう変わるかを数えさせる問題として出ます。到着時刻と処理時間の表を渡され、処理時間の短い順などの方式で並べ替えることになります。
関連する用語
- プロセスとスレッド
- 状態を持つ単位そのもの。スレッドにも同じ3つの状態がある
- 割込み
- 実行状態から外へ出されるきっかけになるしくみ
- セマフォ
- 資源が空くまで待たせる道具。待ち状態を作る側
- 仮想記憶
- 主記憶が足りないとき、ページ単位で入れ替えるしくみ
- デッドロック
- 互いに待ち合って、どのプロセスも待ち状態から出られなくなった状態
ミニクイズ
入出力の完了を待っていたプロセスが、その入出力を終えたときに移る状態はどれか。
正解は 4番:実行可能状態
入出力が終わると、待っていた理由が消えるので待ち状態からは出ます。ただし、そこで移るのは実行可能状態です。CPUは1つの処理しか同時に進められないので、ほかに動いているプロセスがいれば、順番待ちの列に並ぶことになります。実行状態へ入るのは、OSの中のディスパッチャがそのプロセスを選んだときです。待ち状態から実行状態へ直に移る矢印は、状態遷移図には引かれません。休止状態は、主記憶から補助記憶へ追い出されている状態で、入出力の完了とは関係がありません。
この分野をまとめて解く → システム構成要素とソフトウェアのミニテスト(全28問)
最終更新:2026-10-20