1.2.2 软件虚拟化
软件虚拟化是指通过软件的方法,让客户机的特权指令陷入异常,从而触发宿主机进行虚拟化处理。主要使用的技术是优先级压缩和二进制代码翻译。
优先级压缩是指让客户机运行在Ring 1级别,由于处于非特权级别,所以客户机的指令基本上都会触发异常,然后宿主机进行接管。
但是,有些指令并不能触发异常,因此就需要二进制代码翻译技术来对客户机中无法触发异常的指令进行转换,转换之后仍然由宿主机进行接管。
实现虚拟化过程中重要的一步在于,虚拟化层能够将计算元件对真实的物理资源的直接访问加以拦截,将其重新定位到虚拟的资源中进行访问。那么,对于软件虚拟化和硬件虚拟化的划分在于,虚拟化层是通过软件的方式,还是通过硬件辅助的方式,将对真实的物理资源的访问进行“拦截并重定向”。
软件虚拟化解决方案,即使用软件的方法实现对真实物理资源的截获与模拟,通常所说的虚拟机就是一种纯软件的解决方案。在软件虚拟化解决方案中,客户操作系统在大部分情况下都是通过虚拟机监控器(VMM)与硬件通信,然后由虚拟机监控器决定是否对系统上的所有虚拟机进行访问。
常见的软件虚拟机如QEMU,它是通过软件的方式来仿真x86平台处理器的取指、解码和执行。客户机的执行并不在物理平台上直接执行。由于所有的处理器指令都是由软件模拟而来,所以性能通常比较差,但是可以在同一平台上模拟不同架构平台的虚拟机。
另外一个软件虚拟化的工具为VMware,它采用了动态二进制代码翻译技术。Hypervisor运行在可控的范围内,客户机的指令在真实的物理平台上直接运行。当然,客户机指令在运行前会被Hypervisor扫描,如果有超出Hypervisor限制的指令,那么这些指令会被动态替换为可在真实的物理平台上直接运行的安全指令,或者替换为对Hypervisor的软件调用。
使用软件虚拟机的解决方案优势比较明显,如成本比较低廉、部署方便、管理维护简单等。但是,这种解决方案也有缺陷,在部署时会受到比较多的限制。
第一个缺陷是会增加额外的开销。在软件虚拟化解决方案中,虚拟机监控器是部署在操作系统上的。也就是说,此时对于宿主机操作系统来说,虚拟机监控器跟普通的应用程序是一样的。在这种情况下,在虚拟机监控器上再安装一个操作系统,那么软件与硬件的通信会怎么处理呢?举一个简单的例子,在一台主机上安装的操作系统是Linux,然后部署了一个虚拟机监控器,在虚拟机监控器上又安装了一个Windows 7的操作系统,然后用户使用Windows 7操作系统的记事本编辑文本文件。在这种情况下,Windows 7操作系统的数据要转发给虚拟机监控器,然后虚拟机监控器再将数据转发给Linux操作系统。显然,在这个转发的过程中,多了一道额外的二进制转换过程。而这个转换过程必然会增加系统的负载性和硬件资源的额外开销,从而降低了使用性能。
第二个缺陷是客户操作系统受到虚拟机环境的限制。例如,现在有两个操作系统,分别是32位的与64位的。假设64位的操作系统必须安装在支持64位操作系统的硬件上,那么在32位的操作系统上,此时即使采用虚拟化技术,也不能够安装64位的操作系统,因为硬件不支持。可见,在软件虚拟化解决方案中,其相关应用并不能够突破系统本身的硬件设置。在实际工作中,这是很致命的一个缺陷。例如,现在管理员需要测试某个应用程序在64位操作系统上的稳定性,但是硬件本身不支持64位操作系统,此时虚拟化技术将无能为力。管理员可能需要重新购买一台主机来进行测试。
另外,在软件虚拟化解决方案中,Hypervisor在物理平台上的位置为传统意义上的操作系统所处的位置,虚拟化操作系统的位置为传统意义上的应用程序所处的位置,系统复杂性的增加和软件堆栈复杂性的增加意味着软件虚拟化解决方案难于管理,会增大系统的可靠性和安全性。