常见的虚拟化技术 
虚拟化技术有很多实现方式,比如根据虚拟化的程度和级别,有软件虚拟化和硬件虚拟化,全虚拟化和半虚拟化。

   软件虚拟化

   软件虚拟化,顾名思义,就是采用纯软件的方法在在现有的物理平台上实现物理平台访问的截获和模拟,该物理平台往往不支持硬件虚拟化。

常见的软件虚拟化技术QEMU,是通过纯软件来仿真X86平台处理器的指令,然后解码和执行,该过程并不在物理平台上直接执行,而是通过软件模拟实现,因此往往性能比较差,但是可以在同一平台上模拟出不同架构平台的虚拟机。

VMware则采用了动态二进制翻译技术。VMM在可控的范围内,允许客户机的指令在可控的范围内直接运行。客户机指令在运行前会被VMM扫描,其中突破VMM限制的指令被动态替换为可以在物理平台上直接运行的安全指令,或者替换为对VMM的软件调用。因此其性能上比QEMU有大幅提升,但是其失去了跨平台虚拟化的能力。

硬件虚拟化

   硬件虚拟化,简单来说,就是物理平台本身提供了对特殊指令的截获和重定向的硬件支持,新的硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化,从而提升性能。

   比如X86平台,CPU带有特别优化过的指令集来控制虚拟过程,通过这些指令集,VMM会将客户机置于一种受限模式下运行,一旦客户机试图访问硬件资源,硬件会暂停客户机的运行,将控制权交回给VMM处理。同时,VMM还可以利用硬件的虚拟化增强技术,将客户机对硬件资源的访问,完全由硬件重定向到VMM指定的虚拟资源。

   由于硬件虚拟化可提供全新的架构,支持操作系统直接在上面运行,无需进行二进制翻译转换,减少的性能开销,极大地简化了VMM的设计,从而使VMM可以按标准编写,通用性更好,性能更强。

需要说明的是,硬件虚拟化技术是一套解决方案,完整的情况需要CPU、主板芯片组、BIOS和软件的支持。Intel在其处理器产品线中实现了Intel VT虚拟化技术(包括Intel VT-x/d/c)。AMD也同样实现了其芯片级的虚拟化技术AMD-V。

全虚拟化

   完全虚拟化技术又叫硬件辅助虚拟化技术,最初所使用的虚拟化技术就是全虚拟化(Full Virtualization)技术,它在虚拟机(VM)和硬件之间加了一个软件层Hypervisor,或者叫做虚拟机管理程序或虚拟机监视器(VMM)。

完全虚拟化技术几乎能让任何一款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,性能方面不如裸机,因为VMM需要占用一些资源,给处理器带来开销。

半虚拟化

  半虚拟化技术是后来才出现的技术,也叫做准虚拟化技术,现在比较热门,它就是在全虚拟化的基础上,把客户操作系统进行了修改,增加了一个专门的API,这个API可以将客户操作系统发出的指令进行最优化,即不需要VMM耗费一定的资源进行翻译操作。因此VMM的工作负担变得非常的小,因此整体的性能也有很大的提高。不过缺点就是,要修改包含该API的操作系统,但是对于某些不含该API的操作系统(主要是Windows)来说,就不行能用这种方法。

半虚拟化技术的优点是性能高。经过半虚拟化处理的服务器可与VMM协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。它的客户操作系统(Guest OS)集成了虚拟化方面的代码。该方法无需重新编译或引起陷阱,因为操作系统自身能够与虚拟进程进行很好的协作。