SCHED_FIFO と SCHED_RR はいわゆる「リアルタイム」ポリシーです。これらは、POSIX 標準で指定された固定優先度のリアルタイム スケジューリングを実装します。これらのポリシーを持つタスクは、他のすべてのタスクをプリエンプトするため、(CPU を解放しないと) 簡単に枯渇する可能性があります。
SCHED_FIFO と SCHED_RR の違いは、優先度が同じタスク間で、SCHED_RR が特定のタイムスライスでラウンドロビンを実行することです。代わりに、SCHED_FIFO は明示的にプロセッサを譲るタスクを必要とします。
SCHED_OTHER は、システムで実行されている他のタスクに応じて特定のタイムスライスのタスクをスケジュールする一般的なラウンド ロビン タイムシェアリング スケジューリング ポリシーです。
更新 :Linux 3.14 以降、SCHED_DEADLINE と呼ばれる追加のポリシーがあります。このポリシーは、Earliest Deadline First キューの上に固定帯域幅サーバー (CBS) アルゴリズムを実装します。このポリシーに基づく各タスクには期限が割り当てられ、期限が最も早いタスクが実行されます。このアルゴリズムを説明する最適なリソースは、Linux カーネルの Deadline スケジューリングです。
アップデート 2 :Linux 4.13 以降、SCHED_DEADLINE は CBS を Greedy Reclamation of Unused Bandwidth (GRUB) アルゴリズムに置き換えました。
Linux マニュアル (http://man7.org/linux/man-pages/man7/sched.7.html) に基づく SCHED_OTHER、SCHED_FIFO、SCHED_RR の違いは次のとおりです。
SCHED_FIFO:先入れ先出しスケジューリング
<ブロック引用>SCHED_FIFO これは、SCHED_FIFO スレッドが実行可能になると、現在実行中の SCHED_OTHER、SCHED_BATCH、または SCHED_IDLE スレッドをすぐに横取りすることを意味します。 SCHED_FIFO は、タイム スライスを使用しない単純なスケジューリング アルゴリズムです。
SCHED_RR:ラウンドロビン スケジューリング
<ブロック引用>SCHED_RR SCHED_FIFO を単純に拡張したものです。上記の SCHED_FIFO に関する説明はすべて SCHED_RR にも適用されますが、各スレッドは最大時間単位でのみ実行できることを除きます。 SCHED_RR スレッドがタイム クォンタム以上の期間実行されている場合、優先順位のリストの最後に配置されます。
SCHED_OTHER:デフォルトの Linux タイムシェアリング スケジューリング
<ブロック引用>SCHED_OTHER 静的優先度 0 でのみ使用できます (つまり、リアルタイム ポリシー下のスレッドは、常に SCHED_OTHER プロセスよりも優先されます。SCHED_OTHER は、特別なリアルタイム メカニズムを必要としないすべてのスレッドを対象とした標準の Linux タイムシェアリング スケジューラです。