web-dev-qa-db-ja.com

Linuxではどのスケジューリングアルゴリズムが使用されていますか?

最近のインタビューで、Linuxオペレーティングシステムで使用されているスケジューリングアルゴリズムについて尋ねられました。使用されているアルゴリズムは何ですか?

また、リアルタイムのオペレーティングシステムで使用されているアルゴリズムとその理由を教えてください。

11
rShetty

現在のLinuxタスクスケジューラはCompletely Fair Scheduler(CFS)と呼ばれています。詳細は http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt をご覧ください。設計は非常に複雑で、RTOSには適していないと思います。

リアルタイムシステムの一般的な手法は、レートが単調なスケジューリングです。これは、特定の仮定(たとえば、静的タスクの優先順位と固定の実行時間とレート)が成立する場合に強力な保証があるためです。他にも多くのアルゴリズムがあり、多くの研究が行われてきました。つまり、基本的には、必要なプロパティと、タスクについて知っていること、および修正されていることのすべてです。

7
stsydow

カーネルのI/Oスケジューリングについて考えているかどうか、私にはよくわかりません。そうでない場合:この答えは無視してください。

ウィキペディアによれば、カーネル2.6.18以降は CFG(完全なフェアキューイング) がデフォルトであるとしています。

私のopenSUSE(カーネル2.6.37を実行)では、CFG [〜#〜] noop [〜#〜]Deadline を切り替えることができます。

2
Torbjörn

ラウンドロビンアルゴリズムは、通常、タイムシェアリング環境で使用されます。

1
Namdev

Linuxスケジューラーが使用するアルゴリズムは、プリエンプティブな優先順位とバイアスされたタイムスライスを組み合わせた複雑なスキームです。優先度の高いタスクにはより長いタイムクォンタムを割り当て、優先度の低いタスクにはより短いタイムクォンタムを割り当てます。

これは、各プロセスをリアルタイムプロセスまたは通常の(その他の)プロセスとして識別します。リアルタイムタスクには、[0,99]の範囲の静的優先度が割り当てられます。数値が小さいほど優先度が高くなります。

他のすべてのタスクは、ナイス値プラスまたはマイナスの値5に基づくタスクの対話性に基づいて、[100,139]の範囲の動的優先順位を持ちます。よりインタラクティブなタスクは、通常、スリープ時間が長くなるため、可能性が高くなりますスケジューラーはインタラクティブなタスクを優先するため、調整は−5に近くなります。 (タスクの対話性は、I/Oの待機中にスリープ状態になっていた時間によって決まります。)タスクの対話性は、値5をNice値に加算するか、Nice値から減算するかを決定します。このような調整の結果、これらのタスクの優先順位が高くなります。逆に、スリープ時間が短いタスクは、多くの場合CPUに依存するため、優先度が低くなります。

カーネルは、すべての実行可能なタスクのリストをrunqueueデータ構造で維持します。実行キューには、アクティブと期限切れの2つの優先配列が含まれています。アクティブな配列には、タイムスライスに残っている時間のあるすべてのタスクが含まれ、期限切れの配列には、すべての期限切れのタスクが含まれます。これらの優先順位配列のそれぞれには、優先順位に従ってインデックスが付けられたタスクのリストが含まれています。スケジューラーは、CPUで実行するために、アクティブなアレイから最も優先度の高いタスクを選択します。すべてのタスクがタイムスライスを使い果たした場合(つまり、アクティブアレイが空の場合)、2つの優先アレイが交換されます。期限切れのアレイがアクティブアレイになり、その逆も同様です。

タスクの動的優先度は、タスクがタイムクォンタムを使い果たし、期限切れのアレイに移動されるときに再計算されます。したがって、2つのアレイが交換されると、新しいアクティブアレイのすべてのタスクに新しい優先順位と対応するタイムスライスが割り当てられます。 (注:これは、Abraham Silberschatzなどによるオペレーティングシステムコンセプト(第9版)の本からの抜粋です。詳細については、この本のセクション5.6.3を参照してください)

0
Kishor Bhoyar

これはあなたの別の質問に対する答えです。リアルタイムシステム(RTS)には、ハードとソフトの2つのタイプがあります。ハードRTSのCPUスケジューリングアルゴリズムは優先度ベースのプリエンプティブアルゴリズムで、ソフトRTSのCPUスケジューリングアルゴリズムは非プリエンプティブ優先度です。

0
Kishor Bhoyar