最初のケースのページ テーブルは、プロセスごとのデータ構造です。すべてのプロセスには、独自のページ テーブルへのポインターがあり、このポインターは、プロセスがスケジュールされたときに %CR3 レジスターにロードされます。また、コンテキストが切り替えられたときに保存されます。他のレジスターと。
しかし、逆ハッシュ テーブルはグローバル データ構造です。この手法を使用する OS は、ロック メカニズムを使用して、特定の時点で 1 つのプロセスのみにアクセスできるようにします (グローバル データに同時にアクセスする 2 つのコア上の 2 つのプロセスを想像してください)。
プロセスあたり 4GB の RAM と 4096 のページ サイズを想定すると、最初のケースでは、各プロセスには 4GB/4096 (ページ テーブル内のエントリ数 * 各ページ テーブル エントリのサイズ) があり、これはすべて、プロセスごとにスペースを消費します。仮想から物理へのマッピングに使用される合計メモリは、すべてのプロセスのページテーブルサイズの合計です。これは、すべてのコンテキストスイッチでポインターを変更するだけで複雑なことは何もないため、より単純なアプローチです。
2 番目のケースでは、4GB/4096 エントリのみの単一のテーブルが作成されるため、スペースは節約されますが、メモリ管理が複雑になります。これはグローバル データであるため、現在の所有者が(あなたが示したように)などです。MMU / OSは同期を処理する必要があります。
しかし、あなたが与えた例は正確ではありません.プロセスページテーブルごとにアドレス全体にアクセスできる実際のシステムでは、プロセスp1には4ページがあり、p2には異なるページセットがあります. 実際には、両方のプロセスが同じ仮想アドレスにアクセスでき、異なる物理フレームにマップされます。そのため、各テーブルにはそれぞれ 8 つのエントリが必要です。