虚拟化技术基础_第1页
虚拟化技术基础_第2页
虚拟化技术基础_第3页
虚拟化技术基础_第4页
虚拟化技术基础_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

虚拟化技术基础1基本概念1.1虚拟化虚拟化(Virtualization)是资源的逻辑表示,其不受物理限制的约束。虚拟化技术的实现形式是在系统中加入一个虚拟化层,将下层的资源抽象成另一形式的资源,提供给上层使用。本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。通过空间上的分割、时间上的分时以及模拟,虚拟化可将一份资源抽象成多份,亦可将多份资源抽象成一份。虚拟化中的两个重要的定语名词:宿主(Host)和客户(Guest)Host用在物理资源前,Guest则用于虚拟出来的资源前。如将一个物理机器虚拟成多个虚拟机器,则称物理机为物理机(HostMachine),运行其上的OS为HostOS;称多个虚拟机为GuestMachine,运行其上的OS为GuestOS1.2虚拟机虚拟机(VirtualMachine)是由虚拟化层提供的高效、独立的虚拟计算机系统,其皆拥有自己的虚拟硬件(CPU,内存,I/O设备)。通过虚拟化层的模拟,虚拟机在上层软件看来,其就是一个真实的机器。这个虚拟化层一般称为虚拟机监控器(VirtualMachineMonitor,VMM)1974年,Popek和Goldberg在论文"FormalRequirementsforVirtualizableThirdGenerationArchitectures"中将VM定义为物理机的一种高效、隔离的复制,且指出VM的三个特征:同质(Equivalence)即VM的运行环境和物理机的环境在本质上是相同的,表现上可以有一些差异。如CPU的ISA必须一致,CPUcore的个数可以不同。高效(Efficiency)即VM的性能必须接近物理机。因此,常见的模拟器(boches,simics...)就不能称为VM为达此目的,软件在VM上运行时,大多数指令要直接在硬件上执行,只有少量指令需要VMM的模拟或处理。资源受控(Resourcecontrol)即VMM对物理机的所有资源有绝对的控制力1.3FullvirtualizationandParavirtualizationFullvirtualization:所抽象的VM具有完全的物理机特性,OS在其上运行不需要任何修改。典型的有VMWare,Virtualbox,VirtualPC,KVM-x86...)Paravirtualization:需OS协助的虚拟化,在其上运行的OS需要修改。起初采用主要是为了解决x86体系结构上完全虚拟化的困难(没有IntelVT&AMD-V硬件虚拟化支持前;且不屑于动态扫描指令修补之方法的性能),后来则主要是为了提高虚拟化的效率。典型的有Xen,KVM-PowerPC等。下表是市面上流行的虚拟化技术的一个概况:数据来自"VIRTUALIZATIONWITHLOGICALDOMAINSANDSUNCOOLTHREADSSERVERS"1.4硬件虚拟化概况x86鉴于x86本身完全虚拟化的困难以及虚拟化性能的考虑,Intel在2006年是引入VT(VT-xforIA32,VT-iforItanium)来解决之,AMD以AMD-V紧随之。其后Intel又引入VT-d(AMD为IOMMU)对x86平台上的I/O虚拟化作了增强。PowerPC2001年IBM在Power4中加入虚拟化支持,并在2004年的Power5中推出增强的虚拟化支持,且在2009年发布的PowerISAv2.06中规范化。Freescale亦在e500mc中实现PowerISAv2.06的虚拟化增强。SPARC2005年SUN即在SPARC中引入虚拟化支持。2虚拟化技术概要之处理器虚拟化VMM对物理资源的虚拟可以划分为三个部分:处理器虚拟化、内存虚拟化和I/O虚拟化(设备)。其中以处理器的虚拟化最为关键。体系结构背景简而言之,处理器呈现给软件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用运算的寄存器和用于控制处理器行为的状态和控制寄存器)。而I/O设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如x86之CR0〜CR4,MIPS的CP0寄存器,PowerPC的PrivilegedSPR(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的值读取到通用寄存器中。对于一般RISC处理器,如MIPS,PowerPC以及SPARC,敏感指令肯定是特权指令,唯x86例外。2.1经典的虚拟化方法经典的虚拟化方法主要使用“特权解除”(Privilegedeprivileging)和“陷入一模拟”(Trap-and-Emulation)的方式。即:将GuestOS运行在非特权级(特权解除),而将VMM运行于最高特权级(完全控制系统资源)。解除了GuestOS的特权后,GuestOS的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入到VMM模拟执行(陷入一模拟)。其早期的代表系统是IBMVM/370由此可引入虚拟化对体系结构(ISA)的要求:须支持多个特权级此亦是现代操作系统的要求非敏感指令的执行结果不依赖于CPU的特权级“陷入一模拟”的本质是保证可能影响VMM正确运行的指令由VMM模拟执行,大部分的非敏感指令还是照常运行。CPU需支持一种保护机制,如MMU,可将物理系统和其它VM与当前活动的VM隔离以上三个条件,现代体系结构一般都满足,唯有最后一个也是最重要的条件:敏感指令需皆为特权指令此为保证敏感指令在VM上执行时,能陷入到VMM.因控制敏感指令的执行可能改变系统(处理器和设备)的状态,为保证VMM对资源的绝对控制力维护VM的正常运行,这类指令的执行需要陷入而将控制权转移到VMM,并由其模拟处理之。行为敏感指令的执行结果依赖于CPU的最高特权级,而GuestOS运行于非最高特权级,为保证其结果正确,亦需要陷入VMM,并由其模拟之。2x86ISA分析x86ISA中有十多条敏感指令不是特权指令,因此x86无法使用经典的虚拟化技术完全虚拟化。如:sgdt/sidt/sldt可以在用户态读取特权寄存器GDTR/IDTR/LDTR的值;popf/pushf在Ring0和Ring3的执行结果不同;其它的还有smsw,lar,lsl,verr,verw,pop,push,call,jmp,intn,ret,str,move关于这些指令的详细分析可以参见:"AnalysisoftheIntelPentium'sAbilitytoSupportaSecureVirtualMachineMonitor"2.3x86虚拟化方法鉴于x86本身的局限,长期以来对x86的虚拟化都是通过软件方式实现,后来Intel和AMD都引入各自的硬件虚拟化技术来弥补处理器的缺陷。2.3.1基于二进制翻译(BT)的全虚拟化(Fullvirtualization)其主要思想是在执行时将VM上执行的GuestOS之指令,翻译成x86ISA的一个子集,其中的敏感指令被替换成陷入指令。翻译过程与指令执行交叉进行。不含敏感指令的用户态程序可以不经翻译直接执行。该技术为VMWareWorkstation,VMWareESXServer早期版本,VirtualPC以及QEMU所采用。2.3.2基于扫描与修补(Scan-and-Patch)的全虚拟化(Fullvirtualization)主要思想:VMM会在VM运行每块指令之前对其扫描,查找敏感指令补丁指令块会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁指令敏感指令被替换成一个外跳转,从VM跳转到VMM,在VMM中执行动态生成的补丁指令块当补丁指令块执行完后,执行流再跳转回VM的下一条指令处继续执行SUN之Virtualbox即采用该技术。2.3.2OS协助的类虚拟化(Paravirtualization)其基本思想是通过修改GuestOS的代码,将含有敏感指令的操作,替换为对VMM的超调用(Hypercall,类似OS的系统调用,可将控制权转移到VMM)。该技术的优势在于VM的性能能接近于物理机,缺点在于需要修改GuestOS.该技术因Xen项目而广为人知。目前嵌入式领域的虚拟化,考虑到性能的因素,亦会在可以使用经典虚拟化方法实现全虚拟的体系结构上采用类虚拟化技术。2.3.3硬件协助的虚拟化鉴于x86在虚拟化上的缺陷,Intel和AMD都引入自己的硬件虚拟化技术来协助完成虚拟化。IntelVT-x(VirtualizationTechnologyforx86)IntelVT-i(VirtualizationTechnologyforItanium)IntelVT-d(VirtualizationTechnologyforDirectedI/O)AMD-V(AMDVirtualization)其基本思想就是引入新的处理器运行模式和新的指令,使得VMM和GuestOS运行于不同的模式下,GuestOS运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入VMM。而且模式切换时上下文的保存恢复由硬件来完成。该技术的引入使x86可以很容易地实现完全虚拟化。其被KVM-x86,新版VMWareESXServer3,Xen3.0以及大量x86平台上的虚拟化软件所采用。2.4其它体系结构分析其它RISC之体系结构,如MIPS,PowerPC,SPARC等,似乎不存在有敏感指令为非特权指令的情形。即它们应该不存在虚拟化的困难。.2.5其它体系所采用之虚拟化方法目前可见的非x86体系的虚拟化产品,似乎都倾向于使用类虚拟化的技术手段。3虚拟化技术概要之内存虚拟化3.1概述因为VMM(VirtualMachineMonitor)掌控有所有系统资源,因此VMM握有整个内存资源,其负责页式内存管理,维护虚拟地址到机器地址的映射关系。因GuestOS本身亦有页式内存管理机制,则有VMM的整个系统就比正常系统多了一层映射:虚拟地址(VA),指GuestOS提供给其应用程序使用的线性地址空间物理地址(PA),经VMM抽象的、虚拟机看到的伪物理地址机器地址(MA),真实的机器地址,即地址总线上出现的地址信号映射关系如下:GuestOS:PA=f(VA)VMM:MA=g(PA)VMM维护一套页表,负责PA到MA的映射。GuestOS维护一套页表,负责VA到PA的映射。实际运行时,用户程序访问VA1,经GuestOS的页表转换得到PA1,再由VMM介入,使用VMM的页表将PA1转换为MA1.3.2页表虚拟化基本思想普通MMU只能完成一次虚拟地址到物理地址的映射,在虚拟机环境下,经过MMU转换所得到的“物理地址”并不是真正的机器地址。若需得到真正的机器地址,必须由VMM介入,再经过一次映射才能得到总线上使用的机器地址。显然,如果虚拟机的每个内存访问都需要VMM介入,并由软件模拟地址转换的效率是很低下的,几乎不具有实际可用性,为实现虚拟地址到机器地址的高效转换,现普遍采用的思想是:由VMM根据映射f和g生成复合的映射?甘,并直接将这个映射关系写入MMU其可行性在于:VMM维护着映射gVMM能够访问GuestOS的内存,因此可以直接查询GuestOS的页表,从而获得映射f计算复合映射fg能够在恰当的时候高效地进行3.3页表虚拟化实现目前采用的页表虚拟化方法主要有两个:MMU类虚拟化(MMUParavirtualization)和影子页表3.3.1MMUParavirtualization该技术为Xen所采用。其基本原理是:当GuestOS创建一个新的页表时,会从它所维护的空闲内存中分配一个页面,并向Xen注册该页面,Xen会剥夺GuestOS对该页表的写权限,之后GuestOS对该页表的写操作都会陷入到Xen加以验证和转换。Xen会检查页表中的每一项,确保他们只映射了属于该虚拟机的机器页面,而且不得包含对页表页面的可写映射。后,Xen会根据自己所维护的映射关系g,将页表项中的物理地址替换为相应的机器地址,最后再把修改过的页表载入MMU。如此,MMU就可以根据修改过页表直接完成虚拟地址到机器地址的转换。3.3.2影子页表类虚拟化需要修改GuestOS。对全虚拟化,则使用影子页表(ShadowPageTable)技术来实现。VMWareWorkstation,VMWareESXServer和KVMforx86都是使用该技术。与类虚拟化类似,影子页表技术也是采用将复合映射fg直接写入MMU的思路。不同在于类虚拟化技术直接将fg更新到GuestOS的页表项中,而影子页表则是VMM为GuestOS的每个页表维护一个“影子页表“,并将合成后的映射关系写入到”影子“中,GuestOS的页表内容则保持不变。最后VMM将影子页表写入MMU影子页表的实现挑战在于其时间和空间的开销很大。时间:由于GuestOS构造页表时不会主动通知VMM,VMM必须等到GuestOS发生缺页时通过分析缺页原因,再为其补全影子页表。空间:VMM需要支持多个虚拟机同时运行,而每个虚拟机的GuestOS通常会为其上运行的每个进程都创建一套页表系统,因此影子页表的空间开销会随着进程数量的增多而迅速增大。在时间开销和空间开销中做出权衡的方法是使用影子页表缓存(ShadowPageTableCache),即VMM在内存中维护部分最近使用过的影子页表,只有当影子页表在缓存中找不到时,才构建一个新的,当前主要的全虚拟化都采用了影子页表缓存技术。4虚拟化技术概要之VMM结构4.1概述当前主流的VMM(VirtualMachineMonitor)实现结构可以分为三类:宿主模型(OS-hostedVMMs)Hypervisor模型(HypervisorVMMs)混合模型(HybridVMMs)4.2宿主模型该结构的VMM,物理资源由HostOS(Windows,Linuxetc.)管理实际的虚拟化功能由VMM提供,其通常是HostOS的独立内核模块(有的实现还含用户进程,如负责I/O虚拟化的用户态设备模型)VMM通过调用HostOS的服务来获得资源,实现CPU,内存和I/O设备的虚拟化VMM创建出VM后,通常将VM作为HostOS的一个进程参与调度如上图所示,VMM模块负责CPU和内存虚拟化,由ULM请求HostOS设备驱动,实现I/O设备的虚拟化。优点:可以充分利用现有OS的设备驱动,VMM无需自己实现大量的设备驱动,轻松实现I/O设备的虚拟化。缺点:因资源受HostOS控制,VMM需调用HostOS的服务来获取资源进行虚拟化,其效率和功能会受到一定影响。采用该结构的VMM有:VMwareWorkstation,VMWareServer(GSX),VirtualPC,VirtualServer,KVM(早期)4.3Hypervisor模型该结构中,VMM可以看作一个为虚拟化而生的完整OS,掌控有所有资源(CPU,内存,I/O设备)VMM承担管理资源的重任,其还需向上提供VM用于运行GuestOS,因此VMM还负责虚拟环境的创建和管理。优点:因VMM同时具有物理资源的管理功能和虚拟化功能,故虚拟化的效率会较高;安全性方面,VM的安全只依赖于VMM的安全缺点:因VMM完全拥有物理资源,因此,VMM需要进行物理资源的管理,包括设备的驱动,而设备驱动的开发工作量是很大的,这对VMM是个很大的挑战。采用该结构的VMM有:VMWareESXServer,WindRiverHypervisor,KVM(后期)4.4混合模型该结构是上述两种模式的混合体,VMM依然位于最底层,拥有所有物理资源,但VMM会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权VM上的特权OS来控制。VMM只负责CPU和内存的虚拟化,I/O设备的虚拟化由VMM和特权OS共同完成:优点:可利用现有OS的I/O设备驱动;VMM直接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论