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


11

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

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


プロセスまたはIOスケジューリングについては?それとも何か他のものですか?
maxschlepzig

回答:


7

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

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


2

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

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

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


気になるのですが、どうすれば別のアルゴリズムに切り替えることができますか?これに光を当てることができますか?ありがとう
rsjethani

@rsjethani YaSTに移動します->システム->カーネル設定-> 2番目のタブ(カーネル設定)->グローバルIOスケジューラ。(私はドイツのGUIから翻訳てきたようにオプションの命名は異なる場合があります)
Torbjörn

1

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


0

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を参照してください)


サイトへようこそ、そしてあなたの貢献に感謝します。>特に本から引用する場合は、回答の外部ソースから引き継いだ部分に「引用」フォーマット(つまり、で始まる行)を使用してください。
AdminBee

0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.