LINUXカーネルプロセスのスケジューリング戦略

LINUXカーネルプロセスのスケジューリング戦略

A:スケジューリング機会:

カーネル:プロセス自身の呼び出しスケジュール()またはschedule_timeout()システムを介して自発的にCPUを放棄し、CPUスケジューリング他のプロセスようにします。(Schedule_timeout()CPU時間を放棄するために指定することができます)

1:自主スケジュール:

ユーザー・スペース:システムコールの一時停止()またはにnanosleep()を介して、プロセスが自発的にCPUを放棄。(にnanosleep()もCPU時間を放棄するために指定することができます。また、スリープ()、Sleep_on()ライブラリ関数は、最終的にはCPUのシステムコールを放棄することによって実現、システムコールではありません)

2:非自発的スケジュール:

主に発生した場合にユーザモードにカーネルモードからの復帰(すなわち、ユーザ空間への空間からの復帰)

主に次のような状況で:ユーザプロセスは、システムコールの戻り値(完成システム空間におけるシステムコール)を行う場合、割り込み処理を終了する(システムの割り込み処理空間にある)、例外処理が終了する(また、例外は、システム空間を扱います) 。

CPUシステムたびにあなたがユーザ空間に宇宙から戻ると、プロセスのスケジューリングを行います。また、クロック割り込みが発生するたびに、プロセスがシステムコールを行わない場合は、各プロセスは、それ以外の場合は、パフォーマンス上の理由を得ることができ、また、Linuxシステムである(プロセススケジューリングを行います、現在実行中のプロセスのタイムスライスが期限切れになる見つけます異常な操作自体が存在しない)、自発的にCPU、システムをあきらめないとタイムスライスを使い切るまで中断することなく、プロセスが待機します。言い換えれば、ユーザ空間でのみに発生する義務スケジュールのプロセスは、システム空間内で発生することはありません。

II:スケジュール:「条件付きプリエンプティブ」アプローチ。上記の分析のタイミングをスケジュールすることにより、我々はシステムがシステムスペースで実行されている場合、LINUXカーネルプロセススケジューリングは、「条件付き先制」アプローチで見ることができ、拒否されていないが、システムはスペースにシステムが戻るから返された後ときに、ユーザー・スペース、現在のプロセスがCPUを占有する権利を奪われる可能性があります。

3:スケジューリングポリシー:(フォーカス)----ベースのスケジューリング・ポリシーを「自分の優先順位とスケジューリングポリシーを処理するために」。1:全体的なスケジューリング戦略:システムは、この権利に応じて、毎スケジューリングシステムが各プロセス「重み」の動作を計算するアルゴリズムのいくつかの種類を介して、各プロセスに使用する優先順位及びスケジューリングポリシーに基づいて行われますスケジューリングの値は、最大の重み、最初にスケジュールされます。しかし、この重みは、静的ではなく、時間をかけて実装プロセスは、減少を実行するので、プロセスの元の重量はまた、(プロセス・スケジューリングの「公平性」を確保するために)実施される機会を有することができる下げます。すべてのプロセスの重みが0まで減少している場合(注:SCHED_RRスケジューリングポリシーは後述するが、SCHED_FIFOスレッドを使用して、または場合は、少なくとも2つのスケジューリングを使用して、すべてのプロセスが0になっている可能重みありません重みは)戦略は、1000年以上のままで処理すると、システムはスケジューリングが再びプロセスを繰り返して、すべてのプロセスの重みいったん再評価されます。****注:「その優先順位とスケジューリングポリシーを処理するために」それは重みが計算されている場合、アカウントの優先順位とスケジューリングポリシーを考慮して、それはように、Linuxカーネルのスケジューリングポリシーは、各プロセスを使用しているためでありますスケジューリング戦略に基づきます。

2:プロセス自身のスケジューリング・ポリシー:さまざまなニーズを満たすためには、Linuxカーネルは、3つの異なるプロセスのスケジューリング・ポリシーを設計し。

強力なタイミングでの要件、およびこの戦略のために、比較的短い時間、リアルタイムアプリケーションで使用されるすべての実行に適したSCHED_FIFO --------。

SCHED_RR -----------「RR」は、比較的大規模なプログラムのためのラウンドロビン(回転)手段​​であり、各実行プロセスに長い時間がかかります。

SCHED_OTHER ------インタラクティブなタイムシェアリングアプリケーションのための伝統的なスケジューリングポリシー。また、各プロセスは、システムを介して自分のスケジューリングポリシーはsched_setschedulerコールを設定することができます()。

4:スケジューリング戦略のLinuxプロセスの上記の分析を通じて、このスケジューリング戦略から引き出すことができるが、リアルタイム要件を保証することはできません、いわゆるリアルタイムパッチを作ることが必要です。しかし、我々はスケジューリング戦略を変更することはできません現在の状況では、リアルタイム性を向上させるためには、次の措置をとることができます

1:CPUタイムスライス分割小さいです。そうすることの欠点は、スケジューリングのプロセスがスケジュールやコストのプロセスので、コストの増加、非常に頻繁になりますです。

2:リアルタイムプロセス高優先順位(1〜99)。

3:リアルタイムプロセスがSCHED_FIFOスケジューリング・ポリシーを使用して、彼らは睡眠()および他の同様の操作をしたいです

リリース9件のオリジナルの記事 ウォンの賞賛1 ビュー6688

おすすめ

転載: blog.csdn.net/u014426028/article/details/103401019