浅谈虚拟化技术
虚拟化定义
虚拟化技术(Virtualization)是一种资源管理(优化)技术,将计算机的各种物理资源(e.g. CPU、内存以及磁盘空间、网络适配器等 I/O 设备)予以抽象、转换,然后呈现出来的一个可供分割并任意组合为一个或多个(虚拟)计算机的配置环境。
虚拟化技术根据对象类型不同可分为:
- 平台虚拟化(Platform Virtualization):针对计算机和操作系统的虚拟化。
- 资源虚拟化(Resource Virtualization):针对特定的系统资源的虚拟化,如内存、存储、网络资源等。
- 应用程序虚拟化(Application Virtualization):包括仿真、模拟、解释技术等,如 Java 虚拟机(JVM)。
这里我们主要讨论的是平台虚拟化。
虚拟机监控器VMM(Hypervisor)
虚拟机监控器(Virtual Machine Monitor,VMM),也叫做Hypervisor,功能是管理真实的物理硬件平台,并为每个虚拟客户机提供对于的虚拟硬件平台
虚拟化系统结构的三个基本条件:
- 资源控制(Resource Control)。控制程序必须能够管理所有的系统资源。
- 等价性(Equivalence)。在控制程序管理下运行的程序(包括操作系统),除时序和资源可用性之外的行为应该与没有控制程序时的完全一致,且预先编写的特权指令可以自由地执行。
- 效率性(Efficiency)。绝大多数的客户机指令应该由主机硬件直接执行而无需控制程序的参与。
满足这些条件的控制程序才可以被称为虚拟机监控器VMM(Hypervisor)
Hypervisor两种类型
类型二(寄居或托管 Hypervisor):VMM 运行在传统的操作系统上,就像其他计算机程序那样运行。
特点:
- VMM 作为应用程序运行在主操作系统环境内
- 运行效率一般较类型 I 低
实现案例:
- VMware 5.5 以前版本
- Xen 3.0 以前版本
- Virtual PC 2004
类型一(原生或裸机 Hypervisor):这些虚拟机管理程序直接运行在宿主机的硬件上来控制硬件和管理客户机操作系统。
特点:
- 需要硬件支持
- VMM 作为主操作系统
- 运行效率高
实现案例:
- VMware 5.5 及以后版本
- Xen 3.0 及以后版本
- Virtual PC 2005
- KVM
全虚拟化技术
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行。
半虚拟化技术
半虚拟化是一种通过修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在半虚拟化虚拟机中,部分硬件接口以软件的形式提供给 Guest OS,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供。例如,Guest OS 把切换页表的代码修改为调用 Hypercall 来直接完成修改影子 CR3 寄存器和翻译地址的工作。由于不需要产生额外的异常和模拟部分硬件执行流程,半虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen。
基于硬件辅助的全虚拟化
目前主要有Intel的VT-x和AMD的AMD-V这两种技术。其核心思想都是通过引入新的指令和运行模式,使VMM和Guest OS分别运行在不同模式(ROOT模式和非ROOT模式)下,且Guest OS运行在Ring 0下。通常情况下,Guest OS的核心指令可以直接下达到计算机系统硬件执行,而不需要经过VMM。当Guest OS执行到特殊指令的时候,系统会切换到VMM,让VMM来处理特殊指令。