1.3.2 虚拟化分类

1974年,Gerald J. Popek和Robert P. Goldberg在虚拟化方面的著名论文Formal Requirements for Virtualizable Third Generation Architectures中提出了一组称为虚拟化准则的充分条件,也称为波佩克与戈德堡虚拟化需求(Popek and Goldberg Virtualization Requirements),即虚拟化系统必须满足以下三个条件。

(1)资源控制(Resource Control)。虚拟机对于物理资源的访问都应该在Hypervisor的监控下进行,虚拟机不能越过Hypervisor直接访问物理机资源,否则某些恶意虚拟机可能会侵占物理机资源导致系统崩溃。

(2)等价(Equivalence)。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时完全一致,且预先编写的特权指令可以自由地执行,即物理机与虚拟机的运行环境在本质上应该是相同的。对于上层应用来说,在虚拟机和物理机中运行应该是没有差别的。

(3)高效(Efficiency)。绝大多数的客户虚拟机指令应该由主机硬件直接执行,而无须控制程序参与。

该论文为设计可虚拟化计算机架构给出了指导原则,遗憾的是,早期Intel x86架构并不全部符合这三个原则,也就是说,早期x86架构对虚拟化的支持是缺失的,因为其架构包含敏感非特权指令[11](详见2.1.1节)。Robert P. Goldberg还在其博士论文Architectural Principles for Virtual Computer Systems中介绍了两种Hypervisor类型,分别是Type Ⅰ和Type Ⅱ虚拟化,也就是沿用至今的虚拟化分类方法,如图1-5所示。

图1-5 Type Ⅰ和Type Ⅱ虚拟化

注:①管理物理硬件;②实现虚拟化功能。

根据Hypervisor与物理资源和操作系统交互方式的不同,可以将Hypervisor分为两类。Type Ⅰ Hypervisor直接运行在物理硬件资源上,需要承担系统初始化、物理资源管理等操作系统职能。从某种程度上来说,Type Ⅰ Hypervisor可以视为一个为虚拟化而优化裁剪过的内核,可以直接在Hypervisor上加载客户机操作系统。它相当于在硬件和客户机操作系统之间添加了一个虚拟化层,避免了宿主机操作系统对Hypervisor的干预。Type Ⅰ Hypervisor包括Xen、ACRN等。

与Type Ⅰ Hypervisor不同,Type Ⅱ Hypervisor运行在宿主机操作系统中,只负责实现虚拟化相关功能,物理资源的管理等则复用宿主机操作系统中的相关代码。这种类型的Hypervisor更像是对操作系统的一种拓展。KVM就属于Type Ⅱ Hypervisor,它以模块的形式被动态地加载到Linux内核中。Type Ⅱ Hypervisor又名寄宿虚拟机监控系统,它将虚拟化层直接安装到操作系统之上,每台虚拟机就像在宿主机操作系统上运行的一个进程。一般而言,相对于Type Ⅱ Hypervisor,Type Ⅰ Hypervisor系统效率更高,具有更好的可扩展性、健壮性和性能。然而由于Type Ⅱ Hypervisor使用方便,与宿主机操作系统生态兼容,目前大多数桌面用户使用的都是该类型的虚拟机,目前常见的Type Ⅱ Hypervisor有KVM、VMware Fusion、VirtualBox和Parallels Desktop等。