Linuxのメモリ(a)は、カーネル空間とユーザ空間

次のWebサイトから

https://www.cnblogs.com/sparkdev/p/8410350.html

カーネル空間とユーザ空間

32ビットオペレーティングシステムは、そのアドレス空間(仮想アドレス空間、リニア・アドレス空間またはコール)が4G(2の32乗)です。4Gのためのプロセスの最大アドレス空間。通常のアプリケーションとは独立したオペレーティング・システム・カーネルのコア(核)は、あなたが保護されたメモリ空間をアクセスするだけでなく、基盤となるハードウェアへのすべてのアクセスすることができます。カーネルの安全性を確保するために、オペレーティング・システムは、現在一般ユーザプロセスがカーネルを直接操作することはできません強制します。基本的に、オペレーティング・システムによって特定の実装は、仮想アドレス空間は、2つの部分、カーネル空間に対して1つの、ユーザ空間の別の部分に分割されます。Linuxオペレーティングシステムでは、カーネルが使用する(仮想アドレス0xC0000000から0xFFFFFFFFのに)最高1Gバイトは、カーネル空間と呼ばれます。各プロセスによって下部使用(0xBFFFFFFF仮想アドレス0x00000000のから)3Gバイトは、ユーザ空間と呼ばれます。
この私たちは上記の内容を理解することができますについて:
プロセスあたりの4Gのアドレス空間、最高1Gは同じで、それは、カーネル空間です。唯一残っている3Gのみ返却処理独自に使用。言い換えれば、最高1Gカーネル空間は、すべてのプロセスによって共有されています!
次の図は、プロセスごとの4Gのアドレス空間(インターネットからこの図)の分布を示しています。

なぜ我々は、カーネル空間とユーザ空間を区別する必要がありますか

誤用、その上、そのようなメモリをクリアすると、システムがクラッシュするクロックを設定します場合は、すべてのCPUの命令では、いくつかの命令は非常に危険です。すべてのプログラムは、これらの命令を使用することを許可されている場合は、システムクラッシュの確率が大幅に増加されます。
したがって、危険な人のための特権命令と非特権命令、命令にCPUの命令は、唯一のオペレーティングシステムを可能にし、その関連モジュールは、命令だけを使用することができ、通常のアプリケーションでは、災害が発生することはありません。リング0〜リング3:たとえば、IntelのCPUの特権レベルは4つのレベルに分けられます。
実際には、Linuxシステムは、2つだけのリング0およびリング3実行レベルを(Windowsのシステムが同じである)を使用しています。プロセスは、ユーザモード動作で動作しているときに実行がカーネルモードときにリング0レベルで実行されているとして知られているが、リング3のレベルで参照されます。

カーネルモードとユーザーモード

:まあ、今はカーネルモード、ユーザー・モードであるかを説明する必要がある
プロセスがカーネル空間で実行される場合、カーネルモードであり、プロセスがユーザーモードでのユーザ空間で実行されています。
カーネルモード、カーネルアドレス空間で実行されるプロセス、およびCPUで任意の命令を実行することができます。コードはまた、あなたが直接ポートにアクセスすることができ、任意の有効なアドレスを訪問すること自由に、任意の制限なしに実行します。
ユーザーのアドレス空間で実行しているユーザーモードプロセスでは、コードは多くのチェックをCPUに実行させるため、彼らは唯一のそのアドレス空間内のページ・テーブル・エントリで指定したページにアクセスできるユーザーモードにマップされた仮想アドレスにアクセスすることができ、のみ、所定のタスク状態セグメント(TSS)I / O許可ビットマップ(I / O許可ビットマップ)で直接アクセスポートにアクセスすることができます。

以前のDOSオペレーティングシステムの場合は、何のカーネル空間、ユーザ空間とカーネルモード、ユーザー状態の概念はありません。ユーザーが記述したアプリケーションコードを簡単にオペレーティングシステムがアウトクラッシュできるようにすることができますので、あなたは、すべてのコードがカーネルモードで実行されていることと思うかもしれません。
Linuxの場合、カーネル空間およびユーザ空間デザインを区別することにより、オペレーティング・システム・コード(多くの堅牢なアプリケーションよりも、コードソースのオペレーティングシステム)とアプリケーションコードを隔離します。他のプログラムも正常な実行できるようにする(Linux、しかし、マルチタスクシステムああ!)でも、単一のアプリケーションエラーは、オペレーティングシステムの安定性には影響しません。

したがって、カーネル空間およびユーザ空間との間の区別は、オペレーティングシステムの安定性と可用性を向上させることが本質的です。

ユーザ空間からカーネル空間を入力する方法

実際には、システム資源管理の全ては、カーネル空間で行われます。そのようなディスクファイルとして読み取られ、データ等を読み書きするネットワークインタフェースから、メモリの割り当てを回収し、書きます。私たちのアプリケーションでは、このような操作を指示することができません。しかし、我々は、カーネルが提供するインタフェースを介して、このタスクを達成することができます。
たとえば、ディスク上のファイルを読むためのアプリケーションは、それがカーネルに伝えるために、「システムコール」にカーネルを開始することができます:「私は、ディスク上の特定のファイルを読みたいです」実際には、特殊な命令を介してプロセスがカーネル空間で、(カーネル空間への)モードをカーネルにユーザモードから入力するために、CPUは、ディスクからの読み出しデータを含む、当然のことながら、任意の命令を実行することができます。具体的なプロセスは、最初のユーザーモードから切り替えるためにユーザ空間とカーネルモードにデータをコピーし、カーネル空間にデータを読み取ることです。あなたのアプリケーションは、あなたが幸せにダウンを実行することができ、システムコールから返されると、必要なデータを取得しています。
これは単にシステムのカーネルに委託ハイテク物事のアプリケーション(ディスクファイルからの読み込み)、カーネルはプロかつ効率的にこれらの事を行うことです。

プロセスについて懸念している、そして最終的にはユーザ空間にカーネル空間にユーザ空間から返され、このプロセスは非常に複雑です。たとえば、私たちの定期的な接触「スタック」などの概念は、実際には、カーネルモードとユーザーモード各プロセススタックです。プロセスの使用は、ユーザ空間で実行するユーザ空間スタックにあるプロセスがカーネルスタック領域を使用して、カーネル空間で実行されています。だから、Linuxの各プロセスは2つのスタック、ユーザーモードとカーネルモードのいずれかを持っています。

プロセスがシステムリソースを使用するユーザーモードカーネルモードに切り替えなければならないので、我々はカーネルモードために、ユーザモードからアクセスすることができますどのように多くの方法の全体のプロセスを見てみましょうしようとしています。:要約すると、3つの方法があります。システムコール、ソフトウェアとハードウェア割り込みをこれらの3つの方法のそれぞれは、オペレーティングシステムに多くの知識を関連しているので、ここで展開されません。

全体の構造

次は、Linuxカーネル空間とユーザ空間の観点から、システム全体の構造を見てください。>カーネル空間 - - >ユーザ空間ハードウェアを次のようにそれは大体、下から3つの部分に分割することができます。(インターネットからこの図)は、以下に示すように:

システム内のハードウェアリソースを使用するためにのみ露光システムコールインターフェース(システム・コール・インタフェース)を介して、ハードウェアリソース、ユーザ空間のカーネルコードを使用する権利を制御するハードウェア、カーネル空間コードの先頭で。実際には、だけでなく、Linuxでは、Windowsオペレーティングシステムのデザインが似ていています。

実際には、我々は、任意の時点での各プロセッサの活動は、次の3つのいずれかのように要約することができることができます。

  • ユーザ空間、ユーザプロセスの実装で実行します。
  • 特定のプロセスの実行に代わって、プロセスのコンテキストで、カーネル空間で実行します。
  • 特定の割り込みを扱う、任意のプロセスとは独立して、割り込みコンテキストでは、カーネル空間で実行します。

そのようなCPUがアイドル状態のときに、カーネルは、プロセスコンテキストで、空のプロセスを実行するが、カーネル空間で実行されるように、ほとんどすべての場合、を含む三点、上記。
説明:Linuxシステムの割り込みサービスルーチンは、実装プロセスのコンテキストではないが、彼らは、特別な割り込みコンテキスト実行すべてから独立したプロセスです。特別な実行環境がある理由は、割り込みサービス・ルーチンが応答すると、割り込み要求を処理することを確認することです、その後すぐに最初の時間を終了します。

概要

现代的操作系统大都通过内核空间和用户空间的设计来保护操作系统自身的安全性和稳定性。所以在我们阅读有关操作系统的资料时经常遇到内核空间、用户空间和内核态、用户态等概念,希望本文能够帮助您理解这些基本的概念。

 

おすすめ

転載: www.cnblogs.com/xingmuxin/p/10967548.html