5.4 マシンレベルCSR¶
ハイパーバイザー拡張により、マシンレベルCSRであるmstatus,
mstatush, mideleg, mip,
mieに対して修正が行われ、さらにmtval2とmtinst
CSRが追加される。
5.4.1 マシンステータスレジスタ (mstatusとmstatush)¶
ハイパーバイザー拡張により、マシンレベルのmstatusとmstatush
CSRレジスタに対してMPVとGVAフィールドが追加される。この修正により既存のフィールドに対しても修正が行われる。図5.33はハイパーバイザー拡張が適用された場合のMXLEN=64時のmstatusレジスタのビットフィールドを示す。MXLEN=32の場合には、ハイパーバイザー拡張のMPVとGVAフィールドはmstatusではなくmstatushレジスタに追加される。このレジスタフィールドはハイパーバイザー拡張時には必ず実装しなければならない。図5.34はMXLEN=32時に実装されたmstatushレジスタのハイパーバイザー拡張を示す。
MPVビット(Machine Previous VIrtulization
Mode)は実装により書き込まれるレジスタで、例外が発生したことによりMモードに遷移した場合に書き込まれる。MPPビットのようにトラップが発生した際の以前のモードが書き込まれ、MPVビットにはトラップ発生時の仮想モードVの値が書き込まれる。MRET命令が実行された場合、MPP=3の場合を除き仮想モードVはMPVに格納されている値に設定される。MPP=3の場合には、Vは0が維持される。
図5.33:ハイパーバイザー拡張が実装されている場合のマシンステータスレジスタ(mstatus)¶
RV32時のハイパーバイザー拡張が実装されている場合のマシンステータスレジスタ(mstatus)¶
GVA(Guest Virtual
Address)フィールドは実装により書き込まれるビットで、トラップが発生してMモードに移行する場合に書き込まれる。mtvalへの書き込みが発生する任意のトラップ(アクセスフォルト、ページフォルト、ゲストページフォルト)の場合にGVAに1が背程される。Mモードに移行するそれ以外のトラップでは、GVAは0が設定される。
mstatusのTSRとTVMフィールドはHSモードでの実行時にのみ影響を与え、VSモードでは影響を与えない。TWフィールドはMモード以外のすべてのモードでの実行に影響を与える。
TVM=1に設定することによりHSモードでのhgatpへのアクセスもしくはHFENCE.GVMAの実行からHSモードを保護することができるが、vsatpへのアクセスもしくはHFENCE.VVMAに対しては影響を与えない。
ハイパーバイザー拡張によりmstatusのMPRV(Modify
Privilege)フィールドの動作に影響を与える。MPRV=0の場合はへアドレス変換とアドレス保護は通常通り実行される。MPRV=1の場合には、あたかも現在の仮想マシンm-小戸がMPVに設定され、現在の特権モードがMPPに設定されているように明示的なメモリアクセスに対してアドレス変換とメモリ保護が実行され、エンディアンが適用される。表5.4にこれらのケースを示す。
MPRVは仮想マシンロード命令(HLV, HLVX,
HSV)の動作に対し提供を与えない。これらの明示的なロードとストア命令は常にV=1かつ特権モードはMPRVをオーバーライドしてhstatus.SPVPであるかのように動作する。
mstatusレジスタはHSレベルのsstatusレジスタのスーパーセットであるが、vsstatusのスーパーセットではない。
5.4.2 マシン割り込み移譲レジスタ (mideleg)¶
ハイパーバイザー拡張が実装されると、midelegのビット10、ビット6、ビット2(標準VSレベルの割り込み)が1に固定される。さらに、任意のゲスト外部割込みが実装される場合(GEILENがゼロ以外)、midilegのビット12(スーパーバイザーレベルゲスト外部割込み)も1に固定される。VSレベルの割り込みとゲスト外部割込みはMモードからHSモードへ常に移譲される。
5.4.3 マシン割り込みレジスタ (mip, mie)¶
ハイパーバイザー拡張により、新規に追加された割り込み向けにmipとmieにビットが追加される。図5.35と図5.36はハイパーバイザーが実装された場合のmipとmieの標準的なビットフィールド(ビット15:0)を示す。
図5.35:mipの標準的なビット配置¶
図5.36:mieの標準的なビット配置¶
mipのSGEIP, VSEIP, VSTIP,
VSSIPビットはハイパーバイザーCSRであるhipへのエイリアスであり、mieのSGEIE,
VSEIE, VSTIE,
VSSIEはhieの同じビットへのエイリアスである。
5.4.4 マシン第2トラップ値レジスタ (mtval2)¶
mtval2レジスタはMXLENビットの読み書き可能なレジスタであり、図5.37にビットフォーマットを示す。例外により実行モードがMモードに移行した場合、mtval以外の例外の情報を格納するために使用され、ソフトウェアにより例外を処理するために使用される。
図3.37:マシン第2トラップ値レジスタ¶
ゲストページフォルト例外により動作がMモードに移行した場合、mtval2にはゼロもしくは変換に失敗したゲスト物理アドレスが2ビット右にシフトした値が書き込まれる。他の例外ではmtval2はゼロが設定されるが、将来の仕様拡張や他の例外要因によりmtval2の動作が変更される可能性がある。
アドレス変換の第1ステージ(VSステージ)による暗黙的なメモリアクセスゲストページフォルトの場合、暗黙的なメモリアクセスのゲスト物理アドレスがmtval2に書き込まれる。このような状態における曖昧性を解消するためにmtinstに更なる情報が書き込まれる。
そうでない場合、ミスアラインロードとミスアラインストアによりゲストページフォルトが発生するときは、mtval2のゲスト物理アドレスはmtvalに記録されている仮想アドレスのアクセスに失敗した部分に相当する。可変長命令をサポートするシステム上で命令ゲストページフォルトが発生した場合、mtval2にゼロ以外の値が書き込まれた場合にはmtvalに格納されている仮想アドレスが示す命令の一部分が格納されている。
mtval2はWARLレジスタでありゼロもしくはゲスト物理アドレスの2ビットシフトした値が書き込まれている。