kernel:schedule(2) / Scheduling Algorithm

  • nice値を小さくすることにより優先度をあげることができるが、実行待ちが多いプロセスはbonus値が大きくなり、動的に優先度が上げられる
  • よって、必ずしもnice値を小さくすることによりプロセスが優先して処理されるわけではない
  • プロセスの優先処理を意図するようにするためには、プロセススケジューリングのために使用するポリシーを別のスケジューラを使用するよう変更する
  • 使用するスケジューラの選択は、デフォルトとは異なるスケジューラを使用したいアプリケーションプログラムにおいて設定する

Sheduling Algorithm

Algorithm Name Policy Name 仕組み/動作
First-IN/First-OUT SCHED_FIFO 時分割を用いない単純なスケジューリングアルゴリズム。SCHED_OTHERもしくはSCHED_BATCHスケジューラを使用しているProcessが実行されている際にSCHED_FIFOスケジューラが選択されているProcessが実行可能になると、直ちに既存のProcess処理を中断してSCHED_FIFOを使用しているプロセスが実行される。SCHED_FIFOスケジューラを使用したProcessは、I/O要求により停止するか、より高い優先度を持ったProcessにより置き換えられるか、CPUを解放する(sched_yield()を呼び出す)まで継続して実行される
Round Robine SCHED_RR SCHED_FIFOに時分割機能を加えたスケジューラ。各Processは割り当てられた時間の分までProcessを実行する。優先度ごとに処理待ちのQueueにまわされ、次の時間割当を待つ
優先度付き時分割 SCHED_OTHER リアルタイム性を必要としないProcessで使用するスケジューリングアルゴリズム。Process実行の優先順位はnice値によって決定されるが、待ち状態のProcessに対して待ち時間単位でbonusが割り当てられ、優先度が高められる。Kernel2.6におけるデフォルトスケジューリングアルゴリズム
バッチ SCHED_BATCH このスケジューリングアルゴリズムを選択したProcessは最低の優先度を与えられ、システムがアイドル状態となる(実行されるProcessがない状態となる)直前に実行される。バックグラウンドで実行され、かつ時間的な正確性を必要としないProcess(DBのインデックス付け処理など)のスケジューリングとして使用される