FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-V ハイパーバイザー拡張の勉強 (2ステージアドレス変換の例外とFENCE)

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.VVMAHFENCE.GVMASFENCE.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命令はここでは必要ない。