通过前面的介绍可知,指令的虚拟化是通过“陷入再模拟”的方式实现的,而IA32架构有19条敏感指令不能通过这种方法处理,导致了虚拟化漏洞。为了解决这个问题,Intel VT中的VT-x技术扩展了传统的IA32处理器架构,为处理器增加了一套名为虚拟机扩展(Virtual Machine Extensions,VMX)的指令集,该指令集包含十条左右的新增指令来支持与虚拟化相关的操作,为IA32架构的处理器虚拟化提供了硬件支持。此外,VT-x引入了两种操作模式,统称为VMX操作模式。
(1)根操作模式〔VMX Root Operation):VMM运行所处的模式。以下简称根模式。
(2)非根操作模式(VMX Non-Root Operation):客户机运行所处的模式,以下简称非根模式。
在非根模式下,所有敏感指令(包括19条不能被虚拟化的敏感指令)的行为都被重新定义,使得它们能不经虚拟化就直接运行或通过“陷入再模拟”的方式来处理;在根模式下,所有指令的行为和传统IA32一样,没有改变,因此原有的软件都能正常选行。其基本思想的结构图如图3-4所示。
图3-4 Intel VT-x的基本思想
这两种操作模式与IA32特权级0~特权级3是正交的,即两种操作模式下都有相应的特权级0~特权级3。因此,在使用VT-x时,描述程序运行在某个特权级,应具体指明处于何种模式。
作为传统IA32架构的扩展,VMX操作模式在默认情况下是关闭的,因为传统的操作系统并不需要使用这个功能。当VMM需要使用这个功能时,可以使用VT-x提供的新指令来VMXON来打开这个功能,用VMXOFF来关闭这个功能,VMX操作模式如图3-5所示:
图3-5 VMX操作模式
(1)VMM执行VMXON指令进入VMX操作模式,此时CPU处于VMX根操作模式,VMM软件开始执行。(www.xing528.com)
(2)VMM执行VMLAUNCH或VMRESUME指令产生VM-Entry,客户机软件开始执行,此时CPU从根模式转换成为非根模式。
(3)当客户机执行特权指令,或者当客户机运行时发生了中断或异常,VMExit被触发而陷入VMM,CPU自动从非根模式转换切换到根模式。VMM根据VM-Exit的原因做相应处理,然后转到步骤(2)继续运行客户机。
(4)如果VMM决定退出,则执行VMXOFF关闭VMX操作模式。
另外,VT-x还引入了VMCS来更好地支持处理器虚拟化。VMCS是保存在内存中的数据结构,由VMCS保存的内容一般包括以下几个重要的部分:
(1)vCPU标识信息:标识vCPU的一些属性。
(2)虚拟寄存器信息:虚拟的寄存器资源,开启Intel VT-x机制时,虚拟寄存器的数据存储在VMCS中。
(3)vCPU状态信息:标识vCPU当前的状态。
(4)额外寄存器/部件信息:存储VMCS中没有保存的一些寄存器或者CPU部件。
(5)其他信息:存储VMM进行优化或者额外信息的字段。
每一个VMCS对应一个虚拟CPU需要的相关状态,CPU在发生VM-Exit和VM-Entry时都会自动查询和更新VMCS,VMM也可以通过指令来配置VMCS来影响CPU。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。