1、虚拟化概念(Virtualization)
虚拟化是值计算机元件在虚拟的基础上运行,用逻辑表示资源,摆脱物理的限制。虚拟化在系统中加入一个虚拟化层,虚拟化层将下层资源封装,抽象为另一种形式的资源,提供给上层使用。虚拟化可以将一份资源抽象为多份,也可以将多份资源抽象成一份(通常为前者)。
在虚拟化的世界里,要分清Host和Guest,真实的操作系统称为Host,虚拟的操作系统称为Guest。
2、虚拟机(Virtual Machine)
虚拟机是由虚拟化层提供的高效、独立的计算机系统,拥有自己的虚拟硬件(CPU,内存,网络设备,存储设备等),对于上层软件,虚拟机就是真实的计算机,虚拟机监控器(VMM Virtual Machine Monitor)负责Host和Guest之间的通信,其示意图如下:
VM有如下特征:
- 同质:量可以不同,但质与物理机本质相同,例如CPU的ISA(指令集架构,Instruction Set Architecture)必须相同;
- 高效:性能与物理机接近,大多数指令应在硬件直接执行,只有少量由VMM模拟处理),因此wine这类模拟器不是VM;
- 资源可控,VMM对物理机,虚拟机的资源绝对可控;
3、完全虚拟化和半虚拟化(Full Virtualization & Paravirtualization)
- 完全虚拟化是指所抽象的 VM 具有完全的物理机特性,OS 在其上运行不需要任何修改,非常方便,但它的缺点是效率不高(特别是在Intel VT & AMD-V 硬件虚拟化支持前)。典型的有 VMWare, Virtualbox, Virtual PC, KVM-x86等。
- 半虚拟化需 OS 协助的 虚拟化,在其上运行OS 需要修改。起初采用主是为了解决 x86 体系结构上完全虚拟化的困难(没有 Intel VT & AMD-V 硬件虚拟化支持前;且不屑于动态扫描指令修补之方法的性能),后来则主要是为了提高虚拟化效率。典型有 Xen, KVM-PowerPC 等。
之所有会有这两个流派,是因为处理器把指令分为特权态(supervisor mode)和用户态(user mode)(如下图所示),大部分的指令都可以运行在用户态上,但一些敏感指令,如可以读写系统关键资源(影响处理器和设备状态行为的寄存称关键资源或特权资源)的指令,必须运行在特权态上。如果执行特权指令时处理器的状态不在内核态,通常会引发一个异常而交由系统软件来处理这个“非法访问”(陷入)。
引入了VMM之后,示意图如下:
从上图可以看出,Guest OS是运行在用户态上,当执行到特权指令时,会陷入到 VMM 模拟执行(陷入-模拟)。从这个角度上来说,完全虚拟化是指当Guest OS运行到特权指令时,VMM将特权指令”翻译“成陷入指令,这个”翻译“过程对系统性能有损耗。而半虚拟化是指事先修改 Guest OS 的代码,避免Guest OS执行特权执行的过程,因此它的性能接近于物理机。
4、主要虚拟化流派
了解了完全虚拟化和半虚拟化的本质之后,下来再来看看主要的虚拟化流派。
- 基于二进制翻译的全虚拟化:其主要思想是在执行时将 VM 上执行的 Guest OS 之指令,翻译成 x86 ISA 的一个子集,其中的特权指令被替换成陷入指令;翻译过程与指令执行交叉进行,不含特权指令的用户态程序可以不经翻译直接执行,该技术为 VMWare Workstation,VMWare ESX Server 早期版本,Virtual PC 以及 QEMU 所采用。
- 基于扫描和修补的全虚拟化:VMM 会在 VM 运行每块指令之前对其扫描,查找敏感指令;补丁指令块会在 VMM 中动态生成,通常每一个需要修补的指令会对应一块补丁指令;特权指令被替换成一个外跳转,从 VM 跳转到 VMM,在 VMM 中执行动态生成的补丁指令块;当补丁指令块执行完后,执行流再跳转回 VM 的下一条指令处继续执行;Oracle 的 Virtualbox 即采用该技术。
- OS协助的半虚拟化:通过修改 Guest OS 的代码,将含有敏感指令的操作,替换为对 VMM 的超调用 (Hypercall,类似 OS 的系统调用,可将控制权转移到 VMM);该技术的优势在于 VM 的性能能接近于物理机,缺点在于需要修改 Guest OS;该技术因 Xen 项目而广为人知。
- 硬件协助的虚拟化:引入新的处理器运行模式和新的指令,使得 VMM 和 Guest OS 运行于不同的模式下,Guest OS 运行于受控模式,原来的一些特权指令在受控模式下全部会陷入 VMM,这样就解决了部分非特权的敏感指令的陷入 — 模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提高了陷入 — 模拟时上下文切换的效率。该技术的引入使 x86 可以很容易地实现完全虚拟化。故皆被几乎所有之前分歧流派各方所采用,如: KVM-x86,新版 VMWare ESX Server 3,Xen 3.0。
5、VMM模型(Virtual Machine Monitor)
1)宿主模型(OS-hosted VMM)
VMM 通过调用 Host OS 的服务来获得资源,实现 CPU,内存和 I/O 设备的虚拟化,VMM 创建出 VM 后,通常将 VM 作为 Host OS 的一个进程参与调度;VMM 模块负责 CPU 和内存虚拟化,由 ULM 请求 Host OS 设备驱动,实现 I/O 设备的虚拟化。
优点:可以充分利用现有 OS 的设备驱动,VMM 无需自己实现大量的设备驱动,轻松实现 I/O 设备的虚拟化。
缺点:资源受 Host OS 控制,VMM 需调用 Host OS 的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。
采用该结构的 VMM 有:VMware Workstation, VMWare Server (GSX), Virtual PC,Virtual Server, KVM(早期)
2)Hypervisor 模型 (Hypervisor VMM)
该结构中,VMM 可以看作一个为虚拟化而生的完整 OS,掌控有所有资源(CPU,内存,I/O 设备),VMM 承担管理资源的重任,其还需向上提供 VM 用于运行 Guest OS,因此 VMM 还负责虚拟环境的创建和管理。
优点:因 VMM 同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM 的安全只依赖于 VMM 的安全。
缺点:因 VMM 完全拥有物理资源,因此,VMM 需要进行物理资源的管理,包括设备的驱动,而设备驱动的开发工作量是很大的,这对 VMM 是个很大的挑战。
采用该结构的 VMM 有:VMWare ESX Server, WindRiver Hypervisor, KVM(后期)
3)混合模型((Hybrid VMM)
该结构是上述两种模式的混合体,VMM 依然位于最底层,拥有所有物理资源,但 VMM 会主动让出大部分 I/O 设备的控制权,将它们交由一个运行在特权 VM 上的特权 OS 来控制。VMM 只负责 CPU 和内存的虚拟化,I/O 设备的虚拟化由 VMM 和特权 OS 共同完成.
优点:可利用现有 OS 的 I/O 设备驱动;VMM 直接控制 CPU 和内存等物理资源,虚拟化效率较高;若对特权 OS 的权限控制得当,虚拟机的安全性只依赖于 VMM。
缺点:因特权 OS 运行于 VM 上,当需要特权 OS 提供服务时,VMM 需要切换到特权 OS,这里面就产生上下文切换的开销。
采用该结构的 VMM 有:Xen, SUN Logical Domain35