5.5.2 ゲストページフォルト
ゲストページフォルト例芸はmedeleg
CSRの制御によりM-ModeからHS-Modeに移譲される可能性があるが、他の動作モードに移譲することはできない。ゲストページフォルトでは、mtval
もしくはstval
に通常通りゲスト仮想アドレスが書き込まれるが、mtval2
もしくはhtval
にもゼロもしくは失敗したゲスト物理アドレスが2ビット右にシフトされて書き込まれる。mtinst
CSRもしくはhtinst
には5.6.3節に説明するように例外の発生した命令の情報か、アクセスに関する他の情報が書き込まれる。
命令フェッチもしくはミスアラインメモリアクセスがページの境界をまたいだ場合、2つの異なるアドレス変換が発生する。このような状況でゲストページフォルトが発生した場合、失敗した仮想アドレスはmtval
/mtval
ともに通常のページフォルトと同様に書き込まれることが必要である。従って、失敗した仮想アドレス、ページ境界のバイトがアクセスバイトに含まれている場合、命令のオリジナルの仮想アドレスよりも上位のページ境界アドレスとなる可能性がある。
ゲストページフォルトがVSステージアドレス変換による暗黙的なメモリアクセスが原因ではない場合、mtval
/stval
に書き込まれる正確な仮想アドレスに相当する比ゼロのゲスト物理アドレスがmtval2
/htval
に書き込まれる。
5.5.3 メモリ管理フェンス
SFENCE.VMA
命令の動作は現在仮想モードVに応じて影響を与える。V=0の時、仮想アドレス引数はHSレベルの仮想アドレスであり、ASID引数はHSレベルのASIDである。命令順序では、HSレベルのアドレス変換構造と、後続のHSレベルのアドレス変換処理で順序が保たれる。
V=1では、SFENCE.VMA
の仮想アドレス引数は現在動作している仮想マシンのゲスト仮想アドレスであり、ASID引数は現在の仮想マシンのVSレベルのASID引数である。現在の仮想マシンはhgatp
CSRのVMIDフィールドであり、現在の有効なASIDはこのVMIDとVSレベルのASIDを組み合わせていると考えることができる。SFENCE.VMA
命令はVSレベルのアドレス変換構造と同一仮想マシン、例えばSFENCE.VMA
実行時にhgatp
.VMIDが同一である仮想マシンによる後続のVSステージのアドレス変換の順序を保持する。
ハイパーバイザー名れいHFENCE.VVMA
とHFENCE.GVMA
はSFENCE.VMA
を補助するさらなるメモリ監視フェンスを提供する。これらの命令については5.3.2節で説明する。
3.6.2節では物理メモリ保護(Physical Memory Protection: PMP)とページベースアドレス変換の間の横断について議論する。そこでは、PMPの設定が物理メモリのページテーブルを保持している場所と、ページテーブルを指すメモリの場所を変更するような操作が行われた場合、M-ModeのソフトウェアはPMPの設定を仮想メモリシステムと同期させなければならない。HSレベルのアドレス変換では、M-ModeでPMP CSRを書き込んだ後にSFENCE.VMA
命令をrs1=x0, rs2=x0
で実行することでこれを達成できる。もしGステージのアドレス変換にてBareモードを指定していない場合、データ構造の同期がこれも必要となる。PMPの設定が、ゲスト物理ページテーブルもしくはゲストページテーブルの場所を指す物理メモリの場所を参照するような場合、M-ModeにおいてPMP CSRレジスタを書き込んだ後HFENCE.GVMA
命令をrs1=x0, rs2=x0
で実行する必要がある。HFENCE.VVMA
命令はここでは必要ない。