INTEL手册VT 26章记录
进入VM会执行以下几步:
- 基础检查确保可以进入VM
- host-state域检查确保VMX non-root操作,VMCS正确设置以支持下次VM exit
- 以下会并行或者任意顺序
- 进入VM后,检查guest-state域,保证与IA-32和64架构一致
- 处理器状态来自guest-state域基于VMCS控制
- Address-range monitoring清除
- MSRs从MSR-load域加载
- 如果VMLAUNCH执行,VMCS状态被置为lanunched
- 一个事件注入到客户机上下文
(1-4检查可能会造成进入VM失败)
加载客户机状态
- 一些状态从guest-state域读入
- 一些状态取决于VM-entry controls域
- 页目录指针从特定的CR寄存器读入
(载入和检查VMCS乱序执行)
加载客户机CR、DR、MSRs寄存器
- CR0从CR0域加载,但是以下几个位永远不会受VM entry影响:4 15:6 17 28:19 29 30
- CR3 CR4分别从对应的域中加载
- DR7受相关控制位影响
- IA32_SYSENTER寄存器从对应域加载,其他MSRs受相应控制位影响
- SMBASE寄存器不收VM entries影响,除了从SMM返回外
加载客户机SR段寄存器和DT寄存器
- CS, SS, DS, ES, FS, GS, TR, LDTR从对应域加载
- GDTR IDTR用base和limit域加载
加载客户机RIP RSP RFLAGS
从对应域加载,高位在非64位下应为0
加载页目录指针表项
如果开启了PAE,进入VM通过PAE分页内部加载PDPTEs,其他寄存器受相应控制位,如EPT控制位
更新客户机寄存器状态
进入VM根据以下来使缓存映射无效:
- VPID控制位为0时,通过VPID来无效EP4TA值(EPTP寄存器51:12位,EPT页表指针寄存器)
- 控制位为1时,不会无效映射
清除Address-Range Monitoring
进入VM清除所有Address-Range Monitoring
加载MSRS
从MSR-load域加载(取决于MSR-load count域),会检查一些条件,可能会刷新TLB P1105
事件注入
当interruption-information域被置位,会根据中断类型分别处理
定向事件注入
在客户机在家完后,通过指定一个IDT向量完成事件注入。如果在此过程中发生嵌套异常,行为取决于exception bitmap