AMD-V(SVM)についてちょっと勉強してみた まとめ

SVMIntel VTと同じく、Guest OSを動作させるCPUの専用モードとモード切り替えの拡張命令を持つ。

そのままCPUで実行するとマズい特権命令/レジスタアクセスはホスト側でインターセプトする。
また、ホスト/ゲスト間のコンテキストスイッチもCPUでやる(はず)。

VMCBと呼ばれるメモリ上の構造体に、ゲストのCPUステートやインターセプトの設定を記録する。
4KBアライメントされた4KBの領域を必要とする。
Control AreaとState Save Areaに分かれている。

動作遷移

VMCBの為のメモリ領域を確保

インターセプトする命令/イベント、コントロールビット、プロセッサステートを設定

RAX(EAX)レジスタへVMCBの物理アドレスを代入

VMRUN命令でゲストを起動

ゲストが実行される

インターセプトがかかって制御がホストへ戻る(これを#VMEXITと呼ぶ)

要因を調べ、適切な処理を行う

ゲストへ復帰する

疑問点

インターセプトがかかった時に飛ぶアドレスはどこで指定している?
・ゲストへ復帰する時に使う命令はVMLOADで良いの?
・ハードウェア割り込みがかかった時、ゲストが走っていたらどうなる?
 割り込みハンドラへゲストのステート保存/復帰を実装する必要があるのか、それとも今迄の割り込みハンドラの実装でハードがどうにかしてくれるのか。