Linuxカーネルはいくつのページテーブルを保持しますか?

Linuxカーネルはいくつのページテーブルを保持しますか?

カーネルはページテーブルと呼ばれるデータ構造を維持します。
コース」仮想ページアドレスをメモリの物理ページアドレスに変換します。

本を読みましたが、文がありますが、なぜかわかりません。コース」?だからカーネル
シングルページテーブルには多くのプロセスへのマッピングが含まれています。つまり、カーネルはすべてのプロセスのページテーブルを別々に保存するのではなく、単一のページテーブルに保存しますか?

この本はBrian Wardが書いたHow Linux Works、2号、182ページ、4行です。


この本には文法的なエラーがあるようです。

  1. 気をつけて、それしなければならないそれを表現する:エラーはありません。 (コメントありがとうございます!)
  2. プロセスマッピングしなければならないプロセスマッピング

答え1

実際の状況はこれよりも複雑です。

まず、ちょうど一つある。本物特定のプロセッサコアのページテーブル。これは、ハードウェアが実際に仮想アドレスを物理アドレス(具体的にはMMU)にマップし、カーネルはページテーブルの内容を変更する必要がある場合にのみ関与するためです。

また、カーネルは、各実行コンテキスト(プロセス、スレッド、またはカーネルスレッド)の仮想メモリマップの状態に関する情報を別々に保存します。これらは互いに独立して格納され、アドレスマッピングにハードウェアによって使用されるページテーブルとは別個です。実行コンテキストが変更されるたびに(たとえば、プロセスがシステムコールを実行するか、または割り込みハンドラが割り込みを処理するためにアクティブになります)、実行コンテキストを切り替えるプロセスの一部は、ハードウェアページテーブルから古いエントリをフラッシュしてから新しいエントリをロードします。する作業が含まれます。アイテム。両方のコンテキストによって、非常に少数のエントリだけを再充填するか(たとえば、同じユーザースペースプロセスのスレッド切り替え)、テーブル全体を再ロードする必要があります(ユーザープロセスから割り込みハンドラに切り替えるなど)。 。

関連情報