虚拟化的方式多种多样,耳朵很熟悉的一些名字有:全虚拟化,类虚拟化,硬件虚拟化,混合虚拟化等等。这些不同的虚拟化方式,并不是根据同一个标准来分类的,以下介绍三种主要的分类方法,并相应介绍一些目前主流的虚拟化实现方式,以及对应的产品。

从虚拟平台的角度来划分的话,主要分为全虚拟化和类虚拟化:

  1. 全虚拟化是指VMM虚拟出来的平台是现实中存在的平台,因此对于客户机来说,并不知道自己是运行在虚拟的平台上。正因为此,全虚拟化中的客户机操作系统是不需要做任何修改的。

  2. 类虚拟化是指通过对客户机进行源码级的修改,让客户机可以使用虚拟化的资源。由于需要修改客户机内核,因此类虚拟化一般都会被顺便用来优化I/O,客户机的操作系统通过高度优化的I/O协议,可以和VMM紧密结合达到近似于物理机的速度。


对于全虚拟化来说,从虚拟化支持的层次划分,主要分为软件辅助的虚拟化和硬件支持的虚拟化:

  1. 软件辅助的虚拟化是指通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化处理。主要使用的技术是优先级压缩和二进制代码翻译。

a)       优先级压缩是指让客户机运行在Ring 1级别,由于处于非特权级别,所以客户机的指令基本上都会触发异常,然后宿主机进行接管。

b)       但是有些指令并不能触发异常,因此就需要二进制代码翻译技术来对客户机中无法触发异常的指令进行转换,使之无法逃出宿主机的控制。

通过软件级的全虚拟化,可以让一台x86的物理机运行64位操作系统。更有胜者,通过IA64机型模拟古老的Mainframe虚拟机,从而把Mainframe机器的系统迁移至新机型中。

  1. 硬件辅助的虚拟化主要是由于在技术层面上用软件手段达到全虚拟化非常麻烦,而且效率较低,才由Intel等处理器厂商直接在芯片上提供了对虚拟化的支持。硬件直接可以对敏感指令进行虚拟化执行。比如Intel的VT-x技术。


从实现结构来看,主要分为Hypervisor型虚拟,宿主模型虚拟,混合模型虚拟:

  1. Hypervisor虚拟是指,硬件资源之上没有操作系统,而是直接由VMM作为Hypervisor接管,Hypervisor负责管理所有资源和虚拟环境支持。这种结构的主要问题是,硬件设备多种多样,VMM不可能把每种设备的驱动都一一实现,所以此模型支持有限的设备。目前主要的产品是VMware EX Server,是当前最高端和成熟的虚拟化产品。

  2. 宿主模型,是在硬件资源之上有个普通的操作系统,负责管理硬件设备,然后VMM作为一个应用搭建在宿主OS上负责虚拟环境的支持,在VMM之上再加载客户机。此方式由底层操作系统对设备进行管理,因此VMM完全不用操心实现设备驱动。而它的主要缺点VMM对硬件资源的调用依赖宿主机,因此效率和功能受宿主机影响较大。目前主要产品是VMware Server,Virtual PC/Server。

  3. 混合模型,是综合了以上两种实现模型的虚拟化技术。首先VMM直接管理硬件,但是它会让出一部分对设备的控制权,交给运行在特权虚拟机中的特权操作系统来管理(称之为Domain 0)。VMM和Domain 0合作搭建起虚拟环境,在其上运行客户虚拟机(Domain N)。这个模型还是具有一些缺点,由于在需要特权操作系统提供服务时,就会出现上下文切换,这部分的开销会造成性能的下降。目前主要产品有Windows 2008, Xen。