虚拟化技术基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
II.高效(Efficiency)
即VM的性能必须接近物理机。因此,常见的模拟器(boches,simics...)就不能称为VM
为达此目的,软件在VM上运行时,大多数指令要直接在硬件上执行,只有少量指令需要VMM的模拟或处理。
III.资源受控(Resource control)
即VMM对物理机的所有资源有绝对的控制力
关于这些指令的详细分析可以参见:"Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor"
2.3 x86虚拟化方法
鉴于x86本身的局限,长期以来对x86的虚拟化都是通过软件方式实现,后来Intel和AMD都引入各自的硬件虚拟化技术来弥补处理器的缺陷。
少数敏感指令是非特权指令,如x86的sgdt/sidt等,非特权指令可以在用户态读取处理器的状态,如sgdt/sidt则可在用户态(Ring3)将GDTR和IDTR的值读取到通用寄存器中。
对于一般RISC处理器,如MIPS,PowerPC以及SPARC,敏感指令肯定是特权指令,唯x86例外。
2.1经典的虚拟化方法
1974年,Popek和Goldberg在论文"Formal Requirements forVirtualizableThird Generation
Architectures"中将VM定义为物理机的一种高效、隔离的复制,且指出VM的三个特征:
I.同质(Equivalence)
即VM的运行环境和物理机的环境在本质上是相同的,表现上可以有一些差异。如CPU的ISA必须一致,CPU core的个数可以不同。
该技术的引入使x86可以很容易地实现完全虚拟化。其被KVM-x86,新版VMWareESX Server 3,Xen3.0以及大量x86平台上的虚拟化软件所采用。
2.4其它体系结构分析
其它RISC之体系结构,如MIPS, PowerPC, SPARC等,似乎不存在有敏感指令为非特权指令的情形。即它们应该不存在虚拟化的困难。.
(4)当补丁指令块执行完后,执行流再跳转回VM的下一条指令处继续执行
SUN之Virtualbox即采用该技术。
2.3.2OS协助的类虚拟化(Paravirtualization)
其基本思想是通过修改Guest OS的代码,将含有敏感指令的操作,替换为对VMM的超调用(Hypercall,类似OS的系统调用,可将控制权转移到VMM)。该技术的优势在于VM的性能能接近于物理机,缺点在于需要修改Guest OS.
由此可引入虚拟化对体系结构(ISA)的要求:
A.须支持多个特权级
此亦是现代操作系统的要求
B.非敏感指令的执行结果不依赖于CPU的特权级
“陷入-模拟”的本质是保证可能影响VMM正确运行的指令由VMM模拟执行,大部分的非敏感指令还是照常运行。
C.CPU需支持一种保护机制,如MMU,可将物理系统和其它VM与当前活动的VM隔离
现代计算机体系结构一般至少有两个特权级,(即用户态和核心态,未加虚拟化扩展的SPARC和PowerPC即是,MIPS有三个特权级(外加一个Supervisor态,没什么用),而x86有四个特权级(Ring0 ~ Ring3))用来分隔系统软件和应用软件。
决大多数的敏感指令是特权指令,特权指令只能在处理器的最高特权级(内核态)执行,如果执行特权指令时处理器的状态不在内核态,通常会引发一个异常而交由系统软件来处理这个“非法访问”(陷入)。
经典的虚拟化方法主要使用“特权解除” (Privilegedeprivileging)和“陷入-模拟” (Trap-and-Emulation)的方式。即:将Guest OS运行在非特权级(特权解除),而将VMM运行于最高特权级(完全控制系统资源)。解除了Guest OS的特权后,Guest OS的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入到VMM模拟执行(陷入-模拟)。其早期的代表系统是IBM VM/370
1.2虚拟机
虚拟机(Virtual Machine)是由虚拟化层提供的高效、独立的虚拟计算机系统,其皆拥有自己的虚拟硬件(CPU,内存,I/O设备)。通过虚拟化层的模拟,虚拟机在上层软件看来,其就是一个真实的机器。这个虚拟化层一般称为虚拟机监控器(Virtual Machine Monitor, VMM)
Guest OS: PA = f(VA)
VMM: MA = g(PA)
VMM维护一套页表,负责PA到MA的映射。
Guest OS维护一套页表,负责VA到PA的映射。
实际运行时,用户程序访问VA1,经Guest OS的页表转换得到PA1,再由VMM介入,使用VMM的页表将PA1转换为MA1.
2பைடு நூலகம்5其它体系所采用之虚拟化方法
目前可见的非x86体系的虚拟化产品,似乎都倾向于使用类虚拟化的技术手段。
3虚拟化技术概要之内存虚拟化
3.1概述
因为VMM (Virtual Machine Monitor)掌控有所有系统资源,因此VMM握有整个内存资源,其负责页式内存管理,维护虚拟地址到机器地址的映射关系。
虚拟化技术基础
1基本概念
1.1虚拟化
虚拟化(Virtualization)是资源的逻辑表示,其不受物理限制的约束。
虚拟化技术的实现形式是在系统中加入一个虚拟化层,将下层的资源抽象成另一形式的资源,提供给上层使用。
本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。
该技术因Xen项目而广为人知。
目前嵌入式领域的虚拟化,考虑到性能的因素,亦会在可以使用经典虚拟化方法实现全虚拟的体系结构上采用类虚拟化技术。
2.3.3硬件协助的虚拟化
鉴于x86在虚拟化上的缺陷,Intel和AMD都引入自己的硬件虚拟化技术来协助完成虚拟化。
Intel VT-x (Virtualization Technology for x86)
2.3.2基于扫描与修补(Scan-and-Patch)的全虚拟化(Full virtualization)
主要思想:
(1) VMM会在VM运行每块指令之前对其扫描,查找敏感指令
(2)补丁指令块会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁指令
(3)敏感指令被替换成一个外跳转,从VM跳转到VMM,在VMM中执行动态生成的补丁指令块
1.4.3SPARC
2005年SUN即在SPARC中引入虚拟化支持。
2虚拟化技术概要之处理器虚拟化
VMM对物理资源的虚拟可以划分为三个部分:处理器虚拟化、内存虚拟化和I/O虚拟化(设备)。其中以处理器的虚拟化最为关键。
体系结构背景
简而言之,处理器呈现给软件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用运算的寄存器和用于控制处理器行为的状态和控制寄存器)。而I/O设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如x86之CR0 ~ CR4,MIPS的CP0寄存器,PowerPC的Privileged SPR(SPR编号第5位为1)。
数据来自"VIRTUALIZATION WITH LOGICAL DOMAINS AND SUN COOLTHREADS SERVERS"
1.4硬件虚拟化概况
1.4.1x86
鉴于x86本身完全虚拟化的困难以及虚拟化性能的考虑,Intel在2006年是引入VT (VT-x for IA32, VT-ifor Itanium)来解决之,AMD以AMD-V紧随之。
以上三个条件,现代体系结构一般都满足,唯有最后一个也是最重要的条件:
D.敏感指令需皆为特权指令
此为保证敏感指令在VM上执行时,能陷入到VMM.
因控制敏感指令的执行可能改变系统(处理器和设备)的状态,为保证VMM对资源的绝对控制力维护VM的正常运行,这类指令的执行需要陷入而将控制权转移到VMM,并由其模拟处理之。
其后Intel又引入VT-d (AMD为IOMMU)对x86平台上的I/O虚拟化作了增强。
1.4.2PowerPC
2001年IBM在Power4中加入虚拟化支持,并在2004年的Power5中推出增强的虚拟化支持,且在2009年发布的Power ISA v2.06中规范化。Freescale亦在e500mc中实现PowerISAv2.06的虚拟化增强。
通过空间上的分割、时间上的分时以及模拟,虚拟化可将一份资源抽象成多份,亦可将多份资源抽象成一份。
虚拟化中的两个重要的定语名词:宿主(Host)和客户(Guest)
Host用在物理资源前,Guest则用于虚拟出来的资源前。如将一个物理机器虚拟成多个虚拟机器,则称物理机为物理机(Host Machine),运行其上的OS为Host OS;称多个虚拟机为Guest Machine,运行其上的OS为Guest OS
因Guest OS本身亦有页式内存管理机制,则有VMM的整个系统就比正常系统多了一层映射:
A.虚拟地址(VA),指Guest OS提供给其应用程序使用的线性地址空间
B.物理地址(PA),经VMM抽象的、虚拟机看到的伪物理地址
C.机器地址(MA),真实的机器地址,即地址总线上出现的地址信号
映射关系如下:
2.3.1基于二进制翻译(BT)的全虚拟化(Full virtualization)
其主要思想是在执行时将VM上执行的Guest OS之指令,翻译成x86 ISA的一个子集,其中的敏感指令被替换成陷入指令。翻译过程与指令执行交叉进行。不含敏感指令的用户态程序可以不经翻译直接执行。该技术为VMWareWorkstation,VMWareESX Server早期版本,Virtual PC以及QEMU所采用。
1.3 Full virtualization andParavirtualization
Full virtualization:所抽象的VM具有完全的物理机特性,OS在其上运行不需要任何修改。典型的有VMWare,Virtualbox, Virtual PC, KVM-x86 ...)
Paravirtualization:需OS协助的虚拟化,在其上运行的OS需要修改。起初采用主要是为了解决x86体系结构上完全虚拟化的困难(没有Intel VT & AMD-V硬件虚拟化支持前;且不屑于动态扫描指令修补之方法的性能),后来则主要是为了提高虚拟化的效率。典型的有Xen, KVM-PowerPC等。下表是市面上流行的虚拟化技术的一个概况:
行为敏感指令的执行结果依赖于CPU的最高特权级,而Guest OS运行于非最高特权级,为保证其结果正确,亦需要陷入VMM,并由其模拟之。
2. 2x86ISA分析
x86 ISA中有十多条敏感指令不是特权指令,因此x86无法使用经典的虚拟化技术完全虚拟化。
如:sgdt/sidt/sldt可以在用户态读取特权寄存器GDTR/IDTR/LDTR的值;popf/pushf在Ring0和Ring3的执行结果不同;其它的还有smsw,lar,lsl,verr,verw, pop, push, call,jmp,intn, ret,str, move
可以读写系统关键资源的指令叫做敏感指令,如x86的lgdt/sgdt/lidt/sidt/in/out,MIPS的mtc0/mfc0,PowerPC的mtmsr/mfmsr,SPARC的rdpr/wrpr等,此类又可称为控制敏感指令。
还有一类行为敏感指令,该类指令的执行结果依赖于系统的状态(如x86之popf)
Intel VT-i(Virtualization Technology for Itanium)
Intel VT-d (Virtualization Technology for Directed I/O)
AMD-V (AMD Virtualization)
其基本思想就是引入新的处理器运行模式和新的指令,使得VMM和Guest OS运行于不同的模式下,Guest OS运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入VMM。而且模式切换时上下文的保存恢复由硬件来完成。
即VM的性能必须接近物理机。因此,常见的模拟器(boches,simics...)就不能称为VM
为达此目的,软件在VM上运行时,大多数指令要直接在硬件上执行,只有少量指令需要VMM的模拟或处理。
III.资源受控(Resource control)
即VMM对物理机的所有资源有绝对的控制力
关于这些指令的详细分析可以参见:"Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor"
2.3 x86虚拟化方法
鉴于x86本身的局限,长期以来对x86的虚拟化都是通过软件方式实现,后来Intel和AMD都引入各自的硬件虚拟化技术来弥补处理器的缺陷。
少数敏感指令是非特权指令,如x86的sgdt/sidt等,非特权指令可以在用户态读取处理器的状态,如sgdt/sidt则可在用户态(Ring3)将GDTR和IDTR的值读取到通用寄存器中。
对于一般RISC处理器,如MIPS,PowerPC以及SPARC,敏感指令肯定是特权指令,唯x86例外。
2.1经典的虚拟化方法
1974年,Popek和Goldberg在论文"Formal Requirements forVirtualizableThird Generation
Architectures"中将VM定义为物理机的一种高效、隔离的复制,且指出VM的三个特征:
I.同质(Equivalence)
即VM的运行环境和物理机的环境在本质上是相同的,表现上可以有一些差异。如CPU的ISA必须一致,CPU core的个数可以不同。
该技术的引入使x86可以很容易地实现完全虚拟化。其被KVM-x86,新版VMWareESX Server 3,Xen3.0以及大量x86平台上的虚拟化软件所采用。
2.4其它体系结构分析
其它RISC之体系结构,如MIPS, PowerPC, SPARC等,似乎不存在有敏感指令为非特权指令的情形。即它们应该不存在虚拟化的困难。.
(4)当补丁指令块执行完后,执行流再跳转回VM的下一条指令处继续执行
SUN之Virtualbox即采用该技术。
2.3.2OS协助的类虚拟化(Paravirtualization)
其基本思想是通过修改Guest OS的代码,将含有敏感指令的操作,替换为对VMM的超调用(Hypercall,类似OS的系统调用,可将控制权转移到VMM)。该技术的优势在于VM的性能能接近于物理机,缺点在于需要修改Guest OS.
由此可引入虚拟化对体系结构(ISA)的要求:
A.须支持多个特权级
此亦是现代操作系统的要求
B.非敏感指令的执行结果不依赖于CPU的特权级
“陷入-模拟”的本质是保证可能影响VMM正确运行的指令由VMM模拟执行,大部分的非敏感指令还是照常运行。
C.CPU需支持一种保护机制,如MMU,可将物理系统和其它VM与当前活动的VM隔离
现代计算机体系结构一般至少有两个特权级,(即用户态和核心态,未加虚拟化扩展的SPARC和PowerPC即是,MIPS有三个特权级(外加一个Supervisor态,没什么用),而x86有四个特权级(Ring0 ~ Ring3))用来分隔系统软件和应用软件。
决大多数的敏感指令是特权指令,特权指令只能在处理器的最高特权级(内核态)执行,如果执行特权指令时处理器的状态不在内核态,通常会引发一个异常而交由系统软件来处理这个“非法访问”(陷入)。
经典的虚拟化方法主要使用“特权解除” (Privilegedeprivileging)和“陷入-模拟” (Trap-and-Emulation)的方式。即:将Guest OS运行在非特权级(特权解除),而将VMM运行于最高特权级(完全控制系统资源)。解除了Guest OS的特权后,Guest OS的大部分指令仍可以在硬件上直接运行,只有当执行到特权指令时,才会陷入到VMM模拟执行(陷入-模拟)。其早期的代表系统是IBM VM/370
1.2虚拟机
虚拟机(Virtual Machine)是由虚拟化层提供的高效、独立的虚拟计算机系统,其皆拥有自己的虚拟硬件(CPU,内存,I/O设备)。通过虚拟化层的模拟,虚拟机在上层软件看来,其就是一个真实的机器。这个虚拟化层一般称为虚拟机监控器(Virtual Machine Monitor, VMM)
Guest OS: PA = f(VA)
VMM: MA = g(PA)
VMM维护一套页表,负责PA到MA的映射。
Guest OS维护一套页表,负责VA到PA的映射。
实际运行时,用户程序访问VA1,经Guest OS的页表转换得到PA1,再由VMM介入,使用VMM的页表将PA1转换为MA1.
2பைடு நூலகம்5其它体系所采用之虚拟化方法
目前可见的非x86体系的虚拟化产品,似乎都倾向于使用类虚拟化的技术手段。
3虚拟化技术概要之内存虚拟化
3.1概述
因为VMM (Virtual Machine Monitor)掌控有所有系统资源,因此VMM握有整个内存资源,其负责页式内存管理,维护虚拟地址到机器地址的映射关系。
虚拟化技术基础
1基本概念
1.1虚拟化
虚拟化(Virtualization)是资源的逻辑表示,其不受物理限制的约束。
虚拟化技术的实现形式是在系统中加入一个虚拟化层,将下层的资源抽象成另一形式的资源,提供给上层使用。
本质上,虚拟化就是由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟环境上。
该技术因Xen项目而广为人知。
目前嵌入式领域的虚拟化,考虑到性能的因素,亦会在可以使用经典虚拟化方法实现全虚拟的体系结构上采用类虚拟化技术。
2.3.3硬件协助的虚拟化
鉴于x86在虚拟化上的缺陷,Intel和AMD都引入自己的硬件虚拟化技术来协助完成虚拟化。
Intel VT-x (Virtualization Technology for x86)
2.3.2基于扫描与修补(Scan-and-Patch)的全虚拟化(Full virtualization)
主要思想:
(1) VMM会在VM运行每块指令之前对其扫描,查找敏感指令
(2)补丁指令块会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁指令
(3)敏感指令被替换成一个外跳转,从VM跳转到VMM,在VMM中执行动态生成的补丁指令块
1.4.3SPARC
2005年SUN即在SPARC中引入虚拟化支持。
2虚拟化技术概要之处理器虚拟化
VMM对物理资源的虚拟可以划分为三个部分:处理器虚拟化、内存虚拟化和I/O虚拟化(设备)。其中以处理器的虚拟化最为关键。
体系结构背景
简而言之,处理器呈现给软件的接口就是一堆的指令(指令集)和一堆的寄存器(含用于通用运算的寄存器和用于控制处理器行为的状态和控制寄存器)。而I/O设备呈现给软件的接口也就是一堆的状态和控制寄存器(有些设备亦有内部存储)。这些都是系统的资源,其中影响处理器和设备状态和行为的寄存器称为关键资源或特权资源,如x86之CR0 ~ CR4,MIPS的CP0寄存器,PowerPC的Privileged SPR(SPR编号第5位为1)。
数据来自"VIRTUALIZATION WITH LOGICAL DOMAINS AND SUN COOLTHREADS SERVERS"
1.4硬件虚拟化概况
1.4.1x86
鉴于x86本身完全虚拟化的困难以及虚拟化性能的考虑,Intel在2006年是引入VT (VT-x for IA32, VT-ifor Itanium)来解决之,AMD以AMD-V紧随之。
以上三个条件,现代体系结构一般都满足,唯有最后一个也是最重要的条件:
D.敏感指令需皆为特权指令
此为保证敏感指令在VM上执行时,能陷入到VMM.
因控制敏感指令的执行可能改变系统(处理器和设备)的状态,为保证VMM对资源的绝对控制力维护VM的正常运行,这类指令的执行需要陷入而将控制权转移到VMM,并由其模拟处理之。
其后Intel又引入VT-d (AMD为IOMMU)对x86平台上的I/O虚拟化作了增强。
1.4.2PowerPC
2001年IBM在Power4中加入虚拟化支持,并在2004年的Power5中推出增强的虚拟化支持,且在2009年发布的Power ISA v2.06中规范化。Freescale亦在e500mc中实现PowerISAv2.06的虚拟化增强。
通过空间上的分割、时间上的分时以及模拟,虚拟化可将一份资源抽象成多份,亦可将多份资源抽象成一份。
虚拟化中的两个重要的定语名词:宿主(Host)和客户(Guest)
Host用在物理资源前,Guest则用于虚拟出来的资源前。如将一个物理机器虚拟成多个虚拟机器,则称物理机为物理机(Host Machine),运行其上的OS为Host OS;称多个虚拟机为Guest Machine,运行其上的OS为Guest OS
因Guest OS本身亦有页式内存管理机制,则有VMM的整个系统就比正常系统多了一层映射:
A.虚拟地址(VA),指Guest OS提供给其应用程序使用的线性地址空间
B.物理地址(PA),经VMM抽象的、虚拟机看到的伪物理地址
C.机器地址(MA),真实的机器地址,即地址总线上出现的地址信号
映射关系如下:
2.3.1基于二进制翻译(BT)的全虚拟化(Full virtualization)
其主要思想是在执行时将VM上执行的Guest OS之指令,翻译成x86 ISA的一个子集,其中的敏感指令被替换成陷入指令。翻译过程与指令执行交叉进行。不含敏感指令的用户态程序可以不经翻译直接执行。该技术为VMWareWorkstation,VMWareESX Server早期版本,Virtual PC以及QEMU所采用。
1.3 Full virtualization andParavirtualization
Full virtualization:所抽象的VM具有完全的物理机特性,OS在其上运行不需要任何修改。典型的有VMWare,Virtualbox, Virtual PC, KVM-x86 ...)
Paravirtualization:需OS协助的虚拟化,在其上运行的OS需要修改。起初采用主要是为了解决x86体系结构上完全虚拟化的困难(没有Intel VT & AMD-V硬件虚拟化支持前;且不屑于动态扫描指令修补之方法的性能),后来则主要是为了提高虚拟化的效率。典型的有Xen, KVM-PowerPC等。下表是市面上流行的虚拟化技术的一个概况:
行为敏感指令的执行结果依赖于CPU的最高特权级,而Guest OS运行于非最高特权级,为保证其结果正确,亦需要陷入VMM,并由其模拟之。
2. 2x86ISA分析
x86 ISA中有十多条敏感指令不是特权指令,因此x86无法使用经典的虚拟化技术完全虚拟化。
如:sgdt/sidt/sldt可以在用户态读取特权寄存器GDTR/IDTR/LDTR的值;popf/pushf在Ring0和Ring3的执行结果不同;其它的还有smsw,lar,lsl,verr,verw, pop, push, call,jmp,intn, ret,str, move
可以读写系统关键资源的指令叫做敏感指令,如x86的lgdt/sgdt/lidt/sidt/in/out,MIPS的mtc0/mfc0,PowerPC的mtmsr/mfmsr,SPARC的rdpr/wrpr等,此类又可称为控制敏感指令。
还有一类行为敏感指令,该类指令的执行结果依赖于系统的状态(如x86之popf)
Intel VT-i(Virtualization Technology for Itanium)
Intel VT-d (Virtualization Technology for Directed I/O)
AMD-V (AMD Virtualization)
其基本思想就是引入新的处理器运行模式和新的指令,使得VMM和Guest OS运行于不同的模式下,Guest OS运行于受控模式,原来的一些敏感指令在受控模式下全部会陷入VMM。而且模式切换时上下文的保存恢复由硬件来完成。