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が維持される。 .. figure:: hypervisor_mstatus.PNG :alt: 図5.33:ハイパーバイザー拡張が実装されている場合のマシンステータスレジスタ(mstatus) 図5.33:ハイパーバイザー拡張が実装されている場合のマシンステータスレジスタ(mstatus) .. figure:: rv32_mstatus.PNG :alt: RV32時のハイパーバイザー拡張が実装されている場合のマシンステータスレジスタ(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``\ のスーパーセットではない。 +---+---+---+-----------------------------------------------------------+ | M | M | M | 影響 | | P | P | P | | | R | V | P | | | V | | | | +===+===+===+===========================================================+ | 0 | - | - | 通常アクセス; 現在の特権モードと仮想モードが適用される。 | +---+---+---+-----------------------------------------------------------+ | 1 | 0 | 0 | UレベルアクセスのHSレベル変換と保護のみ適用される。 | +---+---+---+-----------------------------------------------------------+ | 1 | 0 | 1 | HSレベルアクセスのHSレベル変換と保護のみ適用される。 | +---+---+---+-----------------------------------------------------------+ | 1 | - | 3 | Mレベルアクセスにより、アドレス変換は適用されない。 | +---+---+---+-----------------------------------------------------------+ | 1 | 1 | 0 | VUレベルアクセスにより、2ステージアドレス変換と保護が適用される。HSレベルのMXRビットによりすべての実行ペー | | | | | ジが読み込み可能となる。\ ``vsstatus.MXR``\ により実行可能なページに対してVS変換ステージにお | | | | | いて読み込み可能フラグも適用されるが、ゲストー物理変換ステージにおいては読み込み可能のみ適用される。 | +---+---+---+-----------------------------------------------------------+ | 1 | 1 | 1 | VSレベルアクセスにより2ステージアドレス変換と保護が適用される。HSレベルのMXRビットによりすべての実行ページ | | | | | が読み込み可能となる。\ ``vsstatus.MXR``\ により実行可能なページに対してVS変換ステージにおい | | | | | て読み込み可能フラグも適用させるが、ゲストー物理変換ステージにおいては読み込み可能のみ適用される。HSレベルのSU | | | | | Mビットの代わりに\ ``vsstatus.SUM``\ が適用される。 | +---+---+---+-----------------------------------------------------------+ 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)を示す。 .. figure:: mip_standard_portion.PNG :alt: 図5.35:mipの標準的なビット配置 図5.35:mipの標準的なビット配置 .. figure:: mie_standard_portion.PNG :alt: 図5.36:mieの標準的なビット配置 図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``\ 以外の例外の情報を格納するために使用され、ソフトウェアにより例外を処理するために使用される。 .. figure:: mtval2.PNG :alt: 図3.37:マシン第2トラップ値レジスタ 図3.37:マシン第2トラップ値レジスタ ゲストページフォルト例外により動作が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節**\ で説明している。 .. figure:: mtinst.PNG :alt: 図5.38:マシントラップ命令レジスタ(mtins) 図5.38:マシントラップ命令レジスタ(mtins) ``mtinst``\ は\ **WARL**\ レジスタであり、例外が発生すると実装により自動的に書き込まれ値が保持される。