1.开启和进入VMX操作模式.
@设置CR4寄存器的 bit 13.即 CR4.VMXE = 1 -->Enable
@执行vmxon 指令,进入VMX root操作状态.
(如果 CR4.VMXE = 0 ,执行vmxon 指令会导致一个无效指令操作)
@执行vmxoff 指令,离开VMX root操作状态.
@执行完vmxoff 指令后,被置位的 CR4.VMXE会被设置为 0 .
2.在执行 vmxon 指令前,应当分配 4kb 内存区域,使得处理器支持VMX操作.
3.VMX操作状态限定value只能加载到 CR0和CR4 寄存器中.
而且以下bits必须被设置为1:
CR0.PE,CR0.NE,CR0.PG 和 CR4.VMXE.
@这也指明VMX操作状态只支持页保护模式,
所以guest software 不能运行在非页保护模式和实模式下.
4.VMCS--虚拟机控制结构,来封装所有虚拟机需要维护的信息.
VMCS由以下指令来操作:
vmclear:清空VMCS结构
vmptlrd:修改VMPTR指针
vmread:读取VMCS
vmwrite:写入VMCS
5.当前运行的虚拟机的VMCS通过一个VMPTR指针来指定,该指针包含4kb边界对其的VMCS物理存储地址.
对应不同虚拟机的多个VMCS结构都能被激活,但每次只允许一个VMCS结构在给定的Processor上运行.
6.VMCS的基本格式:
VMCS中保存着各种不同种类的信息,为guest OS 和 host OS 保存的状态信息,
不再限于传统的结构状态,还包括了像segment寄存器等结构隐藏部分的信息,
在保持虚拟机执行行为和普通机上的执行行为一致.
VMCS由六个部分组成:
@ 状态域:
1.Guset-State Area --> #寄存器状态 #中断状态
: 当VM exits 和 load VM entires 的时候,将处理器状态保存在 guest-state area.
2.Host-state area --> #寄存器状态
: 当VM exits的时候,处理器从Host state area 加载状态到自身.
@控制域:
3.VM-Execution control filelds (VM运行控制) --> #Pin-based 运行控制 #Processor-based 运行控制. #位图域
:这个域控制着处理器在VMX non-root 操作状态下的operation.
#Pin-based 运行控制 (异步事件)
@ Bit 0:set 1,外部中断存在.引发 VM exits
@ Bit 3:set 1,NMI 存在.引发 VMExits
#Processor-Based 运行控制 (同步事件)
4.VM-entry contorl filelds:(VM进入控制) --> #控制位图 #MSR控制 #事件引发的控制
:这个域控制VM的进入
5.VM-exit control filelds:(VM退出控制) --> #控制位图 #MSR控制
:这个域控制VM的退出
@VM退出信息:
6.VM-exit information filelds. (VM退出信息) -->#VM退出信息 #向量化事件退出信息 #取决于事件传送 #取决于指令执行
:这个域保存VM exits时的信息.并且描述引发 VM exit的原因. 这个域read-only.