実行可能状態【ready state】

現代のオペレーティングシステム(OS)は複数のプロセスやスレッドを並行して動かす「マルチタスク」(multitasking)機能を持つ。しかし、物理的なCPUコアの数は有限であるため、すべてのプロセスが同時にCPUを使えるわけではない。
そこで、OSの「タスクスケジューラ」(scheduler)と呼ばれる調整機能が各プロセスにCPUを順番に割り当てることで、見かけ上の並行処理を実現している。この仕組みの中で、各プロセスは常に「実行状態」(running state)、「実行可能状態」(ready state)、「待機状態」(blocked state/waiting state)の3つのいずれかの状態にある。
実行可能状態とは、プロセスが処理を続けるために必要なデータやリソースはすでに揃っており、あとはCPUが空くのを待っているだけの状態である。スケジューラによってCPUが割り当てられた瞬間に「実行状態」へ遷移し、処理を再開する。CPUの割り当て時間が終了すると再び実行可能状態に戻り、次の順番を待つ。この遷移は1秒間に数十~数千回の頻度で繰り返される。
一方、「待機状態」はCPUの割り当てとは無関係に処理を進められない状態で、ディスクI/Oの完了やネットワークからのデータ受信、タイマーの満了、他プロセスからのシグナルなどを待っている。待機状態のプロセスはスケジューラの割り当て対象から外され、条件が満たされると実行可能状態へ遷移する。
スケジューラは実行可能状態にあるプロセス群を「実行キュー」(run queue)で管理し、優先度、待機時間、CPUの使用履歴などをもとに次に実行するプロセスを選択する。Linuxカーネルで採用されている「CFS」(Completely Fair Scheduler)は、各プロセスの仮想実行時間を追跡して公平にCPU時間を配分する設計になっている。リアルタイムOSでは優先度の高いプロセスが実行可能状態になった瞬間に現在の実行中プロセスを強制的に切り替える「プリエンプション」が厳密に管理される。