1.1 硬件虚拟机概述

早在上世纪 70 年代, IBM 就实现了硬件抽象层的虚拟机技术,例如 System 360 、 370 、 CP-40 、 CP-67 。它最初是为了弥补系统架构上的不足而发展起来的。后来,随着虚拟机技术的成熟,对虚拟机需求的不断增加以及硬件性能的逐步提高,硬件抽象层虚拟机在强隔离功能和安全控制方面的优点使它得到了人们的青睐而得以被推广开来 [6] 。

目 前的硬件虚拟机一般都是利用虚拟机监视器作为隔离代码运行环境的中间层。虚拟机监控器的功能是为其上运行的客户操作系统提供硬件映射。从操作系统的角度 看,运行在虚拟机上与运行在其对应的物理计算机系统上是一样的。虚拟机监视器是能够为计算机系统创建高效、隔离的副本的软件。这些副本即为虚拟机。

对 硬件虚拟机来说,平台复制是虚拟机监控器的重要功能,而关键问题是在多个客户操作系统之间分配唯一的底层硬件资源。虚拟机监控器管理着硬件资源,所有的客 户操作系统及其上的应用程序都需要经过虚拟机监控器的控制。当执行某些指令,特别是涉及到共享硬件资源的指令,会通过虚拟机监控器解释这些指令,检查指令 的正确性并执行相关操作,客户软件不会感觉到虚拟机监控器的操作。

目前,学术界针对硬件虚拟机的划分方法主要有两种 [6] :

a)        一种是按照虚拟机监控器在计算机中所处的抽象层的位置划分;

b)        一种是按照虚拟机监控器的实现方式划分;

1.1.1 按照虚拟机监控器所处的位置分类

按照虚拟机监控器在计算机系统中所处的抽象层位置来划分,可以分为两种:

a)        一种是虚拟机监控器直接运行在硬件之上;

b)        一种是虚拟机监控器运行在操作系统之上;

1.1.1.1 运行在硬件之上的虚拟机监控器

直接运行在硬件之上的虚拟机 监控器 ,可以获取访问硬件的最高权限。因此,虚拟机 监控器 可以直接获取并且执行客户操作系统中包括特权级指令在内的所有指令。如图 2.1[6] 所示:

2 . 1 基于硬件的虚拟机

这种架构的优点是:

a)        虚拟机监控器以几乎相同的方式支持所有的客户操作系统;

而缺点是:

a)        至少对于个人计算机的用户来说,安装虚拟机监控器之前必须完全擦除现有的系统,并且在安装虚拟机监控器之后安装客户操作系统,这给用户带来了极大的不便;

b)        需要为虚拟机监控器的输入输出设备编写驱动程序,因为虚拟机监控器直接和输入输出设备交互;

1.1.1.2 运行在操作系统之上的虚拟机监控器

另外一种方法是虚拟机监控器放在已存在的宿主操作系统之上,这个虚拟机监控器也被称为宿主虚拟机,如图 2.2[6] 所示。

这样做的优点是:

a)        安装虚拟机监控器的过程就类似于安装一个典型的应用程序的过程;

b)        虚拟软件能够利用宿主操作系统提供设备驱动和其他基本服务;

缺点则是:

a)        会带来一些性能的损失,因为操作系统的服务要通过更多的软件层次来实现;

宿主虚拟机方式被使用在 VMware 的实现中,它是一个现代的硬件虚拟机,运行于 IA-32 硬件平台之上。

2 . 2 基于操作系统的虚拟机

1.1.2 按照虚拟机监控器的实现方式分类

按照虚拟机监控器的实现方式分类,可以分为:

a)        全虚拟化;

b)        半虚拟化;

1.1.2.1 全虚拟化

虚拟机监控器模拟完整的硬件,使一个未修改的操作系统可以在各种完全不同的微处理器上运行。例如 Bochs 等。

全 虚拟化的实现方法包括直接指令解释和二进制翻译。全虚拟化最直接的实现方法是直接指令解释。但是直接指令解释,对于客户操作系统的性能损失极其严重。二进 制翻译是指把一段二进制指令转换成一段具有同等功能的目标指令。翻译过程本身可能会有相当大的开销,但是如果一段源指令被翻译后的目标指令能够被缓存下 来,以后重复执行该段源指令就会比直接解释执行快得多。因此,对于频繁执行的指令,或者关键指令,可以通过采用二进制翻译的方法来提高虚拟机的性能 ( 例如 QEMU[7] ) 。

目前,市场上许多商业的硬件虚拟机采用了基于动态指令转换的完全虚拟化技术,例如 EMC 公司的 VMware ESX Server 、 VMware Workstation 和 Microsoft 的 Virtual Server 系列产品。由于完全虚拟化不需要修改客户操作系统,因此具有很好的兼容性,而完全虚拟化技术的性能也主要依赖于动态指令转换引擎的设计和实现。

1.1.2.2 半虚拟化

效率最高的虚拟化方法是半虚拟化( paravirtualization )。在半虚拟化中,子操作系统使用一个专门的 API (半虚拟化接口)与虚拟机监控器通信,虚拟机监控器则负责处理虚拟化请求,并将这些请求递交到硬件上。由于有了这个特殊的 API ,虚拟机监控器不需去做耗费资源的指令翻译工作。而且,使用半虚拟化 API 时,虚拟操作系统能够发出更有效的指令 ( 例如 Lguest[8] ) 。然而,半虚拟化也有一个缺点,就是需要修改包含这个特殊 API 的操作系统。而且,这个缺点对于某些操作系统(主要是 Windows )来说更要命,因为它们没有这种 API[6] 。

现 在,半虚拟化是获得最佳性能的方法,因为虚拟操作系统发出的指令不需要翻译。遗憾的是,在某些操作系统中不能完全使用半虚拟化,因为它需要一个特殊版本的 操作系统。在这样环境下,为了确保高性能,可以半虚拟化个别的设备。这意味着,可以通过硬件虚拟化来处理某些指令(如, CPU 发出的指令)。不过,有些特殊设备发出的指令(如, network board 或 graphical interface card )在离开虚拟机之前可以通过准虚拟化驱动被修改。有些厂商提供专门操作系统的准虚拟化驱动包,这些驱动包经常可以单独购买。通常,这些专门的驱动包都物有所值,能够大大地提高设备性能,如网板( network board )和硬盘 [6] 。

1.1.2.3 硬件辅助虚拟化

硬件辅助虚拟化结合全虚拟化和半虚拟化的优点, Intel 和 AMD 提出了通过修改 x86 CPU 指令的语义使其直接支持虚拟化的方案。英特尔公司推出了 VT-i( 支持 Ltanium 架构 ) VT-x (支持 X86 架构)引入新的处理器操作,称为 VMX(Virtual Machine Extensions) 来支持虚拟化。 AMD 推出了新的处理器模式和新的内存管理模式支持虚拟化技术。目前最新版的 Xen , VMware Workstation 等,都已经支持 Intel-VT 和 AMD-V 技术。

1.2 本章小结

硬件虚拟机划分一般按照虚拟机监控器在计算机中所处的位置或者虚拟机监控器的实现方法来划分。

按照虚拟机监控器在计算机抽象层中所处的位置来分,可以分为:

a)        运行在硬件之上的虚拟机监控器;

b)        运行在操作系统之上的虚拟机监控器;

按照虚拟机监控器的实现方法,可以分为:

a)        全虚拟化;

b)        半虚拟化;

硬件辅助虚拟化;

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐