23

Linux では、各プロセスに仮想アドレス空間があります (たとえば、32 ビット システムの場合は 4 GB で、プロセス用に 3 GB、カーネル用に 1 GB が予約されています)。この仮想アドレス指定メカニズムは、各プロセスのアドレス空間を分離するのに役立ちます。多くのプロセスがあるため、これはプロセスの場合は理解できます。しかし、カーネルが 1 つしかないのに、なぜカーネルの仮想アドレス指定が必要なのですか?

4

2 に答える 2

19

カーネルが「仮想」である理由は、ページング自体を処理するためではなく、プロセッサが一度に 1 つのモードでしか実行できないためです。そのため、ページ メモリ マッピング (x86 の CR0 のビット 31) をオンにすると、プロセッサはすべてのメモリ アクセスがページ マッピング メカニズムを通過することを期待します。したがって、ページング (仮想メモリ) を有効にした後でもカーネルにアクセスしたいので、仮想空間のどこかに存在する必要があります。

メモリの「予約」は、何よりも「アドレスがカーネル空間かユーザー空間かを判断する簡単な方法」に関するものです。アドレス 12345-34121 にカーネルを少し配置し、101900-102400 に別のカーネルを配置し、40000000-40001000 に別のカーネルを配置することは完全に可能です。しかし、それはカーネルとユーザー空間のあらゆる面での生活を困難にします - 対処すべきギャップ/穴があります[そのような穴/ギャップはすでにありますが、それ以上あると正確には役に立ちません]. 「ユーザー空間はここからここまで、カーネルはユーザー空間の終わりから X まで」という一定の制限を設定することで、その点で生活がずっと楽になります。kernel = 0; if (address > max_userspace) kernel=1;いくつかのコードで言うことができます。

もちろん、kerneln は実際に使用するのと同じ量の PHYSICAL メモリしか占有しません。したがって、「カーネルのためにギガバイト全体を占有するのはもったいない」という一般的な考えは誤りです。カーネル自体は少数 (ダースまたはそのため、非常に「大きな」カーネルの場合) メガバイト。ロードされたモジュールは簡単に数メガバイトまで追加でき、ATI や nVidia のグラフィックス ドライバは、そのカーネル モジュールだけでさらに数メガバイト追加できます。カーネルは、タスク、キュー、セマフォ、ファイル、およびカーネルが処理する必要があるその他の「もの」などの「カーネルデータ」を格納するために、メモリの一部のビットも使用します。これにも数メガバイトが使用されます。

于 2013-01-26T20:00:39.240 に答える
6

仮想メモリ管理は Linux の機能であり、システムでマルチタスキングを無制限に可能にします。タスクの数または各タスクが使用するメモリの量。Linux メモリ マネージャー サブシステム (MMU ハードウェアと共に) は、仮想アドレスを介してメモリまたはメモリ マップ デバイスにアクセスする VMM サポートを容易にします。Linux 内では、実際のハードウェアを扱う場合を除いて、カーネル コンポーネントとユーザー コンポーネントの両方のすべてが仮想アドレスで動作します。そのとき、メモリ マネージャーがその役割を果たし、仮想アドレスから物理アドレスへの変換を行い、物理メモリ/開発場所をポイントします。

プロセスは、プログラムを実行するためにシステム リソースが割り当てられるカーネルによって定義される抽象的なエンティティです。Linux Process Management では、カーネルはプロセス メモリ マップの統合された部分です。1 つのコインの 2 つの面のように、プロセスには 2 つの主要な領域があります。

  • ユーザー空間ビュー - プロセスで使用されるユーザー プログラム セクション (コード、データ、スタック、ヒープなど) が含まれます。

  • カーネル空間ビュー - プロセスに関する情報 (PID、状態、FD、リソース使用状況など) を維持するカーネル データ構造が含まれています。

    ここに画像の説明を入力

Linux システムのすべてのプロセスには、固有の個別のユーザー空間リージョンがあります。Linux VMM のこの機能は、各プロセス プログラム セクションを互いに分離します。ただし、システム内のすべてのプロセスは、共通のカーネル空間領域を共有します。プロセスがカーネルからのサービスを必要とする場合、この領域でカーネル コードを実行する必要があります。つまり、カーネルはユーザー プロセス要求に代わって実行されます。

于 2013-01-28T17:03:35.093 に答える