虚拟化技术原理精要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟化技术原理
精要CurrentVersion: 1.0
Date: 2011-02-24
Author: Jack Tan
版本历史
版本状态作 者参与者起止日期备注
0.1Jack Tan090813完成草稿
1.0Jack Tan110224修订
1. 概述
1.1 虚拟化
虚拟化(Virtualization) 是资源的逻辑表示,其不受物理限制的约束。
虚拟化技术的实现形式是在系统中加入一个虚拟化层,将下层的资源抽象成另一形式的资源,提供给上层使用。
本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。
通过空间上的分割、时间上的分时以及模拟,虚拟化可将一份资源抽象成多份,亦可将多份资源抽象成一份。
虚拟化中的两个重要的定语名词:宿主(Host) 和客户(Guest)
Host 用在物理资源前,Guest 则用于虚拟出来的资源前。如将一个物理机器虚拟成多个虚拟机器,则称物理机为Host Machine,运行其上的OS 为Host OS;称多个虚拟机为Guest Machine,运行其上的OS 为Guest OS
1.2 虚拟机
虚拟机(Virtual Machine) 是由虚拟化层提供的高效、独立的虚拟计算机系统,其皆拥有自己的虚拟硬件(CPU,内存,I/O 设备)。通过虚拟化层的模拟,虚拟机在上层软件看来,其就是一个真实的机器。这个虚拟化层一般称为虚拟机监控器(Virtual Machine Monitor, VMM)
1974 年,Popek 和Goldberg 在论文"Formal Requirements for Virtualizable Third Generation Architectures" 中将VM 定义为物理机的一种高效、隔离的复制,且指出VM 的三个特征:
I. 同质(Equivalence)
即VM 的运行环境和物理机的环境在本质上是相同的,表现上可以有一些差异。如CPU 的ISA 必须一致,CPU core 的个数可以不同。
II. 高效(Efficiency)
即VM 的性能必须接近物理机。因此,常见的模拟器(boches, simics ...) 就不能称为VM 为达此目的,软件在VM 上运行时,大多数指令要直接在硬件上执行,只有少量指令需要VMM 的模拟或处理。
III. 资源受控(Resource control)
即VMM 对物理机的所有资源有绝对的控制力
1.3 Full virtualization and Paravirtualization
Full virtualization: 所抽象的VM 具有完全的物理机特性,OS 在其上运行不需要任何修改。典型的有VMWare, Virtualbox, Virtual PC, KVM-x86 ...)
Paravirtualization: 需OS 协助的虚拟化,在其上运行的OS 需要修改。起初采用主要是
为了解决x86 体系结构上完全虚拟化的困难(没有Intel VT & AMD-V 硬件虚拟化支持前;且不屑于动态扫描指令修补之方法的性能),后来则主要是为了提高虚拟化的效率。典型的有Xen, KVM-PowerPC 等。下表是市面上流行的虚拟化技术的一个概况:
数据来自"VIRTUALIZATION WITH LOGICAL DOMAINS AND SUN COOLTHREADS SERVERS"
1.4 硬件虚拟化概况
1.4.1 x86
鉴于x86 本身完全虚拟化的困难以及虚拟化性能的考虑,Intel 在2006 年是引入VT (VT-x for IA32, VT-i for Itanium)来解决之,AMD 以AMD-V 紧随之。
其后Intel 又引入VT-d (AMD 为IOMMU) 对x86 平台上的I/O 虚拟化作了增强。
1.4.2 PowerPC
2001 年IBM 在Power4 中加入虚拟化支持,并在2004 年的Power5 中推出增强的虚拟化支持,且在2009 年发布的Power ISA v2.06 中规范化。Freescale 亦在e500mc 中实现PowerISA v2.06 的虚拟化增强。
1.4.3 SPARC
2005 年SUN 即在SPARC 中引入虚拟化支持。
2. 处理器虚拟化原理精要
VMM 对物理资源的虚拟可以划分为三个部分:处理器虚拟化、内存虚拟化和I/O 设备虚拟化。其中以处理器的虚拟化最为关键。
2.1 体系结构背景
简而言之,处理器呈现给软件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用运算的寄存器和用于控制处理器行为的状态和控制寄存器)。而I/O 设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如x86 之CR0 ~
CR4,MIPS 的CP0 寄存器,PowerPC 的Privileged SPR(SPR 编号第5 位为1)。
可以读写系统关键资源的指令叫做敏感指令,如x86 的lgdt/sgdt/lidt/sidt/in/out,MIPS 的mtc0/mfc0,PowerPC 的mtmsr/mfmsr,SPARC 的rdpr/wrpr 等,此类又可称为控制敏感指令。
还有一类行为敏感指令,该类指令的执行结果依赖于系统的状态(如x86 之popf)
现代计算机体系结构一般至少有两个特权级,(即用户态和核心态,未加虚拟化扩展的SPARC和PowerPC 即是,MIPS 有三个特权级(外加一个Supervisor 态,没什么用),而x86 有四个特权级(Ring0 ~ Ring3))用来分隔系统软件和应用软件。
决大多数的敏感指令是特权指令,特权指令只能在处理器的最高特权级(内核态)执行,如果执行特权指令时处理器的状态不在内核态,通常会引发一个异常而交由系统软件来处理这个非法访问(陷入)。
“”
少数敏感指令是非特权指令,如x86 的sgdt/sidt 等,非特权指令可以在用户态读取处理器的状态,如sgdt/sidt 则可在用户态(Ring3) 将GDTR 和IDTR 的值读取到通用寄存器