x86アーキテクチャで、仮想アドレス空間のビット数が物理アドレスよりも少ないのはなぜですか?


11

私は64ビットコンピューティングに関するこの記事を読んでいて、次のように述べています。

たとえば、2011年のAMD64アーキテクチャでは、物理メモリに52ビット、仮想メモリに48ビットが許可されていました

物理メモリよりも多くの仮想メモリを許可するほうが理にかなっていると思うので、なぜ実際にはそれが逆になっているのですか?

おまけの質問:64ビットアーキテクチャで52ビットまたは48ビットを「許可」するとはどういう意味ですか?他に使用されるビットは何ですか?


x86の場合、未使用のVAビットは、VAのMSbitの符号拡張でなければなりません。(ARM AArch64は、8 MSbitをハードウェアで無視できるようにするオプションを提供し、タグに便利に使用できるようにします。AzulSystems Vegaプロセッサー(Javaアプライアンスの一部)は、16ビットのVAをタグに使用できるようにしました。)ページテーブルでは、予約済みのPAビットはゼロである必要があります(主に、ソフトウェアがそれらを使用したり、後のハードウェアとの互換性を壊したりしないようにするためです)。
ポールA.クレイトン

回答:


11

これは、AMD64ページテーブルの画像です(AMDアーキテクチャプログラマガイド、第2巻、Rev 3.23、2013、132ページから)。

AMD64ロングモードページテーブル

AMD64アーキテクチャのページの「自然な」サイズは2 12 = 4096バイトです。(2 21 = 2Mバイトのページを持つことができるモードがありますが、ここではそれらを無視します。)

各ページテーブルエントリ(PTE)(または、PDE、PDPEまたはPML4Eと呼ばれるレベルに応じて)は、64ビット= 2 3バイトです。したがって、ページごとに2 9のエントリがあります。したがって、4レベルのページテーブルを使用すると、プロセスごとに4x9 + 12 = 48ビットの仮想アドレスを取得できます。ページテーブルを歩くのはコストがかかるので、消費者の要求がない限り、5〜6レベルに拡張されません。

彼らが52ビットの物理アドレス制限を決定した理由がわかりません。これは、将来63ビットまで拡張できます。2013年10月の価格(4ギガビットチップでは約1 US $ /ギガビット)では、2 52バイトのメモリを構築するのに32,000,000.00 USドル以上かかるため、物理アドレスの制限を増やすという大きな需要が出るまでにはしばらくかかります。物理アドレスをできるだけ小さくしたいのにはさまざまな理由があります。たとえば、TLBとキャッシュタグは物理アドレスを保持する必要があります。

仮想よりも多くの物理メモリがあることは、必ずしも逆ではありません。物理メモリがすべてのプロセスで共有されている間、仮想メモリはプロセスごとです。したがって、48ビットの仮想アドレスと2 52バイトのメモリを備えたサーバーは、16の同時プロセスをサポートしながら、スワップの必要がないことを保証できます。


コンピュータアーキテクトがハードウェアで使用される上位ビットを要求することを学んだことは注目に値するかもしれません。また、Lnディレクトリエントリキャッシングを使用すると、5レベルのテーブルをほとんど完全にウォークする必要がありません。PTEビット52:62はソフトウェア用に予約されているため、互換性を壊さずに物理アドレスに使用することはできません。4KiBページは52ビットのPAに制限されます。また、Linus TorvaldsはPAEに激怒することで有名です(VA> PAは「従来の」OS設計を簡素化しているようです)。
ポールA.クレイトン

「これは、将来63ビットまで拡張される可能性があります。」まあ、いいえ、ページテーブルの構造を変更せずに。現状のまま、PxEのビット52〜62は、オペレーティングシステム用に予約されています。また、OSはそれらを使用しているため(Windowsはそのフィールドを「ワーキングセットリストインデックス」に使用します)、プロセッサアーキテクトはPFNフィールドを自由に拡張できません。もちろん、将来的には、PAFのより多くのビットを許可するようにPT構造を変更するPAEのようなオプションを使用することも可能ですが、それは重要なアーキテクチャの変更になるでしょう。
Jamie Hanrahan 2014年

3

考慮すべきいくつかの点として、物理RAMは高価です。確かに16 GBの方が安いのは4 GBがほんの数年前のことですが、2 ^ 64(16エクサバイト)は途方もなく大きいです。

したがって、AMDのx64向けx86拡張機能は、レジスタを制限することで最大2 ^ 52まで「許可」さます。これにより、プロセッサのコストが削減され、パフォーマンスが向上します。使用されていないレジスタが多いということは、操作中に考慮に入れなければならない多くの空きスペースがあることを意味します。

そして、あなたが数学の男でない場合には... 3つのサイズの違いは巨大です!私は数学の第一人者ではありませんが、10進数で52ビットは64ビットの.02%です。48ビットは52の6%です(誰かが私の数学をチェックしますか?)

AMDが仮想よりも多くの物理RAMを許可した理由については、AMDがサーバーを考えていたためであると記事は述べています。サーバーには大量の物理RAMが必要です。仮想RAMは、数百または数千人の従業員の平均的なサーバーアプリケーションをサポートするには遅すぎます。

私自身の考え:RAMが非常に小さく、ハードドライブがRAMをサポートしなければならなかった時代はもう終わりました。RAMの価格は、平均的なペルソナが十分なRAMを搭載できる程度まで下がっています。1〜2 GBのRAMを必要とするOfficeなどの一般的なアプリケーションを取り上げます。7年前の私のコンピュータはそれを処理できました。ディスクへの読み取りおよび書き込み速度はありますが、仮想メモリから7 GBのファイルを取得する必要がないことを願っています(古いPM * 2.5の考え方を使用しています)。

AMDは、統合されたGPU上のRAMのような、物理RAMレジスターを使用するレジスターのための余地を残したかっただけだとも思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.