AMD-V(SVM)についてちょっと勉強してみた まとめ
SVMはIntel VTと同じく、Guest OSを動作させるCPUの専用モードとモード切り替えの拡張命令を持つ。
そのままCPUで実行するとマズい特権命令/レジスタアクセスはホスト側でインターセプトする。
また、ホスト/ゲスト間のコンテキストスイッチもCPUでやる(はず)。
VMCBと呼ばれるメモリ上の構造体に、ゲストのCPUステートやインターセプトの設定を記録する。
4KBアライメントされた4KBの領域を必要とする。
Control AreaとState Save Areaに分かれている。
動作遷移
VMCBの為のメモリ領域を確保
↓
インターセプトする命令/イベント、コントロールビット、プロセッサステートを設定
↓
RAX(EAX)レジスタへVMCBの物理アドレスを代入
↓
VMRUN命令でゲストを起動
↓
ゲストが実行される
↓
インターセプトがかかって制御がホストへ戻る(これを#VMEXITと呼ぶ)
↓
要因を調べ、適切な処理を行う
↓
ゲストへ復帰する
疑問点
・インターセプトがかかった時に飛ぶアドレスはどこで指定している?
・ゲストへ復帰する時に使う命令はVMLOADで良いの?
・ハードウェア割り込みがかかった時、ゲストが走っていたらどうなる?
割り込みハンドラへゲストのステート保存/復帰を実装する必要があるのか、それとも今迄の割り込みハンドラの実装でハードがどうにかしてくれるのか。