虚拟化(Virtualization)是资源的逻辑表示,它不受物理限制的约束。具体的,虚拟化技术的实现形式是在系统中加入一个虚拟化层,虚拟化层将下层的资源抽象成另一种形式的资源,提供给上层使用。通过空间上分割、时间上分时以及模拟,虚拟化可以将一份资源抽象成多份。反过来,虚拟化也可以将多份资源抽象成一份。虚拟化技术以各种形式存在已经有四十年之久了,目前出现了网络虚拟化、微处理器虚拟化、文件虚拟化和存储虚拟化等技术。
1.1 形形色色的虚拟化
为了降低系统设计的复杂性,计算机系统被设计成自上而下的抽象层次结构,每一个层次都向上一层次呈现一个抽象,并且每一层只需知道下层抽象的接口,而不需要了解其内部运作机制。这样,每一层只需要考虑本层的设计以及相邻层间的交互。例如,操作系统所看到的硬件是一个硬件抽象层,而不需要理解硬件的布线或者电气特性等。
图 1-1 计算机系统的各个抽象层硬件抽象层(Hardware Abstraction Layer, HAL)是计算机中软件所能控制的硬件的抽象接口,通常包括CPU的各种寄存器、内存管理模块、I/O端口以及内存映射的I/O地址等。API抽象层是一个进程所能控制的系统功能的集合,包括创建新进程、内存申请、归还、进程间同步与共享、文件系统和网络操作系统等。
本质上,虚拟化是由位于下层的软件模块,通过向上层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟的环境上。
重要概念,在虚拟化中,物理资源通常有一个定语称为宿主(Host),而虚拟出来的资源通常有一个定语称为客户(Guest)。
各层虚拟化简介:
硬件抽象层上的虚拟化,通过虚拟硬件抽象层来实现虚拟机,为客户机操作系统呈现和物理硬件相同或相近的硬件抽象层。通常,宿主机和客户机的ISA(Instruction Set Architecture,指令集架构)是相同的,客户机的大部分指令可以在宿主机处理器上直接运行,只有部分需要虚拟化的指令才会由虚拟化软件进行处理,从而大大降低了虚拟化开销。比较知名的硬件抽象层的产品有VMware、Xen等。
操作系统层上的虚拟化,通过系统内核提供多个相互隔离的用户态实例,这些用户态实例具有自己独立的文件系统、网络、系统设置和库函数等。因为这是操作系统哦内核主动提供的虚拟化,因此操作系统层上的虚拟化比较高效,其系统开销非常小。
库函数层上的虚拟化,通过虚拟化操作系统的应用级函数的服务接口,使得应用程序不需要修改,就可以在不同的操作中无缝运行,从而提供系统间的互操作性。例如,WINE系统是在Linux上模拟了Windows的库函数接口,使得一个Windows的应用程序能够在Linux平台上运行。
编程语言级虚拟化,程序的代码由虚拟机的运行时支持系统首先翻译为硬件的机器语言,然后再执行。通常一个语言类虚拟机是作为一个进程在物理计算机系统中运行的,因此,它属于进程级虚拟化。
1.2 系统虚拟化
系统虚拟化是指将一台物理计算机系统虚拟化为一台或多台虚拟计算机系统,每个虚拟的计算机系统(简称虚拟机)都拥有自己的虚拟硬件(如CPU、内存和设备等),来提供一个独立的虚拟机执行环境。这个虚拟化层被称为虚拟机监控器。
图 1-2 系统虚拟化虚拟计算机系统和物理计算机系统可以是完全不同的ISA。但是,不同的ISA使得虚拟机的每一条指令都需要在物理机上模拟执行,从而造成较大的性能下降。
1974年,Popek和Goldberg定义了虚拟机可以看作是物理机的一种高效隔离的复制。该定义蕴含了三层含义(同质、、高效和资源受控)。
同质,虚拟机的运行环境和物理机的环境在本质上需要是相同的,但是在表现上能够有一定的差异。如核数可以不一样,但处理器必须是同一种基本类型。
高效,要求虚拟机中运行的软件接近物理机上直接运行的性能。因此,软件在虚拟机中运行时,大多数的指令是直接运行在硬件上的,只有少量指令需要经过VM处理货模拟。
资源受控,VM对系统资源拥有完全控制能力和管理权限。
1.3 系统虚拟化的发展历史
1.4 系统虚拟化的好处
系统虚拟化提供了多个隔离的执行环境,以虚拟机为粒度的抽象提供了优秀的分装性,使得一台计算机上能够运行多台虚拟机,虚拟机之间有很强的隔离性,虚拟机与硬件没有直接的关联。
1.4.1 封装性
以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷。虚拟机的优秀封装性使得一下应用模型可以很方便地实现。如,快照、克隆、挂起。优秀的封装性使得虚拟机保存更容易。
1.4.2 多实例
在一台计算机上运行多个虚拟机使得资源的调度更为优化,不同的虚拟机有不同的繁忙和空闲时段,忙闲交错使得单个计算机的系统资源利用率大大提高。
1.4.3 隔离
每个应用程序可以在自己的操作系统环境中独立地运行而不影响其他的工作负载。
1.4.4 硬件无关性
尽管目前计算机体系结构呈现出很大的异构性,但只要另一台计算机提供相同的虚拟硬件抽象层,一个虚拟机就能够无缝地迁移过去。虚拟机迁移是虚拟化技术中的亮点之一。
1.4.5 特权功能