17

これは、これについて詳しく説明するための質問です。カーネルがプロセス アドレス空間にあると言われるのはなぜですか?

ばかげた質問かもしれませんが、ふと頭に浮かびました。プロセス アドレス空間と仮想メモリ レイアウトに関するすべてのテキストは、プロセス アドレス空間にはカーネル用に予約されたスペースがあることを示しています。たとえば、32 ビット システムでは、プロセス アドレス空間は 4GB で、そのうちの 1 GB は Linux のカーネル用に予約されています (他の OS では異なる場合があります)。

プロセスがカーネルを直接アドレス指定できないのに、なぜカーネルがプロセスアドレス空間にあると言われるのか疑問に思っています。カーネルにはプロセスとは別のアドレス空間があり、プロセスのページテーブルとは別のカーネル自体に別のページテーブルを持たせないのはなぜですか?

Linux (Debian または Ubuntu) 固有のオペレーティング システムに関する説明を得ることができますか?

4

4 に答える 4

31

質問の別の部分に答えるために-カーネルは、効率/パフォーマンス上の理由から部分的にすべてのプロセスアドレス空間にマップされます(他にもあると思います)。

最新のほとんどのハードウェアでは、セキュリティ レベルを変更するよりも、システム コールやカーネルが提供するその他の機能を実行するために、セキュリティ レベルを変更する方が迅速です (したがって、Alexey の回答で述べたように、保護されているページへのアクセスを許可します)。仮想メモリ マップ全体、関連するすべての TLB キャッシュ フラッシュ、および完全なコンテキスト スイッチに関連するその他のすべて。

システム コールはかなり頻繁に発生する可能性があるため、Linux や他の多くの場所で進化した設計は、カーネル サービスを利用し、カーネル コードと (少なくとも一部の) データを各プロセスにマッピングするオーバーヘッドを最小限に抑えようとするものです。その。

于 2012-10-22T14:55:44.520 に答える
13

プロセスは、ここで仮想アドレス空間全体、カーネルとそのユーザー部分を「所有」します。

カーネルコードとデータを覗き見できないのは、アドレス空間が異なるためではなく、ページテーブルに設定されたアクセス権/許可が異なるためです。カーネル ページは、通常のアプリケーションがアクセスできないように設定されています。

ただし、1 つの全体の 2 つの部分をカーネル空間とユーザー空間と呼ぶのが通例であり、混乱を招く可能性があります。

于 2012-10-22T14:32:14.793 に答える
6

カーネルがプロセス アドレス空間にあると言うもう 1 つの重要な理由は、カーネルが CURRENT プロセスのユーザー コード/データ、つまり仮想アドレス空間 0 ~ 3G にアクセスできることです。

下手な英語でごめんなさい。私は英語のネイティブスピーカーではありません。

于 2012-10-27T14:48:16.633 に答える
4

カーネルが各プロセス アドレス空間にマップされていない場合に何が起こるか想像してみてください。タイマー割り込みが発生すると、プロセッサが IDT (割り込み記述子テーブル) を使用して ISR ルーチンを呼び出すため、トリプル フォールトが発生します。カーネルがマップされていない場合、 IDT アドレスが無効になり、トリプル フォールトが発生します。

于 2013-07-21T18:05:48.763 に答える