ユーザ空間メモリがシステムを制御不能状態にするか?

ユーザ空間メモリがシステムを制御不能状態にするか?

だから私はBrian Wardの「How Linux Works」を読んでいます。彼は、ユーザー空間のアプリケーションの1つで発生したエラーのためにシステムがハングアップしないと言いました。

図 1-1. Linuxシステムの構成方法とカーネルお​​よびユーザープロセスの実行方法には主な違いがあります。つまり、カーネルはカーネルモードで実行され、ユーザープロセスはユーザーモードで実行されます。カーネルモードで実行されるコードは、プロセッサとメインメモリに無制限にアクセスできます。これは、カーネルプロセスがシステム全体を簡単にクラッシュさせることを可能にする強力で危険な権限です。カーネルだけがアクセスできる領域をカーネル空間という。

対照的に、ユーザモードは(通常は小さい)メモリサブセットと安全なCPU操作へのアクセスを制限します。ユーザースペースとは、ユーザープロセスがアクセスできるメインメモリの部分を意味します。プロセスエラーと競合が発生した場合、結果は制限され、カーネルによって解決される可能性があります。これは、Webブラウザがクラッシュしても、数日間バックグラウンドで実行される科学計算を停止しない可能性があることを意味します。

理論的には、ユーザープロセスが制御を超えてもシステムの残りの部分に重大な損傷を与えるべきではありません。実際、一部のプロセスは他のプロセスよりも多くの作業を実行できるため、「重大な損傷」を考慮する項目とプロセスの特定の権限によって異なります。たとえば、ユーザープロセスがディスク上のデータを完全に削除できますか?正しい権限があれば、これは非常に危険だと思うかもしれません。しかし、このような事態が発生しないように保護装置が設けられており、ほとんどのプロセスではこのように混乱を引き起こすことはできない。

たとえば、Webサーバーがユーザースペースで実行されていることを読み、Webサーバーがシステムメモリをすべて消費し、サーバーが強制的にクラッシュするのを見ました。しかし著者の言葉はこれと矛盾する。

私が執筆者の意思を間違って理解したのかわかりません。とても申し訳ありません。

ユーザー空間アプリケーションがシステムを損傷する可能性があり、その理由を説明できますか?

謙虚な助けに感謝します。

答え1

特に誤解された部分はないようです。はい、あなたが読んだ2つの内容は一貫性がないようです。著者(Brian Ward)が扱っていない主題は次のとおりです。サービス拒否攻撃、名前じゃなくてもいつも悪意のある。時には偶然に発生します。

サーバーになることを目撃しました。フォーク爆弾。もちろん、サーバーは技術的にまだ稼働していますが、他のサービスにアクセスすることはできず、偶発的なフォーク爆弾は約1年の間続くと予想されます。ほとんどの人はそれを崩壊と呼びます。

サービス拒否攻撃は次のように構成されているため異なります。多すぎるその他の許容措置。たとえば、許可されたウェブサイトのホームページをリクエストできます。今、100万台のコンピュータがすべて何億回も要求した場合、問題が発生します。

現在、カーネルには思ったより実行しにくいいくつかの保護機能があります。ただし、基本原則は、多くのスレッドを実行しているユーザーが特定の(制限された)リソースを使用できるため、他のスレッド(他のユーザー)がそれを使用できないことです。飢える、リソースは利用できません。

関連リソースによれば、カーネルは次のツールを使用してこのようなことが発生するのを防ぎます。cgroup。ただし、システム管理者/ソフトウェア開発者が何かを制限しないより一般的な状況について話している場合は、Webサーバーが機能せず、利用可能なすべてのリソースを使用するなどの例を見つけることができます。

特に言及する価値のあるリソースの1つは記憶です。メモリとスワップ領域が完全に使い果たされると、カーネルはプロセスの終了を開始します。したがって、一部の人が信じているのとは異なり、プロセスがカーネルに他のプロセスを強制的に終了させることができます。これは、面倒なプロセスが終了することを保証しません。

これは、制御されていないユーザー空間プログラムが最終的にカーネルに完全に関連していないプログラムを終了させることを可能にすることを意味します。システムが正常に動作していても、私はまだこの状況を「大混乱を引き起こす状況」と呼びたいと思います。

関連情報