1.1 Smart-VM 虚拟化层
在使用 Intel-VT 技术之前, Smart-VM 需要先激活 VMX 模式。为了激活 VMX 模式,处理器需要先进入保护模式。
当处理器在保护模式下未进入 VMX 模式的时候,跟普通处理器的保护模式操作是一样的。当处理器激活 VMX 模式,进入 VMX 根操作模式时,基本上跟正常的处理器在保护模式下的操作是一样的,但是 VMX 根操作模式多了几条操作 VMX 模式的指令。
VMX 非根操作模式下虚拟的是保护模式。但是跟正常的保护模式有差别,比如说当客户操作系统在 VMX 非根操作模式下运行的时候,需要访问硬件资源的时候,就需要回到 VMX 根模式,交由虚拟机监控器处理。
在 VMX 架构中,虚拟机监控器放在 VMX 的根操作模式下,用于管理计算机的硬件资源,同时为客户操作系统虚拟他们所需的虚拟硬件资源。客户操作系统运行在 VMX 非根操作模式下。
1.2 虚拟服务分发器
虚拟服务分发器在 Smart-VM 虚拟化层所处的位置如图 5.4 所示。
虚拟服务分发器会维护一种虚拟服务表,这张表的每个条目对应的是一个服务函数。当处理器从非根操作模式退出到根操作模式下的时候,都可以从这个虚拟服务表中找到相应的服务函数进行处理。从非根操作模式退出到根操作模式下的基本原因存放在 Basic VM-Exit Information 域。
1.3 激活 VMX 模式
1.3.1 激活 VMX 模式的条件
第一代 Intel-VT 技术,在激活 VMX 模式的时候,需要将 CR0.PE , CR0.NE , CR0.PG , CR4.VMXE 设置为 1 ,即开启 VMX 模式需要先开启保护模式和分页机制。
1.3.2 激活 VMX 模式的流程
图 7 . 1 判断和设置进入 VMX 所需条件的流程图
图 7.1 显示了 Smart-VM 激活 VMX 模式的流程图:
a) 开启保护模式和虚拟内存机制:在加载程序的时候,已经开启了保护模式和分页机制。具体参看引导程序和加载程序部分;
b) 判断是否支持 CPUID 指令;
c) 判断该处理器是否有支持 Intel-VT 技术;
d) 开启 VMX 操作:
i. 激活 VMX 指令操作:置 IA32_FEATURE_CONTROL.bit2 为 1 ;
ii. 锁定 MSR 寄存器:置 IA32_FEATURE_CONTROL.bit0 为 1 ;
iii. 置 CR0.NE , CR4.VME 为 1 ;
iv. 设置 VMCS revision id ;
v. 执行 VMXON 指令,激活 VMX 模式;
1.4 CPU 虚拟化
1.4.1 实模式虚拟化
真实的机子在启动的时候,进入的是实模式,然后从实模式跳转到保护模式。虚拟机监控器也需要虚拟这个过程。但是当处理器进入 VMX 非根操作模式是,处理器只有虚拟 8086 模式和保护模式两种。因此,要虚拟实模式,一般采用以下两种方式:
a) 实现一个模拟实模式的模块;
b) 利用虚拟 8086 模式;
Smart-VM 采用第二种方法来虚拟实模式。
利用虚拟 8086 模式来实现实模式的虚拟化同样也有两种方法:
a) 利用保护模式下的虚拟 8086 模式;
b) 利用 VMX 非根操作操作模式下的保护模式下的虚拟 8086 模式;
图 7.2 的着色部分显示了虚拟 8086 模式在处理器各个模式中所处的位置。如果利用保护模式下的虚拟 86 模式,那么需要进行保护模式和 VMX 模式之间的切换,因此,我们采用第二种方法,即使用 VMX 非根操作模式下的保护模式下的虚拟 8086 模式。
图 7 . 2 虚拟 8086 模式
虚拟 8086 模式在保护模式下是运行在特权级 3 的,因此跟实模式还是有一些差别的:
1. 不能运行特权级指令;
2.