ページテーブルを使って仮想アドレスから物理アドレスを探索する仕組み

先日、HugePages を使うとメモリの探索が遅くなるんじゃないかと聞かれて、仮想アドレスの先頭部分で物理ページを探索して、後半のアドレスでページ内のどのアドレスか探索するので、無問題じゃないかな。自分の妄想だけど。と答えたが、だいたいあってそう。

ページディレクトリテーブルのアドレスをCPUにセットするためのレジスタとしてCR3レジスタが用意されています。MMU仮想メモリ空間へのアクセスに対してCR3レジスタに書かれたページディレクトリテーブルのアドレスへアクセスして探索を行います。探索を行う時、仮想アドレスの先頭10ビットをページディレクトリテーブルへのオフセットとしてページテーブルを指すエントリを探索します。

ページテーブルでは仮想アドレスの11〜20ビットをオフセットとして物理ページを指すエントリを探索します。見つかった物理ページのアドレスに対して仮想アドレスの残り12ビットの値を足したアドレスが、CPUがアクセスしようとしている物理アドレスとなります。

ハイパーバイザの作り方~ちゃんと理解する仮想化技術~ 第2回 Intel VT-xの概要とメモリ仮想化