2017-03-28 3 views
2

カーネルスペースとユーザースペースの分離が必要なのはなぜですか?ユーザー空間にプロセスを作成しても、すべてのデータ構造、すべてのメモリリソースがカーネルによって管理されるのはなぜですか?なぜこのような大きなアーキテクチャが必要なのでしょうか?カーネルスペースが必要なのはなぜですか?

すべてのページテーブル、コンテキストの切り替えなどはカーネルで管理されているので、なぜユーザースペースですか?私たちは1つのスペースしか使用できず、すべてのものを開発することはできませんか?

この質問は奇妙に聞こえるかもしれませんが、なぜそれが必要なのかを本当に理解したいのですか?まったく新しいOSを設計しなければならず、カーネル空間とユーザー空間の間でこのような分割を行わないと、何が問題になるでしょうか?スペースを分ける

おかげ

答えて

1

カーネルスペースとユーザープロセスの間に保護がない場合、誰かが意図的にまたは偶然にカーネルスペース内のメモリーまたは別のユーザープロセスのスペース内のメモリーを変更するコードを書き込むことができます。この保護機能のない古いMS-DOSを見てください。

+0

ありがとう私はあまりにも例が必要でした。 :) – anupamD

1

は厳密には必要ではないですが、あなたがそれらの間違ったか悪いかの操作を防ぐために、ユーザコードからOSの構造を保護する必要がある場合、あなたはいくつかの種類の保護を必要とします。さもなければ、そのような悪い操作はOSの内部の一貫性を損なうでしょうが、これは通常あなたが望まないものです。

+0

ありがとうジャンはそれを得ました:) – anupamD

1

カーネルスペースとユーザースペースは、システムをより堅牢にするために、システム保護についてです。カーネル空間は特権モードであり、ユーザ空間ではできないこと(ハードウェア/システムリソースと直接対話するなど)を行うことができます。ハードウェアとのすべてのユーザー空間の相互作用は、カーネル空間だけを経由する必要があります。

誤って書き込まれたユーザーコードは、システムをクラッシュさせることはできません。システムを不安定にすることはできません。この分離がなければ、間違って書かれたユーザコードがシステムをクラッシュさせる可能性さえあります。

+0

ありがとう@UKAgrあなたのポイントを得ました:) – anupamD

2

あなたの質問はまったく変わっていません - あなたの直感では、カーネルスペースが不必要なオーバーヘッドを表しているかもしれません。実際、多くのオペレーティングシステムにはないオーバーヘッドです。お使いのOSにはそれがない可能性が最も高いです。

  1. 我々は、プロセス/タスクの分離をしたい:

    余分な複雑さの理論的根拠は次のようなものになります。 悪いことをする1つのタスクが別のタスクに影響を与えないようにしたいと考えています。これには、タスクがそれぞれ独立した空間で実行されている必要があります。

  2. 同様の共有ハードウェアコントローラの保護が必要です。

  3. タスクが独自の境界を設定することはできません。そうであれば、誤った作業が意図的にルールを破る可能性があります。だから私たちはタスクが持っているよりも高い権限を持つ第三者が必要であり、あなたのカーネル(または特権)スペースがあります。

余分なカーネルスペースと分離のコストが大きすぎると、サイズや計算のオーバーヘッドのいずれかで、オペレーティングシステムにこれらの機能がありません。多くのリアルタイムシステムまたは組込みシステムは、単一のスペースで単一の(同じ)特権レベルで実行されます(特権レベルは、保護リングとも呼ばれます)。

関連する問題