スレッドのスケジューリング・ポリシー
スケジューリング・ポリシーには、スレッドに関する多数の可能な値があります。
- SCHED_FIFO
- このポリシーを持つスレッドがスケジュールされると、スレッドはブロックされるか、 自発的にプロセッサーの制御を引き渡すか、またはより優先順位の高いスレッドが ディスパッチ可能にならない限り、完了するまで実行されます。 SCHED_FIFO スケジューリング・ポリシーを持つことができるのは、固定優先順位スレッドだけです。
- SCHED_RR
- SCHED_RR スレッドは、タイム・スライスの終わりに制御を得ると、その優先順位のディスパッチ可能スレッドのキューの末尾に移動します。 SCHED_RR スケジューリング・ポリシーを持つことができるのは、固定優先順位スレッドだけです。
- SCHED_OTHER
- このポリシーは、POSIX 標準 1003.4a によりインプリメンテーション定義として定義されます。 各クロック割り込みごとに実行中スレッドの優先順位の値を再計算するということは、 その優先順位の値が別のディスパッチ可能スレッドの優先順位の値を上回ったために、 スレッドが制御を失う場合があることを意味します。
- SCHED_FIFO2
- このポリシーは SCHED_FIFO の場合と同じですが、ごく短時間スリープしたスレッドが、 起動したときにその実行キューの先頭に書き込まれるようにする点が異なります。 この時間枠が親和性制限 (schedo -o affinity_lim との調整が可能) です。
- SCHED_FIFO3
- スケジューリング・ポリシーが SCHED_FIFO3 に設定されているスレッドは、常に実行キューの先頭に書き込まれます。 SCHED_FIFO2 スケジューリング・ポリシーに属するスレッドが SCHED_FIFO3 より先に書き込まれないようにするため、 SCHED_FIFO3 スレッドがエンキューされるときに実行キュー・パラメーターが変更されるので、SCHED_FIFO2 に属するスレッドはどれも、 実行キューの先頭に入れる基準を満たすことはできません。
- SCHED_FIFO4
- 優先順位の高い SCHED_FIFO4 スケジューリング・クラスのスレッドは、優先順位の違いが 1 である場合、現在稼働中の優先順位の低いスレッドを優先使用しません。デフォルトの動作では、CPU 上で現在稼働中の優先順位の低いスレッドを、同じプロセッサーで実行資格のある優先順位の高いスレッドが優先使用します。
スケジューリング・ポリシーは thread_setsched() システム・コールによって設定され、 呼び出し側のスレッドに対してのみ有効です。 ただし、プロセス ID を指定して setpri() コールを出すことにより、 スレッドを SCHED_RR スケジューリング・ポリシーに設定することもできます。setpri() の呼び出し側と setpri() のターゲットが一致している必要はありません。
setpri() システム・コールを出すことができるのは、root 権限を持つプロセスだけです。 スケジューリング・ポリシーを任意の SCHED_FIFO オプションまたは SCHED_RR に変更できるのは、root 権限を持つスレッドだけです。 スケジューリング・ポリシーが SCHED_OTHER の場合、優先順位パラメーターは thread_setsched() サブルーチンによって無視されます。
スレッドが関係するのは主に、現在幾つかの非同期処理からなっているアプリケーションです。 マルチスレッド構造に変換した場合、これらのアプリケーションがシステムに課するロードは軽くなる可能性があります。