現代のコンピュータでは、多くのプロセスが同時に実行されます。アクティブなプロセスは、実行キュー( runqueue)と呼ばれる配列に配置されます。実行キューには各プロセスの優先度値が含まれる場合があり、スケジューラはこれを使用して次にどのプロセスを実行するかを決定します。各プログラムが公平にリソースを分配できるように、各プログラムは一定期間 (クォンタム) 実行された後、一時停止されて実行キューに戻されます。あるプログラムを停止して別のプログラムを実行させると、実行キュー内で優先度が最も高いプログラムが実行できるようになります。
プロセスは、スリープを要求した場合、リソースが使用可能になるのを待機している場合、または終了した場合 にも実行キューから削除されます。
Linuxオペレーティング システム (カーネル 2.6.23 より前)では、システム内の各 CPU に実行キューが与えられ、アクティブなプロセスと期限切れのプロセスの両方の配列が保持されます。各配列には、二重リンク リストへのポインタが 140 個 (各優先度レベルに 1 つ) 含まれており、これらのポインタは指定された優先度のすべてのプロセスを参照します。スケジューラは、最も優先度の高いアクティブな配列から次のプロセスを選択します。プロセスのクォンタムが期限切れになると、そのプロセスは優先度のある期限切れ配列に配置されます。アクティブな配列にプロセスがなくなると、スケジューラはアクティブな配列と期限切れ配列を入れ替えます。これがO (1) スケジューラという名前につながっています。
UNIXまたはLinuxでは、sarコマンドを使用して実行キューを確認します。
UNIXまたはLinux のvmstatコマンドを 使用して、実行待ちのプロセスまたは実行待ちのプロセスの数を確認することもできます。これらのプロセスは、「r」列に表示されます。
例:
$ vmstat プロセス -----------メモリ---------- ---スワップ-- -----io---- -システム-- ------CPU----- rb swpd無料バフキャッシュsi so bi bo in cs us sy id wa st 2 0 0 4579152 324416 4619528 0 0 402 236 3357 15 20 2 78 0 0
実行キューには2つのモデルがあります。1つは各物理プロセッサに実行キューを割り当てるモデルで、もう1つはシステム内に実行キューが1つだけあるモデルです。
参照
- Completely Fair Scheduler は、カーネル 2.6.23 以降で Linux が使用するスケジューリング アルゴリズムです。
