VT 2016/12/09
INTEL手册VT 26章记录

进入VM会执行以下几步:

  1. 基础检查确保可以进入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