一种非对齐访存的处理方法技术

技术编号:2823269 阅读:200 留言:0更新日期:2012-04-11 18:40
一种非对齐访存的处理方法,包括:根据目标体系结构设定翻译门限,在解释器中对访存指令进行插桩,得到非对齐访存指令的信息;当翻译单元的执行次数大于所述翻译门限时,根据所述非对齐访存指令的信息指导翻译器选择合适指令将翻译单元翻译成本地码;根据异常处理机制将解释器插桩未发现的非对齐访存指令生成相应的非对齐访存指令序列,插入到异常处理地址,嵌入到执行代码中。使用该方法可以极大的减少二进制翻译器中产生的非对齐访存异常的次数,提高二进制翻译器的效率;可以更好的处理代码执行行为随不同输入集而变化的应用程序中出现的非对齐访存异常,并且可以有效的提高二进制翻译系统的运行效率。

【技术实现步骤摘要】

本专利技术涉及计算机领域内的二进制翻译
,更具体地,本专利技术涉及 二进制翻译中的。
技术介绍
二进制翻译是解决软件移植问题的一种重要技术手段,可以将一种指令集体系结构(ISA )上的可执行程序翻译到另 一种指令集体系结构的计算机上执行, 并且具备很高的执行效率。二进制翻译已经用来将一种ISA上的可执行程序翻 译到同种ISA的较高版本上执行,以在同一个系列的计算机中使用高档次的机 器高效地运行低档次机器上开发的软件。特别是随着虚拟机技术的普及,二进 制翻译技术的重要性也越来越明显,很多虚拟机软件中都不同程度的运用了二 进制翻译技术以保障虚拟机的运行效率。IA32体系结构(或称为X86体系结构)是以Intel、 AMD公司为主导开发的 一种指令集体系结构,是目前市场上应用最广泛的指令集体系结构之一,目前 流行的大量软件是基于IA32体系结构的,因此,针对IA32的二进制翻译技术 研究也格外受到重视,新推出处理器的很多厂家希望借助二进制翻译技术或虚 拟机技.术在自己的计算机上运行IA32软件。在x86体系结构到Alpha、 MIPS等RISC体系结构的二进制翻译系统中,非 对齐内存访问(即访存地址不是所访问数据单元字节数的整数倍)会对二进制 翻译系统的性能产生非常大的影响。这是因为在x86体系结构的机器上有专门 处理非对齐访存的硬件,处理非对齐访存的代价非常低,所以编译器编译生成 目标代码时不会保证访存指令的目标地址是对齐的。但是在Alpha、 MIPS等RISC 体系结构的机器上使用访存指令读取或写入数据单元时,目标地址必须是地址 对齐的,否则将会引发异常。操作系统检测到非对齐异常后,会调用相应的异 常处理程序对其进行处理,这个处理过程一般需要上千个系统时钟周期。如果程序中有大量的非对齐访存,那么将会对程序性能产生非常大的影响。因此在以IA-32为源体系结构,ALPHA、 MIPS等为目标体系结构的二进制翻 译器中,如何有效的消除上述非对齐访存带来的性能影响是一个非常重要的问 题。 一个简单的方法是将所有的访存指令都翻译为目标平台上对齐的访存指令 序列,但这种方法的一个明显的缺点就是带来很大的代码膨胀,使程序中非对 齐访存操作较少的程序的运行时间明显变长。另外,在DIGITAL FX!32、 IA-32 Execution Layer (EL)和Transmeta's Code Morphing Sof tware等二进制翻译 系统中都有对非对齐访存指令的处理。其中Transmeta's Code Morphing Software采用的是硬件处理的方法,可以有效的处理非对齐内存访问,但需要 软硬件协同设计,只适用于特定的系统;DIGITAL FX!32和IA-32 EL采用软件 的方法来处理程序中的非对齐访存指令,虽然它们可以有效的处理程序中大部 分的非对齐内存访问,但是对于代码执行行为随执行时间或不同输入集而变化 的程序的处理效果不明显。
技术实现思路
为克服现有二进制翻译系统对非对齐访存处理的普适性差、实时处理能力低的缺陷,本专利技术提出 一 种非对齐访存的处理方法。根据本专利技术的一个方面,提出了,包括 步骤IO)、在解释器中对访存指令进行插桩,得到非对齐访存指令的信息; 步骤20)、当翻译单元的执行次数大于预设的翻译门限时,根据所述非对齐访存指令的信息指导翻译器将翻译单元翻译成本地码;步骤30)、在所述本地码执行过程中,如果发生非对齐访存,则利用异常处理机制,在异常处理函数中根据操作系统保存的异常上下文信息生成相应的非对齐访存指令序列,并将所述指令序列插入到本地可执行代码中。其中,步骤IO)中,所述目标体系结构包括ALPM、 MIPS和Itanium体系结构。其中,步骤10)进一步包括解释执行访存指令时,确定所述访存指令发 生非对齐内存访问,记录所述访存指令的相关信息;在当前执行的翻译单元解释执行完成后,保存所述访存指令的相关信息。其中,通过判断访存地址是否对齐来确定所述指令是否发生非对齐内存访问。其中,所述访存指令的相关信息可以包括所述访存指令的地址、访存地址 的对齐方式、发生对齐访存的次数和一一对齐访存的次数。其中,步骤20)进一步包括步骤210)、根据所述非对齐访存指令的信息确定当前指令发生非对齐访存, 将当前指令中的访存操作翻译为非对齐访存指令序列;步骤220 )、对翻译单元内的指令逐条进行翻译,根据解释器插桩得到的关 于访存指令的访存地址是否对齐的信息,将访存指令翻译为相应的指令或指令 序列。其中,步骤210)进一步包括根据当前访存指令的地址是否包括在所述访 存指令的相关信息的所述访存指令的地址中,判断当前指令是否发生非对齐访存。其中,步骤30)进一步包括步骤310)、在二进制翻译器的初始化阶段注册异常处理函数,如果在程序 执行过程中出现非对齐访存异常,操作系统保存异常现场上下文;步骤320 )、从所述操作系统保存的异常现场上下文中得到发生非对齐异常 的访存指令的地址,分析所述访存指令得到访存地址及源或目标寄存器信息, 根据从异常上下文中得到的指令地址判断所述异常是否由x86访存指令引起;步骤330 )、如果所述异常不是由x86访存指令引起,根据访存指令的类型 进行相应保存或者更新处理;步骤34Q)、如果所述异常由x86访存指令引起,根据分析得到的指令信息 生成相应的非对齐访存指令序列;步骤35t))、将生成的非对齐访存指令序列嵌入到代码中,并将发生非对齐 访存异常的指令替换为跳转到上述指令序列的无条件跳转指令。其中,步骤330 )进一步包括如果当前发生非对齐访存异常的访存指令是Load指令,将访存目标地址中 的内容利用字节对齐的访存操作取出,然后利用逻辑操作得到结果,将结果更 新到异常现场上下文信息中;如果当前发生非对齐访存异常的访存指令是Store指令,从操作系统保存 的异常现场上下文信息中取出store指令的源寄存器的内容,按对齐访存的方式将其存到目标内存单元中。其中,步骤340)进一步包括 申请一段本地码空间;根据分析发生非对齐访存的指令得到的信息,生成相应的非对齐访存指令 序列;将所述生成的非对齐访存指令序列保存到所述申请的本地码空间中;将发生非对齐访存的指令修改为跳转到非对齐访存指令序列的跳转指令。 相对于将二进制翻译器中的非对齐访存异常交由操作系统处理的方法,本专利技术可以极大的减少二进制翻译器中产生的非对齐访存异常的次数,提高二进 制翻译器的效率;相对于通过程序预执行来判断访存指令是否会发生非对齐访 存的方法,本专利技术不仅可以省去预执4亍一次应用程序的时间开销,而且可以更 好的处理代码执行行为随不同输入集而变化的应用程序中出现的非对齐访存异 常;相对于仅使用动态插桩机制来处理非对齐访存的方法,本专利技术可以更好的 处理代码执行行为随执行时间而不断变化的程序(即一条访存指令在执行多次 之后才发生非对齐访存)中出现的非对齐访存异常,对于程序执行过程中会出 现大量非对齐访存的程序,与单纯的动态插桩机制相比,本专利技术可以有效的提 高二进制翻译系统的运行效率。附图说明图la和图lb分别示出处理非对齐访存指令的系统组成和方法流程图;图2是在二进制翻译器中翻译对齐访存的访存指令的示意图3是在本文档来自技高网
...

【技术保护点】
一种非对齐访存的处理方法,包括:步骤10)、在解释器中对访存指令进行插桩,得到非对齐访存指令的信息;步骤20)、当翻译单元的执行次数大于预设的翻译门限时,根据所述非对齐访存指令的信息指导翻译器将翻译单元翻译成本地码;步骤30)、在所述本地码执行过程中,如果发生非对齐访存,则利用异常处理机制,在异常处理函数中根据操作系统保存的异常上下文信息生成相应的非对齐访存指令序列,并将所述指令序列插入到本地可执行代码中。

【技术特征摘要】

【专利技术属性】
技术研发人员:李建军武成岗陈龙
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1