虚拟化原理与实现—基于软件的完全虚拟化

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Questions1、基于软件的完全虚拟化通过什么技术实现?2、内存虚拟化的目的是什么?3、在I/O虚拟化中,对于一个典型的PCI设备,可能包含的软件接口有哪些?1第四章基于软件的完全虚拟化小组成员:范宗勤郭一超陈蕊2基于软件的完全虚拟化4.1概述•4.2CPU虚拟化•4.3内存虚拟化•4.4I/O虚拟化3概述•在硬件设计未考虚到因虚拟化而导致的虚拟化漏洞时,首先考虑到基于软件方式实现虚拟化•两种可行的基于软件的虚拟化解决方案:模拟执行——基于软件的完全虚拟化技术直接源代码改写——类虚拟化技术4模拟技术•所有的虚拟化形式都可以用模拟来实现。三种常见的模拟技术有:解释执行(最简单最直接的模拟实现方式)代码扫描与修补二进制代码•不同体系结构的虚拟化比较困难,通常使用解释执行在一种硬件体系机构上模拟出另外一种不同硬件体系结构的运行环境•同一体系结构模拟:多数指令不需要被模拟执行而是直接在硬件上执行。可以使用更高效的虚拟化方法:代码扫描与修补技术二进制代码翻译技术5模拟器架构6基于软件的完全虚拟化•4.1概述4.2CPU虚拟化•4.3内存虚拟化•4.4I/O虚拟化7解释执行•解释执行是最简单的一种模拟技术•取一条执行,模拟出这条指令执行的效果,再取一条指令,周而复始。•从一定程度上解决陷入再模拟•不仅适用于模拟与物理机相同体系结构的虚拟机,而且也适用于模拟与物理机不同体系结构的虚拟机8指令的正常执行与解释执行9a)正常执行b)解释执行*解释执行优缺点•模拟取指/译码/执行软件流水线•优点:容易实现复杂度低•缺点:性能太差10解释执行的改进•对于模拟与物理机相同体系结构的虚拟机•很多敏感指令不需要模拟而可以直接在物理CPU上运行•便有以下两种改进技术:扫描与修补二进制代码翻译11扫描与修补•虚拟机中模拟的CPU与物理CPU体系结构相同时,大多数指令可以映射到物理CPU而直接执行•扫描与修补:多数指令直接在物理CPU执行,把OS代码中的敏感指令替换为跳转指令或会陷入到VMM中去的指令,一旦运行到敏感指令处控制流就会进入VMM中,由VMM代为模拟执行12扫描与修补流程•VMM在虚拟机开始执行每段代码之前对其进行扫描,解析每一条指令,查找到特权指令和敏感指令•补丁代码会在VMM中动态生成,通常每一个需要修补的指令会对应一块补丁代码•敏感指令被替换成一个外跳转,从虚拟机跳转到VMM空间里,在VMM中执行动态生成的补丁代码•当补丁代码执行完成后,执行流再跳转回虚拟机中的下一条代码继续执行13扫描与修补原理14*扫描与修补的优缺点优点:•异常处理较简单:由于指令是被一条一条打补丁的,原代码块相对的位置没有改变因此,发生异常时可以方便地找到异常指令对应的PC,然后将这个异常交给客户机OS处理就可以了•实现较简单•性能损失小:大多数客户机OS和用户代码可以直接在物理CPU上运行,故其性能损失也相对较小15扫描与修补的缺点•由于特权指令和敏感指令都被模拟执行,各条指令的模拟执行时间可能会很短,但也可能会较长•由于每个补丁都引入额外的跳转,这些跳转会降低代码的局部性•由于扫描与修补技术直接在虚拟机内存中进行代码修补,须维护一份与补丁对于的原始代码的备份,以便在需要时将代码恢复原状16二进制代码翻译•二进制代码翻译(BT技术)在VMM中开辟一块代码缓存,将代码翻译好放在其中•客户OS代码不会直接被物理CPU执行,所有要被执行的代码都在代码缓存中•相比较而言,BT技术最为复杂,其在性能上同扫描与修补技术各有长短17二进制翻译的单位:基本块•BT以基本块为单位翻译代码:表示只有一个入口和一个出口的代码块,这块代码只能从头进入,从尾退出,既不会有外界跳转跳入到代码块中间的某个地方,也不会有代码块中间的某个地方有外界跳转跳出该代码块•模拟器动态、按需读入二进制代码进行翻译,将翻译好的目标代码存放在模拟器开辟的内存空间中(称为代码缓存)•源代码中的指令与翻译后的代码用某种映射关系进行关联常用的是哈希表:由源代码的PC值通过哈希函数计算查表得到其在代码缓冲区中的位置18翻译•模拟器对读入的二进制代码不作限制应用程序的代码OS内核代码•读入的二进制代码可能包含所有的X86体系结构的指令,模拟器将其翻译输出为X86指令的一个安全子集,即其中不包含特权指令和敏感指令,能够运行在用户态19二进制代码翻译BT技术在VMM中开辟一块代码缓存,将代码翻译好放在其中原始客户机OS代码不会直接被物理CPU执行,他们以基本块的形式组织模拟器先将其执行的基本块翻译成目标代码块,再转入目标代码块执行最后翻译接下来要运行的原始基本块20图4—8二进制代码翻译BT技术的难点BT技术在处理过程中会遇到以下困难:•自修改代码(SelfModifyingCode)自修改代码值程序会修改自身代码段的内容。一旦发生自修改操作,模拟器需要将代码缓存中对应已翻译的代码清除掉,对新写的代码重新翻译•自参考代码(SelfReferentialCode)有些程序会从自己代码段中读取内容,在这种情况下,模拟器需要让程序读取原代码段的内容而不是代码缓冲区的内容21BT技术的难点•精确异常(PreciseExceptions)指在翻译代码执行中发生了中断或异常,这时需要将运行状态对应到原代码执行到异常点时的状态,然后交给客户机OS去处理精确异常问题对于BT技术来讲比较难解决,主要是由于翻译的代码和原代码已经失去了逐条对应的关系一个可能的解决方法是在发生异常时,模拟器回滚到基本块的开头,然后用解释执行的方式逐条执行原代码•实时代码对于实时性要求较高的代码,运行在模拟环境下会损失时间精确性这个问题尚未得到很好的解决22BT技术的优化BT技术在发展过程中积累了以下优化技术来提高整体性能:•基本块串联使得运行尽可能不要跳出虚拟机环境,即让执行从一个基本块直接跳转到下一个基本块,而不需要模拟器的介入,从而减少模拟器环境和虚拟机环境的切换基本块的串联可以通过修改直接控制流转移指令的跳转目标来完成,例如固定目标地址的CALL和JMP指令等。•指令缓存布局优化合理地放置代码缓存能够加强执行时CPU中指令缓存的局部性,这点对于性能优化有很大帮助有时,一些虚拟执行的计算密集型程序会出现性能好于原代码执行,原因就是指令/数据缓存有更好的局部性但是,要刻意去做这种优化,难度非常大23BT技术的优化•自适应翻译一些敏感指令只有在涉及敏感数据时才需要模拟执行自适应的目的是有效地找出这小部分的敏感操作,而不影响敏感指令的非敏感操作原理:“无罪假定(InnocentUnitProvenGuilty)”——如果模拟器不能确定一条指令会还是不会进行敏感操作,就先假定其不会发生,直到这条指令确实发生了敏感操作。此时,模拟器才对其特别处理。•这样优化的好处是模拟器不需要事先知道需要特别处理的敏感指令有哪些,这样的方法对于筛选出少部分的指令效果很好24基于软件的完全虚拟化•4.1概述•4.2CPU虚拟化4.3内存虚拟化•4.4I/O虚拟化25内存虚拟化的目的•提供给虚拟机一个从零地址开始的连续物理内存空间•在各虚拟机之间有效隔离、调度以及共享内存资源防止某个虚拟机内部的活动影响到其他的虚拟机甚至是VMM本身,从而造成安全上的漏洞26客户机物理地址的引入•内存虚拟化的核心在于引入新的地址空间:客户机物理地址空间•引入虚拟化后,VMM负责管理和分配每个虚拟化的物理内存,客户机操作系统看到的是一个虚构的客户机物理地址空间,指令目标地址是一个虚拟机物理地址无虚拟化情况下,客户机物理地址就是实际物理地址在虚拟化情况下,客户机物理地址不能直接发送到系统总线上•VMM需要负责先将客户机物理地址转换成一个实际物理地址后,再交由物理处理器来执行27虚拟化后的三种地址空间/内存28地址内存虚拟化的主要任务引入了客户机物理地址空间,内存虚拟化就主要处理以下方面的问题:•给定一个虚拟化,维护客户机物理地址到宿主机物理地址之间的映射关系•截取虚拟机对客户机物理地址空间的访问,根据所记录的映射关系,将其转换成宿主机物理地址•维护VMM与客户机以及多个客户机之间的隔离性29客户机物理地址到宿主机物理地址的映射•这是一个数据结构的映射问题•客户机OS维护虚拟机中进程所使用的虚拟地址到客户机物理地址的映射用公式表示:GPA=g(GVA)GVA代表客户机虚拟地址,GPA代表客户机物理地址•VMM维护客户机物理地址到宿主机物理地址之间的映射用公式表示:HPA=f(GPA)HPA代表宿主机物理地址•虚拟机进程所使用的客户机虚拟地址要变成物理处理器可以执行的宿主机物理地址,需要进过两层转换,即:HPA=f(g(GVA))30GPA到HPA映射关系表•为了实现GPA到HPA的地址翻译,VMM需要为每个虚拟机动态维护一张从GPA到HPA映射关系表•VMM截获修改客户机页表和刷新TLB的指令,根据GPA到HPA映射关系表,修改从GVA到GPA映射的操作,变成修改GVA到相应HPA映射关系的操作•0起始地址引入地址映射表后,HPA只有一个0起始地址,但在不同GPA空间里,可以各有一个从0开始地址•地址连续性客户OS看来连续的客户机物理内存空间,其对应的宿主机物理内存空间可能是不连续的VMM为多个虚拟机分配宿主机物理内存的灵活性,提高了宿主机物理内存的利用率•隔离性VMM通过映射表确保运行于同一宿主机上的不同客户机访问的是不同的物理内存,即相同的客户机物理地址被映射到了不同的宿主机物理地址上31内存虚拟化方法基于软件的内存虚拟化方法•影子页表法•硬件辅助内存虚拟化•类虚拟化3233但是,客户机的虚拟地址到宿主机物理地址的转换是保证客户机在宿主机上访问内存运行正确的核心环节,这样,为了支持和保存这种转换或映射,并能根据客户机修改页表的需要及时更新,VMM就需要另外一张页表,这就是影子页表。VMM必须把客户机虚拟地址到客户机物理地址的转换修正为客户机虚拟地址到宿主机物理地址的转换。这样的转换显然不是客户机的页表所能支持的,客户机的页表只知道客户机的物理地址,而VMM为了实现对每个客户机的隔离与保护,也不会让客户机了解宿主机的物理地址。对于完全虚拟化的客户机,监控程序甚至不能够修改客户机的页表。影子页表(1)一份影子页表与一份客户OS的页表对应(2)影子页表完成GVA直接到HPA的地址翻译34图4—10影子页表的作用虚拟MMU•虚拟MMU为了使影子页表工作,VMM要对MMU进行虚拟化•客户OS的页表不能被物理MMU直接利用进行地址翻译客户OS所能看到和操作的都是虚拟MMU客户OS所维护的页表只是被客户OS载入到虚拟MMU不能被物理MMU直接利用来进行MMU硬件实现的地址翻译•真正被VMM载入到物理MMU中的页表是影子页表35引入影子页表的系统结构36影子页表的作用•影子页表是被物理MMU所装载使用的页表VMM要为客户OS的每套页表都维护相应的影子页表•影子页表简化了地址的翻译有了影子页表,普通内存访问只需要使用影子页表即可实现从GVA到HPA的转换不需要在每次访问内存时都进行GVA到GPA以及GPA到HPA的两次转换•影子页表可降低性能的开销37影子页表与客户OS页表38客户机OS影子页表的基本原理•影子页表的结构并不一定与客户机页表的机构一致例如,在64位宿主机上,可以运行32位客户机•相对于同一个虚拟地址,在影子页表中最后一级页表的页表项所指向的宿主机物理页,必须是客户机物理页在客户机物理地址与宿主机物理地址映射表中相对应的宿主机物理页•只有这样,客户机操作系统才能由影子页表访问到它想访问的客户机物理地址。这就是影子页表的基本原理。3940宿主机*影子页表的更新与维护•客户机OS使用的页表不是静态的客户机总在不断修改客户机页表客户机修改客户机页表时,会修改从GVA到GPA的映射关系•为保持一致,VMM必须对影子页表进行相应的更新和修改VMM需要截获这类内存访问操作,修

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功