なぜユーザープログラムはカーネルスペースを台無しにする必要があるのですか?


9

私は問題が何であるかさえわかりませんが、ここで説明されているカーネル攻撃について話しています。このコメントのリストの下で、誰かプロセスを再利用することについて尋ねました。トリックは状況を改善しませんでした(マシンはまだ非常に遅い方法で実行されます)、そしてコメントの返事はカーネル空間とユーザー空間について何かを述べています。

まず、返信コメントは正しいですか?もしそうなら、なぜreniceはカーネル空間ではなくユーザー空間で機能するのですか?また、私が読んだことによると、ユーザーが自分で開始するすべてのプログラムはユーザー空間にあるはずですが、何を見逃しましたか?

それが正しくない場合、なぜreniceは状況を改善しないのですか?

回答:


9

カーネルがユーザー空間に提供するサービス(ソケットを開くなど)があります。ユーザー空間プログラムがカーネルとやり取りできる明確に定義されたインターフェース(API)があります。

この場合、ユーザー空間プログラムは繰り返しソケットを開き、それらを介してファイル記述子を送信してから、ソケットを閉じます。これらのアクションはカーネルによって実行されます。ソケットのもう一方の端がファイル記述子を読み取るまで、ファイル記述子をバッファーに保持します。特定のバグは、ガベージコレクターが最終的にファイル記述子を解放する必要があることですが、解放されません-fdがリークされます。リークされたfdsが追加され、そこに座ってリソースを消費します。プログラムがリソースを所有していないため、プログラムを強制終了してもリソースは解放されません。


6
そして、reniceが役に立たない理由は、プロセスが取得するユーザーCPU時間のシェアの大きさにのみ影響するためです。カーネルモードで費やされた時間は、この目的ではカウントされません。一般的に、niceはIOにバインドされたプログラムではなく、CPUにバインドされたプログラムにのみ影響します。ここで、暴走プロセスは純粋なIOであり、各システムコールに時間がかかりすぎるというバグがあるため、それほど多くのシステムコールを実行していません。
Gilles「SO-悪をやめなさい」

1
@ギレスこのような古い問題に触れて申し訳ありませんが、それは非常に興味深いですね!私はそれを正しく理解してioniceいますか?
rozcietrzewiacz 2011

@rozcietrzewiacz ioniceも役に立たないと思いますが、よくわかりません。バグのため、プロセスはすべての時間を1回のシステムコールで費やし、ioniceはそれを妨げません(私は思う)。
Gilles「SO-邪悪なことをやめなさい」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.