动静结合二进制翻译中静态信息不完备的处理方法及装置制造方法及图纸

技术编号:2856710 阅读:228 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了动静结合二进制翻译中静态信息不完备的处理方法及装置,通过预留必要的入口,由动态翻译执行器进行即时翻译,并通过和预留入口相链接的方式发挥系统的性能。增加设置入口和采用即时翻译,克服现有技术动态执行中长时间无法返回静态所生成的本地码的问题,以及动态是单纯采用解释执行效率低的问题,提高代码质量和系统整体性能。

【技术实现步骤摘要】

本专利技术涉及计算机领域的二进制翻译技术,尤其涉及一种动静结合二进制翻译中静态信息不完备的处理方法及装置
技术介绍
编译是计算机自身领域的关键技术,二进制翻译则是编译的一个重要研究方向。早在1987年HP公司就开发了第一个商用二进制翻译系统Bergh et al。接下来,许多公司和研究机构也相继展开了这方面的研究,其中最具有代表性的有HP、IBM、Digital、AT&T、APPLE、Transmeta、澳大利亚Queensland大学、奥地利维也纳技术大学等,目前,Intel设立在中国的软件中心也加入了这个行列。二进制翻译目前正在成为解决软件移植问题的一个研究热点。众所周知,新开发的处理器如果其ISA不向前兼容,则会失去现有软件的支持,影响其推广和应用。这就迫使设计者使用宝贵的芯片空间来兼容老处理器,这样既增加新处理器的复杂度和功耗,影响其主频的提高,又阻碍了处理器的发展。二进制翻译技术为新旧处理器架起了一座桥梁,将现有的软件移植到新开发处理器上执行,使得新处理器摆脱向前兼容的约束。二进制翻译技术对促进国产处理器的发展也很有意义。近十多年来,中国的信息产业得以飞速发展,并正在逐步走向成熟。随着知识和经验的积累,业界精英们开始向计算机领域中最为核心的技术挑战。以“龙芯”、“星光”、“方舟”、“汉芯”、“神威”、“万通”、“北大众志”等为代表的国产通用或嵌入式微处理器不断涌现,打破了中国无“芯”的局面。但由于Intel在X86系列微处理器上各种专利的限制,使得国内的许多微处理器设计者不得不采用与X86系列微处理器不兼容的ISA。众所周知,X86系列机器作为主流机型,已经拥有极其丰富的应用软件群。ISA的不兼容导致国产微处理器的应用软件与X86微处理器相比显得有些匮乏,从某种程度上影响了其推广和应用的步伐。因此开展二进制翻译的研究,同样可以丰富国产处理器的应用软件,为这些民族产业扩大市场提供支持。二进制翻译采用的策略有动态和静态之分。所谓动态二进制翻译是指,代码的翻译在程序执行的过程中进行,边执行边翻译。静态二进制翻译则是在程序执行前,由翻译器对源二进制程序直接分析,并进行翻译形成新的可执行程序。由于程序中存在“间接转移”、“间接调用”、“代码自修改”等问题,只有采用动态翻译才能使这些问题得以解决,并且动态优化的自适应性还会带来静态翻译所不具备的好处。研究中发现,动态二进制翻译虽然能够弥补静态翻译中的不足,但其缺点也十分明显。动态翻译和优化都占用运行时间,导致不能采用较为深层次的优化策略。这些策略在提高性能的同时,其行为本身也会占用总开销,从而造成系统性能的下降。在进行静态翻译时,由于间接跳转和间接调用的目标的不确定,导致该步骤无法获得完备的控制流信息,由此而产生了两个关键性问题(1)无法准确确定基本块的边界,(2)不能够跨基本块进行代码优化。这两个问题会迫使静态翻译不得不采取保守策略,从而影响了所产生的代码质量,降低了系统的整体性能。美国的Digital公司的FX!32系统采用了动静结合的二进制翻译手段,预留入口点,它将函数入口和CALL指令的下一个block留作入口。FX!32在执行过程中,当从静态翻译所得的代码中跳转到未知地址时,则转入动态执行阶段,该阶段完全由解释器来完成。该系统虽然也解决了上述两个问题,但是它忽略了一些其它重要的入口(比如动态部分执行过程中,遇到的已经翻译过的部分,此时应该尽早进入已经翻译过的代码中执行,为此需要静态翻译时留出相应的入口)。由于必要的入口预留的不充分,从而导致控制进入解释器后,长时间无法返回静态翻译所生成的本地码。众所周知解释器的执行效率比较低,长时间通过解释器来执行源二进制代码,将会严重影响系统的整体性能(当前动静结合二进制翻译的弊端)。另外,FX!32动态执行完全依赖于解释器。当被执行的部分是一段较热的代码时,解释器将会成为系统性能不能充分发挥的瓶颈。
技术实现思路
本专利技术所要解决的技术问题是提供一种动静结合二进制翻译中静态信息不完备的处理方法,克服现有技术动态执行中长时间无法返回静态所生成的本地码的问题,以及动态是单纯采用解释执行效率低的问题,提高代码质量和系统整体性能。在介绍本专利技术之前,我们先介绍一个在本文档中使用的一个概念翻译单元。在翻译过程中,由于翻译程序所见到的只是二进制代码,并且这些代码中可能存在间接的分支跳转指令,另外编译器为了优化,还经常对函数尾部进行链接,这些都会导致翻译程序无法准确地划分一个函数的边界。为此,本系统在处理二进制程序时,是以翻译单元为单位进行的。这里称满足如下条件的代码段为翻译单元a)翻译单元的起始入口一个翻译单元以函数调用指令的目标地址作为起始入口;b)从入口开始,依次按照控制流分析相应的指令,当遇到静态时无法确定的目标的间接跳转目标的指令、函数返回指令时,这些指令作为翻译单元的出口。为了解决上述技术问题,本专利技术提供一种动静结合二进制翻译中静态信息不完备的处理方法,包括以下步骤a)从静态可翻代码中选取一些特殊的指令,将这些指令留作为入口,保守处理;b)除了留作入口的指令外,其它的地方无需进行保守处理,采用跨基本块的各种全局优化策略对翻译代码进行深度优化。c)动态翻译执行模块启动后,将静态翻译的代码和相应的入口装入内存,并优先运行静态本地码。d)在动态执行过程中,如果遇到尚未翻译过的代码时,由动态翻译器根据即将执行的地址对这些代码进行即时翻译执行,将动态生成的本地码之间以及静态生成的本地码进行链接,即时翻译直到遇到静态翻译所留出的入口时,再重新转入静态翻译的代码进行执行。在上述方案中,步骤a)中的入口的选择按照如下原则被翻译的翻译单元的入口所在基本块;函数调用指令的下一条指令所在基本块;入口数量超过某一个自定义门限的基本块;动态轮廓信息搜集到的,其它翻译单元中的分支跳转指令进入的本翻译单元的目标地址。在上述方案中,步骤a)中,对这些被留作入口的地方进行保守处理,不允许全局优化策略打乱这些入口处的状态,保持与源二进制代码相同的属性、寄存器和其它机器状态的一致。本专利技术还提供一种静态翻译方法,包括以下步骤a)如果存在上一次动态翻译执行时所获得的轮廓信息,读入这些信息,用这些信息作为后续步骤地指导信息。如果不存在,则将用于指导的轮廓信息设为空;b)反汇编源二进制代码;c)设置入口信息,将这些入口记录在入口信息表中;d)进行静态翻译,除了留作入口的地方,其它均采用深度优化策略进行优化;e)保存翻译后的代码和入口信息表,以供动态翻译执行器使用。在上述方案中,步骤a)中,轮廓信息包括block的热度信息,间接目标信息和目标不在本翻译单元的分支跳转指令的地址。在上述方案中,步骤b)中,当遇到间接跳转和间接调用时,查找间接目标信息表,如果已经有了相应的目标,则继续进行;否则,结束。在步骤c)中,将那些可能作为其它代码的目标的基本块留作入口,这些入口包括被翻译函数的入口所在基本块,函数调用指令的下一条指令所在基本块,入口数量超过某一个自定义门限的基本块。本专利技术还提供一种动态翻译执行方法,包括以下步骤a)装入源二进制代码;b)装入静态本地码以及相应的入口信息表;c)执行被翻译文件;d)导出轮廓信息和间接目标信息表供静态翻本文档来自技高网
...

【技术保护点】
一种动静结合二进制翻译中静态信息不完备的处理方法包括以下步骤:a)从静态可翻代码中选取一些特殊的指令,将这些指令留作为入口,保守处理;b)除了留作入口的指令外,其它的地方无需进行保守处理,采用跨基本块的各种全局优化策略对翻译 代码进行深度优化。c)动态翻译执行模块启动后,将静态翻译的代码和相应的入口装入内存,并优先运行静态本地码。d)在动态执行过程中,如果遇到尚未翻译过的代码时,由动态翻译器根据即将执行的地址对这些代码进行即时翻译执行,将动态生成 的本地码之间以及静态生成的本地码进行链接,即时翻译直到遇到静态翻译所留出的入口时,再重新转入静态翻译的代码进行执行。

【技术特征摘要】
1.一种动静结合二进制翻译中静态信息不完备的处理方法包括以下步骤a)从静态可翻代码中选取一些特殊的指令,将这些指令留作为入口,保守处理;b)除了留作入口的指令外,其它的地方无需进行保守处理,采用跨基本块的各种全局优化策略对翻译代码进行深度优化。c)动态翻译执行模块启动后,将静态翻译的代码和相应的入口装入内存,并优先运行静态本地码。d)在动态执行过程中,如果遇到尚未翻译过的代码时,由动态翻译器根据即将执行的地址对这些代码进行即时翻译执行,将动态生成的本地码之间以及静态生成的本地码进行链接,即时翻译直到遇到静态翻译所留出的入口时,再重新转入静态翻译的代码进行执行。2.如权利要求1所述的方法,其特征在于,步骤a)中的入口为被翻译的翻译单元的入口所在基本块;函数调用指令的下一条指令所在基本块;入口数量超过某一个自定义门限的基本块;及动态轮廓信息搜集到的,其它翻译单元中的分支跳转指令进入的本翻译单元的目标地址。3.如权利要求2所述的方法,其特征在于,所述翻译单元是一代码段;所述翻译单元以函数调用指令或分支跳转指令的目标地址作为起始入口;从入口开始,依次按照控制流分析相应的指令,当遇到静态时无法确定的目标的间接跳转目标的指令、函数返回指令时,这些指令翻译所述翻译单元的出口。4.如权利要求1所述的方法,其特征在于,步骤a)中,对这些被留作入口的地方进行保守处理,不允许全局优化策略打乱这些入口处的状态,保持与源二进制代码相同的属性、寄存器和其它机器状态的一致。5.一种静态翻译方法,包括以下步骤a)如果存在上一次动态翻译执行时所获得的轮廓信息,读入这些信息,用这些信息作为后续步骤地指导信息。如果不存在,则将用于指导的轮廓信息设为空;b)反汇编源二进制代码;c)设置入口信息,将这些入口记录在入口信息表中;d)进行静态翻译,除了留作入口的地方,其它均采用深度优化策略进行优化;e)保存翻译后的代码和入口信息表,以供动态翻译执行器使用。6.如权力要求5所述的方法,其特征在于,步骤a)中,轮廓信息包括块的热度信息,间接目标信息和目标不在本翻译单元的分支跳转指令及其目标地址。7.如权利要求5所述的方法,其特征在于,步骤b)中,当遇到间接跳转和间接调用时,查找间接目标信息表,如果已经有了相应的目标,则继续进行;否则,结束。在步骤c)中,将那些可能作为其它代码的目标的基本块留作入口,这些入口包括被翻译的翻译单元的入口所在基本块,函数调用指令的下一条指令...

【专利技术属性】
技术研发人员:武成岗张兆庆冯晓兵崔慧敏谢海斌唐锋杨浩
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

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

1