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が維持される。
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)を示す。
mip
のSGEIP
, VSEIP
, VSTIP
,
VSSIP
ビットはハイパーバイザーCSRであるhip
へのエイリアスであり、mie
のSGEIE
,
VSEIE
, VSTIE
,
VSSIE
はhie
の同じビットへのエイリアスである。
5.4.4 マシン第2トラップ値レジスタ (mtval2
)¶
mtval2
レジスタはMXLENビットの読み書き可能なレジスタであり、図5.37にビットフォーマットを示す。例外により実行モードがMモードに移行した場合、mtval
以外の例外の情報を格納するために使用され、ソフトウェアにより例外を処理するために使用される。
ゲストページフォルト例外により動作がMモードに移行した場合、mtval2
にはゼロもしくは変換に失敗したゲスト物理アドレスが2ビット右にシフトした値が書き込まれる。他の例外ではmtval2
はゼロが設定されるが、将来の仕様拡張や他の例外要因によりmtval2
の動作が変更される可能性がある。
アドレス変換の第1ステージ(VSステージ)による暗黙的なメモリアクセスゲストページフォルトの場合、暗黙的なメモリアクセスのゲスト物理アドレスがmtval2
に書き込まれる。このような状態における曖昧性を解消するためにmtinst
に更なる情報が書き込まれる。
そうでない場合、ミスアラインロードとミスアラインストアによりゲストページフォルトが発生するときは、mtval2
のゲスト物理アドレスはmtval
に記録されている仮想アドレスのアクセスに失敗した部分に相当する。可変長命令をサポートするシステム上で命令ゲストページフォルトが発生した場合、mtval2
にゼロ以外の値が書き込まれた場合にはmtval
に格納されている仮想アドレスが示す命令の一部分が格納されている。
mtval2
はWARLレジスタでありゼロもしくはゲスト物理アドレスの2ビットシフトした値が書き込まれている。
5.4.5 マシントラップ命令レジスタ (mtinst
)¶
mtinst
レジスタはMXLENビットの読み書き可能なレジスタであり、図5.38にビットフォーマットを示す。例外が発生しMモードに移行した場合、mtinst
にゼロ以外の値が書き込まれた場合に例外が発生した命令が書き込まれ、ソフトウェアにより例外を処理するための情報として使用される。mtinst
に書き込まれる値については5.6.3節で説明している。
mtinst
はWARLレジスタであり、例外が発生すると実装により自動的に書き込まれ値が保持される。