Solaris のシステム管理

スケジューラの概要

「スケジューラ」(またはディスパッチャー) は、プロセスへの CPU 割り当てを制御するカーネルの一部です。スケジューラは、プロセスを実行するタイミングと実行時間を、それに割り当てられた優先順位に従って決定します。優先順位は、スケジューリングクラスとプロセスの動作に基づきます。デフォルトでは、タイムシェアリング、システム、リアルタイム、対話型という 4 つのスケジューリングクラスがサポートされています。

スケジューラはシステム性能に大きな影響を与えます。


注 -

基本的なスケジューリングエンティティはカーネルスレッドです。1 つのスレッドからなるプロセスの場合、カーネルスレッドのスケジューリングは、プロセスのスケジューリングと同じです。


SunOS 5.x のスケジューラは、プロセスの実行順序と、別のプロセスの前に、各プロセスが使用できる CPU 時間の量を制御します。

スケジューラは、スケジューリングクラスごとに定義されたスケジューリングポリシーに従って、プロセスに CPU 時間を割り当てます。各スケジューリングクラスには、一連の優先レベルまたは待ち行列が割り当てられています。実行準備ができたプロセスは、これらの待ち行列間を移動します。クラス内では、これらの待ち行列を連続する優先レベルセットと見なすことができます。これらの優先レベルは、グローバルスケジューリング優先順位セットにマップされます。

プロセスのグローバル優先順位によって、いつ実行するかが決まります。スケジューラは、実行準備ができていて最上位のグローバル優先順位を持つプロセスを実行します。優先順位の数値が大きいプロセスが最初に実行され、同じ優先順位を持つプロセスはラウンドロビン方式のスケジューリングポリシーを使用して実行されます。

スケジューラがプロセスを CPU に割り当てると、プロセスは次のいずれかのイベントが発生するまで実行されます。

デフォルトでは、すべてのリアルタイムプロセスは、システムプロセスよりも上位の優先順位を持ち、すべてのシステムプロセスはタイムシェアリングプロセスよりも上位の優先順位を持ちます。

プロセスは、スケジューラクラスやそのクラス内での優先順位など、スケジューラパラメタを親プロセスから継承します。ユーザーが (priocntl コマンドやシステムコールを使用して) 要求した場合にのみ、プロセスはクラスを変更します。システムは、ユーザー要求とプロセスのスケジューリングクラスに関連付けられたポリシーに基づいて、プロセスの優先順位を管理します。