GNU/Linux >> Linux の 問題 >  >> Linux

Linux –ユーザースペースとカーネルスペースの違いは?

カーネルがユーザープログラム、つまりシステムコールに代わって実行されているときにカーネルスペースが使用されていますか?それとも、すべてのカーネルスレッド(スケジューラなど)のアドレス空間ですか?

それが最初のものである場合、それは通常のユーザープログラムが3GBを超えるメモリを持つことができないことを意味しますか(分割が3GB + 1GBの場合)?また、その場合、カーネルはどのようにハイメモリを使用できますか。1GBのカーネルスペースが論理的にマップされるため、ハイメモリからのページはどの仮想メモリアドレスにマップされますか?

承認された回答:

カーネルがユーザープログラム、つまりシステムコールに代わって実行されているときにカーネルスペースが使用されていますか?それとも、すべてのカーネルスレッド(スケジューラなど)のアドレス空間ですか?

はい、はい。

先に進む前に、メモリについてこれを述べる必要があります。

メモリは2つの異なる領域に分けられます:

  • ユーザースペース 、これは通常のユーザープロセスが実行される場所のセットです(つまり、カーネル以外のすべて)。カーネルの役割は、このスペースで実行されているアプリケーションが互いに干渉したり、マシンが混乱したりしないように管理することです。
  • カーネルスペース 、カーネルのコードが保存されている場所であり、下で実行されます。

ユーザースペースで実行されているプロセスは、メモリの限られた部分にしかアクセスできませんが、カーネルはすべてのメモリにアクセスできます。ユーザースペースで実行されているプロセスもしない カーネル空間にアクセスできます。ユーザースペースプロセスは、カーネルのごく一部にしかアクセスできません カーネルによって公開されたインターフェースを介して–システムコール 。プロセスがシステムコールを実行すると、ソフトウェア割り込みがカーネルに送信され、カーネルは適切な割り込みハンドラーをディスパッチし、ハンドラーが終了した後も作業を続行します。

カーネルスペースコードには、「カーネルモード」で実行するプロパティがあります。これは、(通常のデスクトップ-x86-コンピューターでは)リング0で実行されるコードを呼び出すものです。 。 通常、x86アーキテクチャには、4つの保護リングがあります 。リング0(カーネルモード)、リング1(仮想マシンのハイパーバイザーまたはドライバーで使用される可能性があります)、リング2(ドライバーで使用される可能性がありますが、それについてはよくわかりません)。リング3は、一般的なアプリケーションが実行されるものです。これは最も特権の少ないリングであり、その上で実行されているアプリケーションは、プロセッサの命令のサブセットにアクセスできます。リング0(カーネルスペース)は最も特権のあるリングであり、マシンのすべての命令にアクセスできます。たとえば、これに対して、「プレーン」アプリケーション(ブラウザなど)はx86アセンブリ命令lgdtを使用できません グローバル記述子テーブルまたはhltをロードします プロセッサを停止します。

それが最初のものである場合、それは通常のユーザープログラムが3GBを超えるメモリを持つことができないことを意味しますか(分割が3GB + 1GBの場合)?また、その場合、カーネルはどのようにハイメモリを使用できますか。1GBのカーネルスペースが論理的にマップされるため、ハイメモリからのページはどの仮想メモリアドレスにマップされますか?

これに対する答えについては、ここでwagによる優れた答えを参照してください

関連:ノーチラスステータスバーの可視性–空き領域をすばやく確認しますか?
Linux
  1. [[$ a ==Z*]]と[$a==Z *]の違いは?

  2. ユーザーアカウントとサービスアカウントの違いは?

  3. Linux – PtsとTtyの違いは?

  1. Linuxカーネルバッファをユーザー空間にmmapする方法は?

  2. カーネルスタックとユーザー空間スタック

  3. sudo crontab -e と crontab -e だけの Linux の違い

  1. Linuxでの「su」コマンドと「su-」コマンドの違いを学ぶ

  2. LinuxでのSuspendとHibernateの違いは何ですか

  3. 「ifconfig」コマンドと「ip」コマンドの違い