27

私は、ソフトウェア管理の TLB を持つ MIPS アーキテクチャに精通しています。したがって、ユーザー (オペレーティング システム) がページ テーブルとページ テーブル エントリを格納する方法と場所は完全にユーザー次第です。たとえば、反転したページ テーブルを 1 つ使用するプロジェクトを行いました。プロセスごとに 2 レベルのページ テーブルを使用している人を見ました。

しかし、x86 の話はどうですか? 私が知っていることから、TLB はハードウェアで管理されています。x86 は基本的に、「これは、現在使用しているページ テーブル エントリが [物理アドレス範囲] に移動する必要がある場所です」と教えてくれますか? でも待ってください、私はいつも x86 がマルチレベルのページテーブルを使用していると思っていました。よくわかりません。

助けてくれてありがとう。

4

1 に答える 1

35

保護モードに入ると、CR3 レジスタは「ページ ディレクトリ」(保護モードに入る前に好きな場所に置くことができます) を指します。これはメモリのページです (「小さな」ページは 4 KiB であり、 「ラージ」ページは 4 MiB) で、「ページ テーブル」を指す 1024 ページ ディレクトリ エントリ (PDE) があります。各エントリは、ポインターの上位 10 ビット (ページ テーブルのアドレス) と、ポインターの下位部分 (present、permission、dirty など) を構成する一連のフラグです。

(1024 は、ページが 4096 バイトでポインターが 4 バイトであるという事実から来ています。)

各「ページ テーブル」はそれ自体が 1024 個の「ページ テーブル エントリ」(PTE) であり、ここでもメモリ内の物理ページを指す 1024 個のエントリと、多数の (ほぼ同じ) フラグが含まれています。

したがって、32 ビットの仮想アドレスを変換するには、ポインターの上位 10 ビットをインデックスとして CR3 のテーブルに取ります ( 10 個のエントリが 2 つあるため)、および -- その PDE がさらに細分化されている場合 (つまり、 「大きな」ページではなく、フラグから判断できます) -- PDE の上位 20 ビットを取得し、そのアドレスでページ テーブルを検索し、仮想アドレスの次の-topmost 10でインデックスを作成します。ビット。次に、最上位の 20 ビットが物理ページを参照し、最下位の 12 ビットが物理ページが実際に存在することを示していると仮定します。

Physical Address Extension (PAE) を使用している場合は、階層の最上部にレベルが表示されます。

注: 自分自身 (およびおそらく CPU) の正気を保つために、ページ ディレクトリとページ テーブルを自分自身にマップすることをお勧めします。そうしないと、混乱が早くなります。:)

TLB はハードウェアで管理されているため、ページ テーブルのキャッシュは透過的ですが、TLB 内の PTE を無効にする命令 InvlPG があります。(いつ使用すべきか、いつ使用すべきでないか正確にはわかりません。)

ソース: http://wiki.osdev.org/Paging

于 2012-05-20T06:02:20.670 に答える