《虚拟化原理与实现—基于软件的完全虚拟化ppt课件.pptx》由会员分享,可在线阅读,更多相关《虚拟化原理与实现—基于软件的完全虚拟化ppt课件.pptx(62页珍藏版)》请在三一办公上搜索。
1、Questions,1、基于软件的完全虚拟化通过什么技术实现?2、内存虚拟化的目的是什么?3、在I/O虚拟化中,对于一个典型的PCI设备,可能包含的软件接口有哪些?,1,第四章 基于软件的完全虚拟化,小组成员:范宗勤 郭一超 陈 蕊,2,基于软件的完全虚拟化,4.1 概述4.2 CPU虚拟化4.3 内存虚拟化4.4 I/O虚拟化,3,概述,在硬件设计未考虚到因虚拟化而导致的虚拟化漏洞时,首先考虑到基于软件方式实现虚拟化两种可行的基于软件的虚拟化解决方案:模拟执行基于软件的完全虚拟化技术直接源代码改写类虚拟化技术,4,模拟技术,所有的虚拟化形式都可以用模拟来实现。三种常见的模拟技术有:解释执行(
2、最简单最直接的模拟实现方式)代码扫描与修补二进制代码不同体系结构的虚拟化比较困难,通常使用解释执行 在一种硬件体系机构上模拟出另外一种不同硬件体系结构的运行环境同一体系结构模拟:多数指令不需要被模拟执行而是直接在硬件上执行。可以使用更高效的虚拟化方法:代码扫描与修补技术二进制代码翻译技术,5,模拟器架构,6,基于软件的完全虚拟化,4.1 概述4.2 CPU虚拟化4.3 内存虚拟化4.4 I/O虚拟化,7,解释执行,解释执行是最简单的一种模拟技术取一条执行,模拟出这条指令执行的效果,再取一条指令,周而复始。从一定程度上解决陷入再模拟不仅适用于模拟与物理机相同体系结构的虚拟机,而且也适用于模拟与物
3、理机不同体系结构的虚拟机,8,指令的正常执行与解释执行,9,a)正常执行,b)解释执行,*,解释执行优缺点,模拟取指/译码/执行 软件流水线优点:容易实现复杂度低缺点:性能太差,10,解释执行的改进,对于模拟与物理机相同体系结构的虚拟机很多敏感指令不需要模拟而可以直接在物理CPU上运行便有以下两种改进技术:扫描与修补二进制代码翻译,11,扫描与修补,虚拟机中模拟的CPU与物理CPU体系结构相同时,大多数指令可以映射到物理CPU而直接执行扫描与修补:多数指令直接在物理CPU执行,把OS代码中的敏感指令替换为跳转指令或会陷入到VMM中去的指令,一旦运行到敏感指令处控制流就会进入VMM中,由VMM代
4、为模拟执行,12,扫描与修补流程,VMM在虚拟机开始执行每段代码之前对其进行扫描,解析每一条指令,查找到特权指令和敏感指令补丁代码会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁代码敏感指令被替换成一个外跳转,从虚拟机跳转到VMM空间里,在VMM中执行动态生成的补丁代码当补丁代码执行完成后,执行流再跳转回虚拟机中的下一条代码继续执行,13,扫描与修补原理,14,*,扫描与修补的优缺点,优点:异常处理较简单:由于指令是被一条一条打补丁的,原代码块相对的位置没有改变因此,发生异常时可以方便地找到异常指令对应的PC,然后将这个异常交给客户机OS处理就可以了实现较简单性能损失小:大多数客户
5、机OS和用户代码可以直接在物理CPU上运行,故其性能损失也相对较小,15,扫描与修补的缺点,由于特权指令和敏感指令都被模拟执行,各条指令的模拟执行时间可能会很短,但也可能会较长由于每个补丁都引入额外的跳转,这些跳转会降低代码的局部性由于扫描与修补技术直接在虚拟机内存中进行代码修补,须维护一份与补丁对于的原始代码的备份,以便在需要时将代码恢复原状,16,二进制代码翻译,二进制代码翻译(BT技术)在VMM中开辟一块代码缓存,将代码翻译好放在其中客户OS代码不会直接被物理CPU执行,所有要被执行的代码都在代码缓存中相比较而言,BT技术最为复杂,其在性能上同扫描与修补技术各有长短,17,二进制翻译的单
6、位:基本块,BT以基本块为单位翻译代码:表示只有一个入口和一个出口的代码块,这块代码只能从头进入,从尾退出,既不会有外界跳转跳入到代码块中间的某个地方,也不会有代码块中间的某个地方有外界跳转跳出该代码块模拟器动态、按需读入二进制代码进行翻译,将翻译好的目标代码存放在模拟器开辟的内存空间中(称为代码缓存)源代码中的指令与翻译后的代码用某种映射关系进行关联常用的是哈希表:由源代码的PC值通过哈希函数计算查表得到其在代码缓冲区中的位置,18,翻译,模拟器对读入的二进制代码不作限制应用程序的代码OS内核代码读入的二进制代码可能包含所有的X86体系结构的指令,模拟器将其翻译输出为X86指令的一个安全子集
7、,即其中不包含特权指令和敏感指令,能够运行在用户态,19,二进制代码翻译,BT技术在VMM中开辟一块代码缓存,将代码翻译好放在其中原始客户机OS代码不会直接被物理CPU执行,他们以基本块的形式组织模拟器先将其执行的基本块翻译成目标代码块,再转入目标代码块执行最后翻译接下来要运行的原始基本块,20,图 48 二进制代码翻译,BT技术的难点,BT技术在处理过程中会遇到以下困难:自修改代码(Self Modifying Code)自修改代码值程序会修改自身代码段的内容。一旦发生自修改操作,模拟器需要将代码缓存中对应已翻译的代码清除掉,对新写的代码重新翻译自参考代码(Self Referential
8、Code)有些程序会从自己代码段中读取内容,在这种情况下,模拟器需要让程序读取原代码段的内容而不是代码缓冲区的内容,21,BT技术的难点,精确异常(Precise Exceptions)指在翻译代码执行中发生了中断或异常,这时需要将运行状态对应到原代码执行到异常点时的状态,然后交给客户机OS去处理精确异常问题对于BT技术来讲比较难解决,主要是由于翻译的代码和原代码已经失去了逐条对应的关系一个可能的解决方法是在发生异常时,模拟器回滚到基本块的开头,然后用解释执行的方式逐条执行原代码实时代码对于实时性要求较高的代码,运行在模拟环境下会损失时间精确性这个问题尚未得到很好的解决,22,BT技术的优化,
9、BT技术在发展过程中积累了以下优化技术来提高整体性能:基本块串联使得运行尽可能不要跳出虚拟机环境,即让执行从一个基本块直接跳转到下一个基本块,而不需要模拟器的介入,从而减少模拟器环境和虚拟机环境的切换基本块的串联可以通过修改直接控制流转移指令的跳转目标来完成,例如固定目标地址的CALL和JMP指令等。指令缓存布局优化合理地放置代码缓存能够加强执行时CPU中指令缓存的局部性,这点对于性能优化有很大帮助有时,一些虚拟执行的计算密集型程序会出现性能好于原代码执行,原因就是指令/数据缓存有更好的局部性但是,要刻意去做这种优化,难度非常大,23,BT技术的优化,自适应翻译一些敏感指令只有在涉及敏感数据时
10、才需要模拟执行自适应的目的是有效地找出这小部分的敏感操作,而不影响敏感指令的非敏感操作原理:“无罪假定(Innocent Unit Proven Guilty)”如果模拟器不能确定一条指令会还是不会进行敏感操作,就先假定其不会发生,直到这条指令确实发生了敏感操作。此时,模拟器才对其特别处理。这样优化的好处是模拟器不需要事先知道需要特别处理的敏感指令有哪些,这样的方法对于筛选出少部分的指令效果很好,24,基于软件的完全虚拟化,4.1 概述4.2 CPU虚拟化4.3 内存虚拟化4.4 I/O虚拟化,25,内存虚拟化的目的,提供给虚拟机一个从零地址开始的连续物理内存空间在各虚拟机之间有效隔离、调度以
11、及共享内存资源防止某个虚拟机内部的活动影响到其他的虚拟机甚至是VMM本身,从而造成安全上的漏洞,26,客户机物理地址的引入,内存虚拟化的核心在于引入新的地址空间:客户机物理地址空间引入虚拟化后,VMM负责管理和分配每个虚拟化的物理内存,客户机操作系统看到的是一个虚构的客户机物理地址空间,指令目标地址是一个虚拟机物理地址无虚拟化情况下,客户机物理地址就是实际物理地址在虚拟化情况下,客户机物理地址不能直接发送到系统总线上VMM需要负责先将客户机物理地址转换成一个实际物理地址后,再交由物理处理器来执行,27,虚拟化后的三种地址空间/内存,28,地址,内存虚拟化的主要任务,引入了客户机物理地址空间,内
12、存虚拟化就主要处理以下方面的问题:给定一个虚拟化,维护客户机物理地址到宿主机物理地址之间的映射关系截取虚拟机对客户机物理地址空间的访问,根据所记录的映射关系,将其转换成宿主机物理地址维护VMM与客户机以及多个客户机之间的隔离性,29,客户机物理地址到宿主机物理地址的映射,这是一个数据结构的映射问题客户机OS维护虚拟机中进程所使用的虚拟地址到客户机物理地址的映射用公式表示:GPA=g(GVA)GVA代表客户机虚拟地址,GPA代表客户机物理地址VMM维护客户机物理地址到宿主机物理地址之间的映射用公式表示:HPA=f(GPA)HPA代表宿主机物理地址虚拟机进程所使用的客户机虚拟地址要变成物理处理器可
13、以执行的宿主机物理地址,需要进过两层转换,即:HPA=f(g(GVA),30,GPA到HPA映射关系表,为了实现GPA到HPA的地址翻译,VMM需要为每个虚拟机动态维护一张从GPA到HPA映射关系表VMM截获修改客户机页表和刷新TLB的指令,根据GPA到HPA映射关系表,修改从GVA到GPA映射的操作,变成修改GVA到相应HPA映射关系的操作0起始地址引入地址映射表后,HPA只有一个0起始地址,但在不同GPA空间里,可以各有一个从0开始地址地址连续性客户OS看来连续的客户机物理内存空间,其对应的宿主机物理内存空间可能是不连续的VMM为多个虚拟机分配宿主机物理内存的灵活性,提高了宿主机物理内存的
14、利用率隔离性VMM通过映射表确保运行于同一宿主机上的不同客户机访问的是不同的物理内存,即相同的客户机物理地址被映射到了不同的宿主机物理地址上,31,内存虚拟化方法,基于软件的内存虚拟化方法影子页表法硬件辅助内存虚拟化类虚拟化,32,33,但是,客户机的虚拟地址到宿主机物理地址的转换是保证客户机在宿主机上访问内存运行正确的核心环节,这样,为了支持和保存这种 转换或映射, 并能根据客户机修改页表的需要及时更新,VMM就需要另外一张页表,这就是影子页表。,VMM必须把客户机虚拟地址到客户机物理地址的转换修正为客户机虚拟地址到宿主机物理地址的转换。这样的转换显然不是客户机的页表所能支持的,客户机的页表
15、只知道客户机的物理地址,而VMM为了实现对每个客户机的隔离与保护,也不会让客户机了解宿主机的物理地址。对于完全虚拟化的客户机,监控程序甚 至不能够修改客户机的页表。,影子页表,(1)一份影子页表与一份客户OS的页表对应(2)影子页表完成GVA直接到HPA的地址翻译,34,图 410 影子页表的作用,虚拟MMU,虚拟MMU为了使影子页表工作,VMM要对MMU进行虚拟化客户OS的页表不能被物理MMU直接利用进行地址翻译客户OS所能看到和操作的都是虚拟MMU客户OS所维护的页表只是被客户OS载入到虚拟MMU不能被物理MMU直接利用来进行MMU硬件实现的地址翻译真正被VMM载入到物理MMU中的页表是影
16、子页表,35,引入影子页表的系统结构,36,影子页表的作用,影子页表是被物理MMU所装载使用的页表VMM要为客户OS的每套页表都维护相应的影子页表影子页表简化了地址的翻译有了影子页表,普通内存访问只需要使用影子页表即可实现从GVA到HPA的转换不需要在每次访问内存时都进行GVA到GPA以及GPA到HPA的两次转换影子页表可降低性能的开销,37,影子页表与客户OS页表,38,客户机OS,影子页表的基本原理,影子页表的结构并不一定与客户机页表的机构一致例如,在64位宿主机上,可以运行32位客户机相对于同一个虚拟地址,在影子页表中最后一级页表的页表项所指向的宿主机物理页,必须是客户机物理页在客户机物
17、理地址与宿主机物理地址映射表中相对应的宿主机物理页只有这样,客户机操作系统才能由影子页表访问到它想访问的客户机物理地址。这就是影子页表的基本原理。,39,40,宿主机,*,影子页表的更新与维护,客户机OS使用的页表不是静态的客户机总在不断修改客户机页表客户机修改客户机页表时,会修改从GVA到GPA的映射关系为保持一致,VMM必须对影子页表进行相应的更新和修改VMM需要截获这类内存访问操作,修改在影子页表中同一GVA到HPA的映射关系,41,影子页表的建立,初始化时,VMM中的影子页表是空的任何内存访问操作都会引起缺页异常若客户OS页表中包含了从GVA到GPA的映射,而影子页表中没有相应的从GV
18、A到HPA映射,造成异常发生VMM截获缺页异常,在相应的影子页表建立从GVA到HPA的映射若客户OS页表中没有GVA到GPA的映射,VMM将缺页异常传递给客户机OS,由客户OS为GVA分配客户机物理页,42,影子页表的缺页处理机制,发生缺页异常时,先由VMM截获异常VMM判断该异常产生的原因将发生异常的客户机虚拟地址在客户机页表中对应页表项的访问权限位于缺页异常的错误码进行比较,从而检查此缺页异常是否是由客户机本身引起对客户机本身引起的缺页异常,VMM将直接返回给客户机操作系统,由客户机操作系统的缺页异常处理机制来处理该缺页异常若缺页异常是由客户机页表和影子页表不一致引起的,VMM尝试根据客户
19、机页表同步影子页表,43,内存虚拟化的优化,自伸缩内存调节技术VMM通过“诱导”客户机操作系统来回收或分配客户机所拥有的宿主机物理内存页共享技术在客户机技术的许多应用场景中,都存在着不同的客户机之间共享宿主机物理内存的可能性例如,当多个客户机运行同一个操作系统的不同实例时、运行相同的应用程序的不同实例时,或者包含共享的数据时,都有共享包含相同数据的宿主机物理内存的机会如果在一台物理主机上运行多个客户机,VMM通过实现页共享技术可以有效地节省宿主机的物理内存资源,44,基于软件的完全虚拟化,4.1 概述4.2 CPU虚拟化4.3 内存虚拟化4.4 I/O虚拟化,45,I/O虚拟化,虚拟机中侦测和
20、驱动的设备一般不是直接对应于硬件设备,而是由VMM抽象出来的,其设备的种类和型号与真实设备可能比较接近,也可能完全不同。不同的VMM提供的虚拟设备种类和型号都是不同的。虚拟设备的功能可以多于或少于真实硬件,甚至能够模拟出真实硬件不具备的一些特性,模拟出不存在的硬件设备。例如,VMware Workstation中,虚拟机可以拥有一个SCSI磁盘,而真实硬件上所用的可以是IDE磁盘,SCSI磁盘有一些特性是IDE磁盘不具备的,这些特性都是设备模型模拟出来的。,46,设备模型,在软件完全虚拟化系统中,一般使用I/O模拟的方法来虚拟化I/O设备VMM中进行设备模拟,并处理所有设备请求和响应的逻辑模块
21、,就是设备模型设备模型在进行I/O模拟时,只需要正确模拟目标设备的软件接口,就可以保证客户机操作系统观察到的虚拟设备与目标设备一致,而不必考虑真实硬件的硬件构造以及硬件接口,也不需要了解所运行的客户机操作系统的技术细节,47,*,48,运行环境,设备模型,设备模型为了模拟目标设备软件接口,也需要同时实现目标设备的功能。这些功能也是基于软件实现的。因此,设备模型所模拟的目标设备与宿主机的硬件不存在直接的关联和对应关系,而是建立在一定的运行环境上的。例如,操作系统所提供的系统调用,使得设备模型可以完全独立于宿主机的硬件,进而实现跨平台的设备模拟,49,对于不同构造的虚拟机,其逻辑层次都是类似的:V
22、MM拦截客户机的I/O操作,将这些操作传递给设备模型进行处理;设备模型运行在一个特定的运行环境下,这可以是操作系统,可以是VMM本身,也可以是另一个客户机。,50,设备模型是位于虚拟机设备驱动程序与实际设备驱动之间的一个模块,由设备驱动所发出的I/O请求先通过设备模型模块转化为物理I/O设备的请求,再通过调用物理设备驱动来完成相应的I/O操作。反之,设备驱动将I/O操作结果通过设备模型模块,返回给客户机操作系统的虚拟设备驱动程序。,51,设备模型的软件接口,由于设备多样性,不同的设备其软件接口差异很大,一个完整的设备模型需要大量的代码分别对每个设备的接口和逻辑进行模拟。然而,还是可以看到,不同
23、设备的软硬件交换信息的方法是有限的,对于一个典型的PCI设备,它可能包含以下种类的接口:PCI配置空间端口I/OMMIODMA中断,52,在虚拟机中,当客户机通过这些接口与虚拟设备进行数据交换时,VMM会截获这些访问,并将其重定向至设备模型,就可以进行设备模拟了。,53,图 418 设备模型的软件接口,端口I/O,以IDE控制器为例来说明端口I/O的实现所有IDE命令和数据的读写都会通过in,out,ins和outs这四条指令由客户机发起。对于这4条敏感指令,VMM可以通过修补、动态翻译或者直接陷入的方式拦截并执行端口I/O的处理函数。在初始化阶段,设备模型首先会将这些端口I/O在VMM中进行
24、注册,客户机运行过程中当这些端口的访问发生时,VMM会根据其端口号和访问的数据宽度分发至相应的设备模型预先注册的端口I/O处理函数,相应的端口I/O处理函数可以由此用软件模拟所需的逻辑。,54,MMIO,需要较大寄存器空间的设备一般会使用MMIO,即内存映射的I/O,例如网络设备,显卡等。MMIO与物理内存共用一个地址空间。对于VMM,MMIO的模拟与端口I/O是类似的,也是基于拦截/分发/处理这一过程。但是,MMIO的模拟与端口I/O相比还有一些差异。,55,MMIO的模拟与端口I/O的差异,1)由于MMIO的访问不限于某些特定指令,因此不可能采用类似端口I/O的提前修补或翻译。为了使MMI
25、O访问陷入,在初始化阶段客户机映射MMIO所属的物理地址范围时,VMM不会建立相应的影子页表项。而当运行时,客户机的MMIO访问都会造成缺页异常,VMM拦截这些异常后就可以将控制交由设备模型进行处理。2)一个I/O端口上可以进行多字节的访问,在MMIO中并非如此。因此,对MMIO的处理要对访问宽度、越界和非对齐访问小心地检查和处理。,56,3)由于端口I/O的空间比较小,又不存在对齐问题,一般可以采用数组结构来存储各端口对应的处理函数。但是,在MMIO的情况下,由于所占范围较大,使用数组结构会占用过大的内存,利用率也很差。所以一般MMIO分发都是基于区域(Region)实现的,即设备模型向VM
26、M指定其可以处理的MMIO区域(基地址和长度)及相应的处理函数。4)由于MMIO与系统内存在同一地址空间,而且都是由缺页异常陷入的,因此MMIO与内存的异常不容易区分。为了区分一个缺页异常是来自MMIO还是来自系统内存可能会对降低系统的性能,为解决这一矛盾,需要对系统的I/O和内存使用作出一定的权衡,或引入更快的方法进行区分。,57,DMA,DMA的拦截相对简单,由于DMA的发起是通过设备的寄存器来控制的,设备模型在端口I/O或MMIO处理函数中就可以拦截所有的DMA操作。设备模型不需要了解具体设备上DMA的实现方法,而只需将数据从客户机所属内存中读出或写入即可,这需要通过内存管理模块的帮助将
27、客户机用于DMA传输的缓冲区映射到设备模型的地址空间内。,58,PCI配置空间,客户机发现和初始化设备的时候会首先访问PCI配置空间,其中的基地址寄存器和命令寄存器使得客户机可以使用该设备的其他I/O资源。由于客户机所有设备使用相同的PCI配置空间寄存器来访问所有设备的配置空间,而配置空间的头部又有统一的标准,设备模型通常可以使用统一的配置空间处理函数来处理设备的I/O资源分配和映射。,59,中断,中断的处理需要设备模型模拟的中断处理器来处理作为PCI设备,只需要控制其到中断控制器的中断线即可,与物理设备的逻辑和处理方法类似。,60,功能实现,由于在功能实现时不必拘泥于目标设备的硬件结构和组成,因此实现虚拟设备的功能要灵活很多。在前述的IDE存储系统中,真实设备一般是由IDE控制器以及挂在其下的具体IDE硬盘所组成:IDE控制器是一个PCI设备,有一系列软件可控的接口;而硬盘本身则被控制器控制,没有独立的软件接口。而在虚拟IDE时,只需将IDE控制器的软件接口模拟并暴露给客户机使用,并不一定需要遵从控制器硬盘这一真实物理结构。在实现虚拟设备的功能时,一般要访问物理上的真实硬件,这是通过运行环境(如宿主机OS)的系统调用完成的,61,62,谢谢!,