4

環境 - Linux カーネル 2.6.18 を搭載した組み込みデバイス 要件 - 3 つのスレッド (1 つのプロセスから作成され、P1 が T1、T2、T3 を作成したとします)

T1 は Linux 優先度 99 (最高)、T2 は Linux 優先度 50 (中間)、T3 は Linux 優先度 2 (最低) です。どのスレッドにもナイス値が明示的に設定されていません。

T1 と T3 は両方とも、変数を 1 秒に 1 回インクリメントします。T1 は両方の変数を 5 秒に 1 回出力します。これはスムーズに進みます。【問題箇所】 T2が「for(;;);」という無限ループに入った後、T1のカウントはちゃんと増えているのに、T3のカウントが全く増えていない。CPUで実行する時間がないT3を意味します。

この間ずっと、Linux の CFS は、すべての優先順位が (重みに基づいて) 適切なシェアを獲得することを保証していると考えていました。しかし、これは、スレッドがスリープせずに CPU を占有し、他のすべての優先度の低いスレッドの実行を停止することを証明しています。

CFSスケジューラがこのように動作する理由と、これを修正する方法があるかどうかを誰かが知っている場合は、答えてください。

4

1 に答える 1