回答:
現在のLinuxタスクスケジューラはCompletely Fair Scheduler(CFS)と呼ばれています。詳細については、http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txtを参照してください。デザインは非常に複雑で、RTOSには適していないと私は思います。
リアルタイムシステムの一般的な手法は、レート単調スケジューリングです。これは、特定の仮定(たとえば、静的タスクの優先順位と固定実行時間とレート)が成立する場合に強力な保証があるためです。他にもたくさんのアルゴリズムがあり、多くの研究が行われてきました。つまり、基本的には、必要なプロパティと、タスクについて知っていること、および修正されることのすべてです。
カーネルのI / Oスケジューリングについて考えているかどうか、私にはよくわかりません。そうでない場合:この答えは無視してください。
ウィキペディアによれば、カーネル2.6.18以降はCFG(完全なフェアキューイング)がデフォルトです。
Linuxスケジューラーが使用するアルゴリズムは、プリエンプティブな優先順位とバイアスされたタイムスライスを組み合わせた複雑なスキームです。優先度の高いタスクにはより長いタイムクォンタムを割り当て、優先度の低いタスクにはより短いタイムクォンタムを割り当てます。
各プロセスをリアルタイムプロセスまたは通常の(その他の)プロセスとして識別します。リアルタイムタスクには、[0,99]の範囲で静的優先度が割り当てられます。数値が小さいほど優先度が高くなります。
他のすべてのタスクは、適切な値にプラスまたはマイナスの値5に基づくタスクの対話性に基づいて、[100,139]の範囲の動的優先順位を持ちます。よりインタラクティブなタスクは、通常、スリープ時間が長くなるため、可能性が高くなりますスケジューラーはインタラクティブなタスクを優先するため、調整は−5に近くなります。(タスクの対話性は、I / Oを待機している間にスリープしていた時間によって決まります。)タスクの対話性は、値5をnice値に加算するか、nice値から減算するかを決定します。このような調整の結果、これらのタスクの優先順位が高くなります。逆に、スリープ時間が短いタスクは、多くの場合、CPUバウンドになるため、優先度が低くなります。
カーネルは、すべての実行可能なタスクのリストをrunqueueデータ構造で維持します。runqueueには、アクティブと期限切れの2つの優先配列が含まれています。アクティブな配列には、タイムスライスに残り時間があるすべてのタスクが含まれ、期限切れの配列には、期限切れのすべてのタスクが含まれます。これらの優先順位配列のそれぞれには、優先順位に従ってインデックスが付けられたタスクのリストが含まれています。スケジューラは、CPUで実行するために、アクティブな配列から最も優先度の高いタスクを選択します。すべてのタスクがタイムスライスを使い果たした場合(つまり、アクティブアレイが空の場合)、2つの優先アレイが交換されます。期限切れのアレイがアクティブアレイになり、その逆も同様です。
タスクの動的優先度は、タスクがタイムクォンタムを使い果たし、期限切れの配列に移動されるときに再計算されます。したがって、2つのアレイが交換されると、新しいアクティブアレイのすべてのタスクに新しい優先順位と対応するタイムスライスが割り当てられます。(注:これは、Abraham Silberschatzなどによるオペレーティングシステムコンセプト(第9版)の本からの抜粋です。詳細については、この本のセクション5.6.3を参照してください)
>
特に本から引用する場合は、回答の外部ソースから引き継いだ部分に「引用」フォーマット(つまり、で始まる行)を使用してください。
これはあなたの別の質問に対する答えです。リアルタイムシステム(RTS)には、ハードとソフトの2つのタイプがあります。ハードRTSのCPUスケジューリングアルゴリズムは優先度ベースのプリエンプティブアルゴリズムで、ソフトRTSのCPUスケジューリングアルゴリズムは非プリエンプティブ優先度です。