仮想化環境でのフォールト アドレスに対する ARM アーキテクチャ (ARMv8) のサポート方法を理解しようとしています。ハイパーバイザーの場合、デバイスをエミュレートするために、ゲストからのすべてのデバイス アクセスをトラップする必要があります。
ゲストからのメモリ アクセスは例外を生成し、ハイパーバイザーは ESR を読み取ることによって例外の理由を認識します。次に、その理由が data_abort であることを認識します。
その後、障害のあるアドレスは、HPFAR (IPA の一部) と FAR (障害のあるアドレスの VA) を読み取ることによって障害のあるアドレスを取得するという、ハイパーバイザーの観点からの主な関心事です。それらをマージすると(障害アドレスの上部はHPFARから、下部はFARから取得されます)、ハイパーバイザーは最終的に障害アドレスを知ることができましたが、実際には64ビットアドレスではありません。完全な 64 ビット IPA ではなく、IPA 範囲 ([51:12] または [47:12]、ARMv8 のバージョンに依存) のみを表します。
実際のプラットフォームのほとんどには 2^64 サイズのメモリがありませんが、ARM アーキテクチャは 64 ビット フル IPA をサポートする必要があると思いますが、そうではないようです。
私が何かを見逃したのか、それとも ARM が 64 ビットの IPA をサポートしていない特別な理由があるのか、誰か教えてもらえますか?