没有合适的资源?快使用搜索试试~ 我知道了~
动态二进制翻译中存储器访问的加速-安托万·法拉维隆的博士论文
动态二进制翻译中存储器访问的加速安托万·法拉维隆引用此版本:安托万·法拉维隆动态二进制翻译中的内存访问加速。操作系统[cs.OS]。格勒诺布尔-阿尔卑斯大学,2018。英语NNT:2018GREAM050。电话:02004524HAL Id:tel-02004524https://theses.hal.science/tel-020045242019年2月1日提交HAL是一个多学科的开放获取档案馆,用于存放和传播科学研究文件,无论它们是否已这些文件可能来自法国或国外的教学和研究机构,或来自公共或私人研究中心。L’archive ouverte pluridisciplinaireTHAPOSE为了获得等级DOCTEUR DE LA格勒诺布尔阿尔卑斯大学专业:信息Arrêté ministériel:25 mai 2016Présentée par安托万·法拉维隆Thèse dirigée parFrédéric PETROT(MSTII),Agueseur Grenoble-INP,Grenoble INP由Olivier Gruber编纂为集成系统架构提供信息技术和微电子技术的培训信息科学与技术学院信息科学与技术学院在动态二进制翻译中加入备忘录动态二进制翻译Thèse soutenue publiquement le22 November2018,devant le jury composé de:弗雷德里克·佩罗特PROFESSSEUR,GRENOBLE INP,Directeur de thèse埃尔文·罗乌INRIA RENNES-BRETAGNE中心研究主任亚特兰大,特别报告员加索尔·托马斯南巴黎电信教授、特别报告员ALAIN TCHANA图卢兹-昂塞岛会议厅,考官奥利弗·格鲁伯格勒诺布尔-阿尔卑斯大学教授,忒塞iiiJ雷默西芒然后就把所有的钱都给了弗雷德里克·Malgré son emploi du temps très chargé du à sesresponsabilités,il a toujours été disponible pour discuter et而且我也不想当一个简单的医生(这是我在工作中照顾你的问题我也很感谢奥利维耶·格鲁伯和我一起参加了这次会议但你也知道我的动机是因为他的乐观主义我非常感谢Nicolas Fournel先生,他不满足于我对老师我们要去看这条路。我很感谢陪审团。佛罗伦萨·马拉宁奇的律师会接受陪审团的建议Erven Rohou和GaëlThomas为您带来了非常有趣和积极的体验。还有阿兰·查纳也来研究这个问题,并提出了一些令人感兴趣的评论和观点。在许多方面,我非常感谢三年来一直陪伴我的人,SLS和GreenSocs:Luc和Clément,他们提出了我的问题Thomas et Olivier M.阿德里安·B.因为我把我的武器马夏尔和阿里夫最后一次与我一起讨论这些问题,准备口头发言和提出建议非常感谢恩佐让公众对我的演讲有了很好的评价。最后,非常感谢劳伦斯,感谢他在佐治亚大学的教育,感谢他的母亲给我带来的快乐我也不想这样,丹梅,我也是在这辆车里相遇的谢谢你让我继续下去,让我继续呆在这里没有她,这是不可能的v内容1介绍12问题陈述32.1指令集模拟技术32.2使用DBT6进行完整系统仿真2.2.1动态二进制翻译原则62.2.2模拟复杂指令82.2.3模拟内存访问92.3结论133最新技术153.1动态二进制翻译153.2加速全系统动态二进制翻译173.2.1生成的代码优化技术183.2.2多线程支持203.3加速内存访问模拟223.3.1基于TLB的解决方案273.4结论和剩余问题284使用硬件辅助虚拟化加速跨ISA仿真的DBT314.1一.导言. 314.2背景324.2.1硬件辅助虚拟化324.2.2沙丘框架344.3设计364.4执行情况. 384.5结论425使用Linux内核模块和主机页表的455.1导言.455.2设计我们的解决方案465.3QEMU/Linux实现495.3.1核心模块505.3.2动态二进制翻译535.4在内核级56处理内部故障5.5结论. 58vi内容6实验616.1一、导言. 616.1.1基准集616.2QEMU执行时间626.2.1QEMU62次列车分段时间比6.2.2指令分解:基准测试中内存访问的百分比646.2.3现有内存访问的效率模拟加速656.3基于沙丘的解决方案666.3.1第六十六号议定书6.3.2业绩分析676.3.3通信费用6.4Linux内核模块解决方案706.4.1业绩概览716.4.2混合解决方案分析726.4.3地址空间映射分析736.4.4内核故障处理766.5两种方法的结论和比较787结论817.1预期的837.1.1N特权级别支持837.1.2QEMU多线程支持857.1.364位目标支持857.1.4使用内核内部故障处理来87第11C介绍计算系统现在在我们的日常生活中无处不在,无论是以计算机的形式,还是以执行用户不知道的计算的设备的形式。这些系统在现代社会中占据了重要地位,这要归功于硅集成,使它们变得越来越小,但功能越来越全,导致片上系统(SoC)的出现,现在和一段时间以来,这是销售硅的主要方式集成化趋势使得这些芯片的设计和编程越来越复杂。它确实是现在相当普遍的那些是相对“通用”的功能8个或更多的核心,千兆字节的RAM和先进的图形单元。更糟糕的是,芯片制造商每年生产数十种不同的芯片因此,无论是需要测试设计的设计师,还是需要尽快为新芯片提供应用程序的开发人员,都不能等待最终的流片。这些问题的部分解决方案是使用模拟。而不是等待芯片可用,它的软件模型被构思出来,并在通用计算机上执行。在这些模型中,我们特别感兴趣的是,执行操作系统和应用程序的代码的处理器为了对指令集体系结构进行建模,已经开发了多种技术。从历史上看,第一个也是最简单的一个是指令每指令解释。然而,它被证明是非常缓慢的。为了避免这个问题,开发了更其中,我们可以找到动态二进制翻译,静态二进制翻译和本地(或编译)模拟。虽然最快,静态二进制翻译,和本机模拟更是如此,不能直接运行任何未经修改的目标代码,我们可能想要的。另一方面,动态二进制翻译相当平衡。它相对较快(比原生执行慢4到20倍),并且足够精确,可以运行未经修改的目标软件。它是许多工业级仿真器的基础,特别是QEMU,它是当今使用最广泛的仿真器之一。QEMU本身用于Android Emulator等工业级产品,也是官方KVM前端。虽然动态二进制翻译已经提供了令人满意的性能,但它仍然有许多方面可以改进。其中,一个重要的瓶颈是内存子系统。每个目标内存访问实际上都必须经过多个中间步骤才能执行。特别是,如果我们希望模拟的架构(称为目标)使用虚拟内存,则必须模拟目标内存管理单元。结果将被称为软件MMU。由于它是在软件中完成的,这种模拟将自动比目标硬件慢得多。在这篇论文中,我们提出了一些解决方案,以提高内存访问的模拟速度,2第1章介绍跨ISA动态二进制翻译的上下文更准确地说,我们选择在QEMU中实现我们的解决方案。为此,我们将管理目标内存访问的过程卸载到主机硬件,以获得接近本机的性能。这是通过两种方法完成的,一种基于HAV,另一种基于QEMU的配套Linux内核模块。在这两种情况下,目标都是让QEMU访问一个完全可控的地址空间,这反过来又可以用来为目标提供自己的本地地址空间。我们的最佳性能解决方案目前平均比基线加速78%,比基线加速高达6倍。它可以管理多个QEMU目标,并运行完整的操作系统,如Linux。对QEMU进行了很少的修改,并且Linux模块相当小且易于维护。手稿的组织如下。第2章详细描述了我们发现的问题。第3章探讨了已经给出的解决这些问题的方法,并详细说明了我们认为有待完成的工作。第4章和第5章介绍了我们为解决剩余问题而设计和开发的解决方案。在第6章中,我们提出了我们所做的性能分析,并使用它来比较我们提出的两种解决方案,以及与文献中已有的解决方案最后,第七章对本文进行了总结,并提出了一些研究展望.第23我问题陈述在这一章中,我们将介绍在全系统指令集仿真(ISS)的背景下快速CPU仿真所面临的主要问题。特别是,我们将讨论用于解决这个问题的主要技术及其局限性。我们将特别关注动态二进制翻译(DBT)的局限性,DBT是目前最有效的,也可能是这些技术中最广泛的。最后,我们将详细介绍这项工作的核心背后的问题,模拟整个系统跨ISA的内存访问模拟使用DBT。2.1指令集仿真技术在本节中,我们将介绍当今最常见的指令集模拟技术这些技术依赖于将给定架构(称为目标)的指令集转换到另一个将执行代码的架构(称为主机)的指令集有多种技术可以实现这一目标,每种技术都有其优点和缺点。然而,他们往往遵循一个简单的规则:技术越快,准确性越低。虽然准确性,例如在估计在目标上执行某个程序所需的时间方面,并不总是一个重要的问题,但抽象太多的细节可能会导致失去模拟任何类型代码的能力我们现在将按照模拟速度从最慢到最快的顺序呈现这些,因此也从最准确到最不准确。解释解释可能是最古老和最准确的模拟技术。过程如下。首先,我们从目标内存模型中读取当前指令,其地址由CPU程序计数器寄存器然后,对该指令进行解码,以便提取要执行的操作的类型、其输入、其输出和 可能的副作用。一旦完成,将执行对该操作进行建模的相应代码段。该原理在算法1中概述。我们首先从代表内存的数组中检索指令。然后我们解码它,并提出两个案例。要么它是一个简单的寄存器到寄存器的操作,如“ADD”,在这种情况下,我们只需读取操作所涉及的所有源寄存器,实现计算并将结果存储在目的地寄存器中。或者它是一个内存访问,如“LDR”情况所第2章.问题陈述4←←←当模拟运行时,do指令执行[pc]dec解码(指令)开关dec.opcodedo. . .案例ADD做[dec.dest]端. . .案例LDR做phys_addr←sof tmmu_translate([dec.src])[dec.dest]←[phys_addr]端. . .结束结束算法1:基于典型解释的模拟器算法应该执行访问的地址然后,如果需要,我们通过进行目标页面遍历将其转换为最后,我们将结果存储在目标寄存器中。这个过程的优点是相当准确,因为它在一个又一个的教学中进行。在模拟方面,它甚至可以是周期准确的。它还能够运行任何类型的目标代码,而无需修改。另一个很大的优点是它是完全便携的,即它不依赖于主机。一个相当流行的i386/x64模拟器,通常用于操作系统开发,Bochs [MS08],现在仍然使用这个过程。它的主要缺点是速度相对有限。[RBMD03,PGH+11]的工作表明,每个指令的执行至少比本机代码执行慢一百倍。确实存在一些优化,主要的一种称为预解码,将指令以解码后的形式存储在某个缓存中(通常是指令的模型缓存),并在达到相同的程序计数器且缓存命中[TGN 95]时直接重用此解码形式。动态二进制翻译动态二进制翻译,顾名思义,包括动态地将目标二进制代码翻译成主机二进制代码。模拟阶段将与代码生成阶段交错。在许多方面,它可以被视为解释的直接优化,其中解码目标指令的结果,而不是仅仅被执行,被翻译成主机代码并保留以供以后重用。它的主要优点是它保持相对准确,并且能够执行任何类型的目标代码,同时比原始解释快几个数量级。在第2.2节中给出了该技术的精确描述。静态二进制翻译与动态二进制翻译相反,静态二进制翻译(SBT)的目的是在实际执行结果代码之前翻译整个目标二进制[CVERL02]。这种技术的主要优点是,由于翻译是离线完成的,因此不会产第25生副作用。52.1. 指令集仿真技术用户在运行时看到的。例如,在DBT中,由于需要动态生成代码,在程序启动时甚至在用户输入时可能会出现一些延迟。此外,可能会花费比DBT更多的时间来优化翻译后的代码它的主要缺点是,当分支目标静态未知时,翻译代码相当复杂,在相当多的情况下甚至是不可能的。模拟自修改代码或动态加载可执行代码也是乏味的。这通常导致需要在生成的代码中嵌入一个解释器,该解释器在运行时解释违规代码。模拟操作系统代码还需要操作系统半虚拟化来检测新代码并解释它,这意味着运行未经修改的目标二进制文件并不总是可能的。本地模拟本机(或编译)模拟可能是当今最快的跨ISA模拟技术。与二进制翻译技术不同的是,它依赖于目标源代码。此源代码将直接为主机编译,可能带有代码注释,以便能够在真正的目标机器上重建执行。对设备的必要访问将与硬件抽象层(HAL)接口,该层在某种程度上是半虚拟化层。然后,HAL的后端可以与设备模型进行接口这种技术的主要局限性是,首先模拟器需要应用程序的源代码,因此不符合专有和遗留代码,这通常是不可接受的。这种方法的第二个缺点是它非常不精确。如果没有代码插装,几乎无法检索到任何目标机器执行信息第三个也是技术上最具限制性的限制是,它不能很容易地用来模拟操作系统。在其标准形式中,这种技术确实依赖于提前知道将要执行的所有内容并对其进行编译,以便能够在主机上执行。这使得它不适用于完全的系统仿真,其中不存在关于将被仿真的知识。硬件辅助的虚拟化硬件辅助虚拟化(HAV)虽然不直接针对模拟,但仍然可以用于填补其部分角色[SHP12]。其基本原理是部分复制主机CPU,以便未修改的目标可以在复制的CPU上运行这个重复的CPU,称为vCPU(虚拟CPU),有自己的架构状态,自己的地址空间以及自己的每个架构寄存器视图。使用这种方法,目标可以以接近本机的速度运行,未经修改,并且主机可以监视它。例如,它可以用于开发新的操作系统,或调试现有的操作系统,以及使用诸如perf[DM10]之类的工具它唯一真正的限制是目标和主机必须具有相同的ISA。这违背了测试新的CPU设计和运行来自其他ISA的遗留或一般二进制文件的目的总结总之,存在多种CPU模拟技术,但目前只有一种能够真正满足完整系统模拟的需求,同时保持相对快速:动态二进制翻译。其他技术,如本地仿真,可能确实在本质上更快,但它们在全系统仿真方面受到严重限制。最好的情况下,它们需要大量的半虚拟化技术来运行,并且通常仅限于应用程序。硬件辅助虚拟化可用于相同的ISA模拟,6第2章.问题陈述目标二进制PC已经看过?是的没有解码Fetch布兰奇执行没有是的前端µop转换高速缓存后端代码生成但不能,至少不能直接用于交叉ISA模拟[HPF13]。因此,为了加速完整系统模拟的目标,关注动态二进制翻译似乎是合理的。2.2使用DBT进行现在让我们介绍如何使用DBT功能进行完整的系统仿真。我们将详细介绍它目前的局限性,特别强调我们在这项工作中最感兴趣的是什么,内存访问的模拟。2.2.1动态二进制翻译原理图2.1:DBT过程概述(摘自和翻译自[Mic14])让我们首先解释一下可重定向动态二进制翻译的基本原理。基于DBT的模拟器每指令提取目标程序的代码。该代码首先被动态地转换为由2.2.使用DBT进行7模拟器将目标ISA与主机ISA解相关。然后将此IR转换为主机二进制代码。最后,此代码直接在主机上执行图2.1更精确地描述了DBT的工作方式。该过程从获取阶段开始。在那里,我们获取位于与其当前程序计数器(PC)相对应的地址处的目标指令。然后,该指令被解码,即, 目标操作码被转换为相应的微操作,该微操作是仿真器所使用的IR的一部分。只要指令不是分支,我们就回到第一步来获取和翻译下一条指令。当最终当前解码的指令是分支时,所有微操作都被转换为主机二进制代码。然后,该代码被缓存到包含已遇到的代码的翻译的翻译缓存这样存储的块称为翻译块,它在精神上与编译中定义的基本块非常相似。最后,执行翻译块中当到达块的末尾时,模拟器检查是否已经看到最后一个分支指令所指向的程序计数器(PC)。如果是,执行将在如此指向的翻译块处继续。否则,它将返回到获取解码阶段。需要记住的一点是,代码缓存的大小不是无限的。最终,当我们用越来越多的代码填充它时,它会被填满。此时,必须做出选择,以便驱逐一些已经翻译的代码块,为新的代码块腾出空间。一个简单但令人惊讶的高效选择是刷新整个翻译缓存。这个过程的主要优点是它不对目标二进制文件做任何假设因此,无论我们是模拟操作系统还是应用程序代码,无论代码是自修改还是动态加载库或可执行文件,模拟器都不会发生任何变化,提取-解码-执行过程继续进行。 由于使用IR,它通常也是相当可重定向的,即。它可以支持多个(目标、主机)ISA对。如[CK94,WR96,AEGS01]所示,模拟速度也大大优于解释全系统DBT的一个限制是生成的代码通常没有得到很好的优化。原因在于这段代码的性质在完整系统模拟中,将模拟一个操作系统在运行时,我们没有关于我们正在执行什么的信息,结果是我们生成的许多代码可能永远不会被重用。代码也往往会被目标修改或抑制,从而导致翻译块刷新。跳转将发生在一个块中的多个地方,从而产生多个相对较小的部分副本。结果是优化的机会是有限的,并且高级优化真正有用的机会是有限的。此外,高级优化非常耗时。花太多的时间优化会导致花很长的时间来生成翻译块,如果最终没有重用这些块,这些成本甚至无法摊销。这个问题在[DB00]的工作中得到了详细的处理代码生成的方式,即 每一条指令和一个块一个块地执行,也将对性能产生重要影响。通常,现有的优化一次只关注一个翻译块这意味着从其他即时(JIT)编译器中获得灵感的高级技术,代码还将被标记为需要保持架构状态最新,特别是目标寄存器。这意味着对于大多数指令,加载寄存器状态的阶段通常会在实际模拟代码之前,然后是存储修改后的寄存器的阶段目标(本例中为Arm)指令转换为主机(此处为x64)的结果代码如图2.2所示。我们可以看到,目标指令,一开始没有进行内存访问,已经被转换为不是一个指令,而是三个指令,其中两个是内存访问。第一条指令将目标ip寄存器的值加载到主机第2章.问题陈述8add ip,ip,#20 ; 0x14生成代码mov 0x 30(%r14),%ebp;获取当前目标寄存器值1 添加0x14,%ebp;执行计算2mov %ebp,0x 30(%r14);将结果写回目标寄存器图2.2:目标add指令注册. 第二个执行实际的计算。第三个寄存器将寄存器的新从外观上看,我们可以想象得到的代码将比本机代码慢得多。主机添加可能会在一个周期内执行,但加载和存储可能需要几个周期来执行。这个例子是一个简单的指令,复杂的指令可能会导致更多的主机代码来模拟它们。2.2.2模拟复杂指令DBT的另一个性能瓶颈是复杂指令的模拟我们所说的复杂指令是指那些不能直接从目标指令转换为近似等价的主机指令的指令他们来自三个群体。• 第一组是架构状态更新。这些是改变CPU状态的指令,而不仅仅是改变标准架构寄存器的状态。这可以是TLB刷新指令,或者切换到不同的特权级别。这些通常意味着要由模拟器进行大量的检查和修改,并且直接在IR中进行是• 第二组是向量化和浮点指令集。这些指令通常很难从一个ISA映射到另一个ISA,因为在浮点单元设计中,遵守标准和传统是相互冲突的。浮点模拟的广泛分析可以在[SBP16]中找到。关于整数向量化指令,[MFP11]已经提出了IR的扩展,以包括SIMD指令,并在广泛使用这些指令的应用程序上展示了大幅加速• 最后一组是内存访问。这些在很大程度上取决于目标的架构状态,特别是其MMU的目标虚拟地址到目标物理地址的转换。由于隐含的代码使目标页面遍历,C代码在当前的模拟器中几乎是不可避免的我们将在2.2.3中更精确地解释内存访问模拟。从现在开始,我们专注于内存访问。模拟这些指令的主要解决方案是调用一个C函数,称为helper,它模拟目标指令的行为。这样的调用如图2.3所示。正如我们所看到的,与标准生成的代码执行相比,helper调用会引起很大的开销它至少会引发2.2.使用DBT进行9Qemu进程帮助代码(C)返回下一指令呼叫助手助手地址mov rdi,arg1 movrsi,arg2mov r10,helper_address调用 *r10图2.3:调用C代码助手堆栈上的适当位置)、跳转到帮助器、寄存器保存然后由于调用而恢复、以及间接跳转回生成的代码。仅仅这些阶段,如果没有模拟代码,就执行时间而言,已经远远超过了内存访问或标准向量指令。与生成代码的原始执行相比,这使得帮助程序成为一个重要的减速因素2.2.3模拟内存访问现在我们将更精确地详细介绍目前用于模拟内存访问的技术在DBT上下文中模拟内存访问实际上相当复杂。这个任务包括让一个未修改的目标二进制文件相信它在一个与实际硬件相同的地址空间中执行。这意味着模拟目标机器的多个关键点,包括它的MMU,所有内存指令和内存相关故障。所有这些还带来了一个相当大的体系结构状态,包括特权级别、页面大小、潜在的页表格式等概念为了清楚起见,在本节中,我们将考虑目标ISA基于带有MMU的32位 ARM处理器,而主机ISA是Intel x64机器。从客户机的角度来看,一切都好像没有模拟器一样客人第2章.问题陈述10客机物理存储器客户TLBL1母版页表TTB粗略L2页表@31.. 12TLB更新@11.. 0P(@31..第十二章)图2.4:ARMv7架构上对地址转换的硬件支持的简化视图汇编指令在客户硬件上按预期执行例如,用于内存访问的ARM指令ldr和str按预期执行,操作物理地址或虚拟地址。如果是虚拟的,这意味着MMU已经设置并启用。这个客户机透视图如图2.4所示,查看一个ldr指令。在此图片中,我们假设页面为4KB(ARMv7的最小粒度)。我们通常称虚拟页号(VPN)为虚拟地址的第32位到第12位所获得的页号当执行加载时,硬件访问翻译后备缓冲器(TLB),一个小型全关联存储器,用于缓存最新的虚拟到物理翻译,以获得页帧编号,如图的左侧所示如果地址转换未被缓存(TLB未命中),则遍历包含用于当前进程(由转换表基址寄存器TTB标识)的OS定义的VPN到PFN映射的页表结构。如果找到转换,则更新TLB并且指令结束。如果没有,则会引发页面错误异常,并且必须由在客户机上运行的操作系统进行处理在图2.5中,我们从主机的角度来看,显示了由模拟器维护的体系结构状态,重点是内存子系统的模拟。客户机物理内存由页面组成,因此模拟器在其自己的虚拟内存中管理相应的页面实际上,仿真器作为常规进程执行,因此可以分配内存页。仿真器还需要在软件中模拟客户机硬件MMU,这就是软件MMU表的作用第一个表将客户虚拟地址转换为客户物理地址,而第二个表将客户物理地址转换为主机虚拟地址。尽管如此,在图2.5中,我们还可以看到客户机指令及其到代码缓存中的转换可以在架构化状态的物理页之一中找到客户ldr指令。在执行之前,它被转换为x64指令的片段,以执行对helper函数的调用,helper函数是模拟器代码中可用的C函数辅助函数在软件MMU的表中导航,以便转换ldr指令执行访问的地址如果启用了来宾MMU,则地址为来宾P(@31..第十二章)@31..12P(@31..第十二章)0x130x37ldr 16 Rx,@@31..20@19..122.2.使用DBT进行11具有HP(@31..第十二章)软件MMUGuest TLB来宾页表的主机事务宿主虚拟存储器代码高速缓存.12影子页表L1母版页表TTB粗略L2页表来宾TLB模型更新来宾物理帧图2.5:客户机架构状态的主机视图虚拟地址,首先转换为客户机物理地址,最后转换为主机虚拟地址。软件MMU还负责模拟可能在地址转换或实际存储器访问期间发生的与存储器相关的陷阱。由于缺少映射或访问权限无效,地址转换可能会失败。转换后的地址也可能是客户机存储器映射中的无效地址总的来说,这意味着模拟器必须模拟陷阱的客户处理器行为,模拟通过陷阱处理程序向量的跳转虽然这种模拟方法有效,但其性能可以得到改进。帮助程序调用和软件页面遍历会导致重要的开销。由于软件MMU的代码相当大,对指令缓存的影响是不可忽略的。此外,转换总是发生,总是遍历页表,导致可能破坏数据缓存的内存访问,从而对性能产生负面这些开销建议在软件中进行优化,灵感来自硬件翻译后备缓冲器(TLB)。它被组织为一个内联的快速路径,而慢速路径是对helper函数的调用。内联快速路径只是一些指令和一些内存访问,在缓存最新翻译的小表中查找,就像硬件TLB一样。毫不奇怪,这个表被称为软件TLB。快速路径的代码可以在图2.6中看到。前两条指令严格来说不是虚拟TLB代码的一部分,但负责检索访客寄存器值并添加目标加载指令的偏移量(此处为4)。接下来的十条指令是真正的虚拟TLB代码。首先,我们计算虚拟TLB中客户机地址应该位于的索引这是一个简单的散列,我们取VPN的前N位,N是虚拟TLB大小的以2为底的对数显然,就像硬件TLB一样,散列可能会发生冲突,因此索引处的地址可能不是正确的。为了检查这一点,我们还计算了一个标签,这是来宾VPN的其余部分这些步骤包含在生成的主机代码的第2行和第7然后,在第8行,我们将计算出的标记与来自虚拟TLB条目的标记进行如果匹配,则第10行的跳转为))H(PH(P(@31..12))P(@31..第十二章)P(@31..第十二章)@31..120@11..0x370x13@31。助手(Rx,ldr 16 Rx,@翻译@19..12@31..20
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功