マルチレベルページテーブルがメモリを節約する方法を理解しようとしています。私の理解では、マルチレベルページテーブルは合計でシングルレベルページテーブルよりも多くのメモリを消費します。
例:ページサイズが64KBで32ビットプロセッサのメモリシステムを考えてみましょう。ページテーブルの各エントリは4バイトです。
シングルレベルページテーブル:16(2 ^ 16 = 64KB)ビットはページオフセットを表すために必要です。したがって、残りの16ビットは、ページテーブルへのインデックス付けに使用されます。そう
*ページテーブルのサイズ= 2 ^ 16(ページ数)* 4バイト(各ページテーブルエントリのサイズ 2 ^ 18バイト*)==
マルチレベルページテーブル:2レベルページテーブルの場合、最初の10の最上位ビットを使用して、1レベルページテーブルにインデックスを付けます。次の10ビットは、ページ番号からフレーム番号へのマッピングを持つ第2レベルのページテーブルにインデックスを付けます。残りの12ビットはページオフセットを表します。
第2レベルのページテーブルのサイズ= 2 ^ 10(エントリ数)* 4バイト(各エントリのサイズ)= 4 KB
すべての第2レベルページテーブルの合計サイズ= 2 ^ 10(第2レベルページテーブルの数)* 4KB(各第2レベルページテーブルのサイズ)= 4 MB
第1レベルのページテーブルのサイズ= 2 ^ 10(エントリ数)*(10/8)バイト(各エントリのサイズ)= 1.25 KB
第1レベルおよび第2レベルのページテーブルの保存に必要な合計メモリ= 4 MB + 1.25 KB
したがって、複数レベルのページテーブルを保存するためにより多くのメモリが必要です。
この場合、マルチレベルページテーブルはどのようにメモリスペースを節約しますか?
データにアクセスするために必要なスペースは2 ^ 20 * 4バイト= 4MBです
説明した2レベルのケースでは、第1レベルのページテーブルと、第2レベルの2 ^ 10ページテーブルの1つが必要です。したがって、第1レベルのサイズ= 2 ^ 10 * 4バイト= 4KB第2レベルでは、2 ^ 10ページテーブルのうち1つだけが必要です。したがって、サイズは2 ^ 10 * 4バイト= 4KBです。
必要な合計サイズは現在4KB + 4KB = 8KBです。
最終比較は4MB対8KBです。
マルチレベルページテーブルの主な利点は次のとおりです。
最初に、ページテーブルをページサイズ単位に切り刻みます。次に、ページテーブルエントリ(PTE)のページ全体が無効な場合、ページテーブルのそのページをまったく割り当てないでください。
ソース (セクション20.3)
したがって、ページテーブルに必要なメモリの量は、アドレススペースのサイズではなく、プロセスが使用しているメモリの量によって決まります。
さらに、物理メモリがいっぱいになった場合、ページテーブルエントリのページ自体をページングできます。メモリには常にページディレクトリのみが必要です。
Intelレベルのメモリ構造のため、マルチレベルテーブルが主に必要です。
32ビットシステムがあり、上半分がシステムに予約され、下半分がユーザーアドレス用になるようにアドレススペースを分割するとします。
このような分割では、システムアドレスに到達するために、すべてのユーザーページテーブルに2GBの連続したページテーブルエントリが必要になります。
これへの単純なアプローチへの古いVAX。 4GBのアドレス空間を4つの領域(2ユーザー、1システム、1つは使用不可)に分割しました。 3つの使用可能な領域には、独自のページテーブルがありました。
各地域には独自のページテーブルがありました。専用のシステムアドレススペースがあったため、ユーザーページテーブルは仮想アドレスにすることができ、連続したメモリを必要としません。
アドレス変換の最初のフェーズでは、2つの上位アドレスビットを調べて、使用するページテーブルを選択しました。
別のページテーブルを使用する代わりに、Intel-landはページテーブルを分割します。これにより、(1)テーブルに連続したメモリが必要になるという問題が軽減されます。 (2)ページテーブルがアドレス空間全体に広がることを要求する。 (3)すべてのプロセスで共有できるカーネルアドレスの定義を許可します。