この質問を見つけましたが、解決方法がわかりません。
新しいプロセッサのメモリ管理ユニット (MMU) を設計しています。プロセッサのワード サイズは 64 ビットで、ポインタのサイズも 64 ビットです。設計の次の部分はすでに決定されています
。 • MMU は 32kB のページ サイズをサポートします。
• 3 レベルの階層ページ テーブルを使用してアドレス変換を実行します。
• x86 マシンと同様に、ページ テーブルの任意のレベルにある個々のテーブルは、物理メモリの 1 ページを占有します。レベル 3 はルート テーブルで、レベル 2 テーブルの物理アドレスを保持するエントリが含まれます。同様に、レベル 2 テーブル エントリはレベル 1 テーブルを指し、レベル 1 テーブル エントリは物理ページまたはフレームを指します。
• すべてのページ テーブル エントリのサイズは 64 ビットになります。
• 物理アドレス空間のサイズは 52 ビット (4096 テラバイト) に制限されていますが、当面はこれで十分です。
この質問の残りの部分は、これらの設計上の決定の結果についてです。
質問:個々のページ テーブル ページにはいくつのエントリがありますか? あなたの働きを見せてください。
少し読んだ後、ページサイズP=2^p
と仮想アドレスサイズが与えられると、ビットn
の仮想ページオフセット(VPO)とp
ビットの仮想ページ数があることがわかりました(n-p)
。これにより、1 レベルのページ テーブル内の PTE の数は次のようになります。
2^n / 2^p = 2^(n-p)
レベルのページ テーブルでは、VPN を異なる VPNk
に分割する必要があります。私の理解では、それらはすべて同じ長さです。これは、個々のページ テーブルの PTE の量が であることを意味します。k
(n-p)/k
2^((n-p)/k)
さて、私の場合、私は持っていP = 32kB = 2^15
ます。これにより、15 ビットの VPO が得られます。私が見逃しているのは、仮想アドレスのサイズn
です。
ワードとポインタのサイズが 64 ビットであることはわかっています。
仮想アドレスが 64 ビット幅であると想定するのは正しいですか? その場合、49/3
ビット VPN を取得しますが、49
で割り切れません3
。