基本的に、プロセスのリアルタイム優先順位はどのように設定されますか?

基本的に、プロセスのリアルタイム優先順位はどのように設定されますか?

私が理解したのは、Linuxプロセスにはスケジューリング目的のための「良い」値とリアルタイムの優先順位の値があり、これとniceコマンドを使用してchrt明示的に変更できます。ユーザーがプロセスのリアルタイム優先順位を明示的に設定していない場合、どのように設定されますか?

ベストアンサー1

ロバート・ラブの言葉を引用するには:

スケジューラは、プロセスがインタラクティブかどうかを魔法のように知ることはできません。タスクがI / O中心かプロセッサ中心かを正確に反映するいくつかの経験的な方法が必要です。最も代表的な指標は作業期間です。眠る。仕事がほとんどの時間を過ごして過ごしたら、I/O制限。ジョブがスリープモードに入るよりも実行に時間がかかる場合、そのジョブは失敗します。インタラクティブ。これは非常に拡張され、ほぼ常に眠りにつくことです。 完全にI/Oに縛られている、ほぼ常に実行できるタスクは次のとおりです。プロセッサが完全に制限されている

これらの経験的方法を実装するために、Linuxはプロセスがスリープ状態で費やした時間と、プロセスが実行可能状態で費やした時間を記録する[実行]タブを維持します。値はsleep_avg memberに保存されますtask_structMAX_SLEEP_AVGデフォルトでは、範囲は0〜10ミリ秒です。ジョブがスリープモードの後に​​実行可能になると、sleep_avgこの値に達するまでスリープ期間だけ増加しますMAX_SLEEP_AVG。ジョブが実行されるタイマーティックごとに、ジョブは sleep_avgゼロに達するまで減少します。

したがって、私はカーネルが上記のヒューリスティックに基づいてスケジューリングポリシーを決定すると信じています。私が知っている限り、リアルタイムプロセスの場合、スケジューリングポリシーはまたはいずれかSCHED_FIFOですSCHED_RR。両方の戦略は、SCHED_RR時間フラグメントの代わりに時間フラグメントがあることを除いて同様ですSCHED_FIFO

ただし、リアルタイムのプロセススケジュールを変更することもできます。あなたは参照することができますこれリアルタイムプロセススケジューリングの変更方法に関する質問です。

引用する

http://www.informit.com/articles/article.aspx?p=101760&seqNum=2

おすすめ記事