web-dev-qa-db-ja.com

ページテーブルとページディレクトリの違い

マイクロプロセッサとマイクロコントローラのパラダイムで、アドレススペースという用語をよく耳にします。物理メモリ(プライマリ)の特定のメモリブロックを参照するためにアドレスが使用されることを理解しています。

私が正しい場合、アドレス空間はそのようなすべてのアドレスのスーパーセットです。正しい?

仮想メモリ/ページングを使用することにより、セカンダリストレージを使用してアドレス空間を拡張しています。

このパラダイムで、ページテーブル、ページテーブルエントリ、ページディレクトリとは正確には何ですか?最初のp.memoryがセグメント化され、論理的に分割され、これらのセグメントがページに分割されることを理解しています。では、ページテーブルとは正確には何でしょうか。ページを含むテーブル?そして、ページディレクトリはページテーブルのスーパーテーブルとは何ですか?

18
techno

X86アーキテクチャでは、ページディレクトリとページテーブルが一緒になって、仮想アドレス(アプリケーションが使用するメモリアドレス)と物理アドレス(物理メモリハードウェアの実際の場所)の間のマッピングを提供します。

ページは、連続したメモリのチャンクです。 x86(32ビット)は、4 MB、2 MB、4 KBの3つのサイズのページをサポートしています。後者は、主流のオペレーティングシステムで最も一般的に使用されています。 ページテーブルは、1024 * 32ビットエントリの配列です(1つの4KBページに都合よくフィットします)。各エントリは、ページの物理アドレスを指します。 1つのページテーブルはそれ自体でアドレス空間全体を表すことができないため(1024エントリ* 4KB = 22ビットのアドレス空間のみ)、第2レベルのページテーブルが必要です:aページディレクトリ。ページディレクトリも1024 * 32ビットエントリ(これも1つのページに収まる)で構成され、それぞれがページテーブルをポイントしています。これで1024 * 1024 * 4KB = 32ビットであることがわかります。この3レベルの構造で、4 GBの仮想アドレス空間全体をマップできます。

CPUは仮想アドレスへのアクセスを要求されると、上位10ビット(31:22)を使用して、ページディレクトリテーブル(そのベースアドレスは特殊レジスターに格納されます)にインデックスを付けます。次の上位10ビット(21:12)は、ページディレクトリエントリが指すページテーブルにインデックスを付けるために使用されます。最下位の12オーダービット(11:0)は、ページテーブルエントリによってポイントされたページ内のバイトをインデックスするために最終的に使用されます。

他のシステムでは、仮想アドレス空間のサイズとサポートされるページサイズに応じて、必要なページテーブルのレベルが増減する場合があります。たとえば、4MBページのx86には、単一のページディレクトリのみが必要です。 4KBページの64ビットモードでは、4レベルのシステムが使用されます。ページマッピングレベル4テーブルには、多くのページの1つを指すエントリが含まれますディレクトリ。

Intel Architectures Developer's Manual には、特に第3章と第4章で、このトピックに関するより多くの情報があります。

35
peterdn