专利名称:一种动态二进制翻译中的翻译方法
技术领域:
本发明涉及二进制软件移植技术,尤其涉及动态二进制翻译中的一种模式匹配的翻译方法。
背景技术:
计算机系统的更新换代面临着大量软件资源的遗失,不同指令集结构硬件平台的可执行程序无法实现跨平台的执行。二进制翻译是一种解决不同平台间软件移植的有效方法,由于无需源代码支持,因而成为软件移植领域的热点。二进制翻译可分为静态二进制翻译和动态二进制翻译两种,前者需要生成对应整个源平台程序的目标平台可执行文件,后者只需在执行时即时消耗翻译生成的代码片段,无需留下代码文件。由于静态二进制翻译面临代码挖掘、自修改代码等棘手的问题,而这些问题通过动态二进制翻译都可以容易解决,因而动态二进制翻译相对静态二进制翻译具有更好的灵活性,并更容易保证程序的正确性。
二进制翻译可以看成是一种特殊的编译形式,它与高级语言编译的区别在于前者是两种低级语义之间的变换,而后者是从高级语义到低级语义的变换。由于二进制翻译是低级语义之间的变换,如果两种指令集体系结构的语义间隔较大,例如CISC与RISC指令集体系结构之间的差异,则难以实现指令的直接对应。所谓指令集之间的语义间隔,可以用附图1来解释,它是影响翻译质量的主要原因。高级语言被编译生成目标代码时,同样一个高层语义单元被翻译成面向不同ISA(指令集体系结构)的指令序列,其中{vi}为ISA 1的指令序列,{wj}为ISA 2的指令序列。现欲将ISA 1的代码翻译成ISA 2的代码,若按照传统二进制翻译方法,每条ISA 1的指令被对应成ISA 2的指令序列,则{vi}被翻译为{{wk}i},准确的说,{{wk}i}是ISA2对ISA 1的模拟。同样表达SemanticUnithighlevel的语义,{{wk}i}相对于{wj}来得复杂,甚至通过编译优化也无法还原最优状态。我们可以用{{wk}i}与{wj}的差距来度量ISA间的语义间隔,差距越大则语义间隔越大。
通常的二进制翻译方式有两种一种是借助多层中间表示的形式来沟通不同机器之间的语义差别,例如UQBT,首先根据机器描述将待翻译的源目标代码识别为源机器的低层中间表示,再通过语义映射将源机器低层中间表示提升到高层中间表示,进而在高层中间表示上进行机器无关的优化,而后将其翻译成面向目标机器的低层中间表示,再展开针对目标机器的优化,最后将优化好的中间表示根据目标机器描述转化成目标代码。采用多层中间表示的方法有利于实现多源多目标的二进制翻译,但带来的问题是运行时开销过大,因而不适合动态二进制翻译;另一种翻译方式是无需复杂的中间表示,直接将源机器指令对应成目标机器的指令序列,例如bintran,根据机器模型将每条源机器指令匹配成一串目标机器的指令,并实现匹配的最小化。由于没有结合指令序列上下文,这样作实际上是对每个源机器指令进行单独的指令选择,翻译出来的结果也必然无法保证质量。
对于动态优化来说翻译效率和质量是一对矛盾。
考察动态二进制翻译优化过程,发现其中大量工作具有重复性。实际翻译中,有一些反复出现的异地代码片段被优化成相同的目标代码,那么优化翻译这段重复出现的代码片段将导致巨大的运行时开销,从而影响了翻译质量和效果,进而降低了动态二进制翻译的性能。
发明内容
本发明所要解决的技术问题是提供一种动态二进制翻译中的翻译方法,克服现有动态二进制翻译技术中代码重复优化导致系统开销大的缺陷,降低系统优化的开销,提高翻译质量和效果,从而提高了动态二进制翻译的性能。
为了解决上述技术问题,本发明的动态二进制翻译中的翻译方法,包括以下步骤a)统计寻找翻译代码中频繁出现并影响翻译质量的翻译代码片断;b)找出上述代码片断中的指令模式;c)确定指令模式的翻译对应关系;d)扫描待翻译的基本块,寻找所述指令模式,找到,匹配成功,给所述指令模式做标记,否则,匹配未成功,结束扫描;
e)翻译基本块,翻译时遇到标记的指令时,按照所述指令模式的翻译对应关系翻译,否则,按照常规翻译。
在上述方案中,所述指令模式是一种针对一类具有相似特征的指令序列的统一表达形式。
在上述方案中,步骤b)还包括N种子模式。
在上述方案中,所述子模式符合所述指令模式,代表指令模式中的具体一种指令序列。
在上述方案中,步骤c)中,根据高级语义寻找目标机实现所述对应关系。
在上述方案中,所述翻译对应关系是多种的。
在上述方案中,步骤d)中,所述基本块是一段没有控制转移的循序指令序列。
在上述方案中,步骤d)包括以下步骤d1)输入基本块最后指令;d2)判断是否为指令模式?如果是,执行下一步,否则,执行步骤d8);d3)判断是否为第一条指令?如果是,执行步骤d8),否则,执行下一步;d4)取上一条指令;d5)判断是否为指令模式?如果是,执行下一步,否则,执行步骤d7);d6)指令模式匹配成功,标记该指令;d7)判断是否为标志位定值指令?如果是,执行下一步,否则,执行步骤d3);d8)指令模式匹配失败。
在上述方案中,遇到标记的指令时,步骤e)包括以下步骤e1)将指令模式中的指令的操作数对应到目标机上;e2)根据子模式按照所述翻译对应关系翻译标记指令。
由上可知,本发明通过指令模式匹配来翻译基本块,降低代码重复优化导致的系统开销,提高翻译质量和效果,从而提高了动态二进制翻译的性能。
图1是不同ISA之间的语义间隔。
图2是本发明翻译方法流程图。
图3是两种动态翻译方法在翻译的优化过程中运行开销上的对比示意图。
图4是本发明实施例中扫描基本块进行指令模式匹配的方法流程图。
图5是本发明实施例中X86控制转移指令对的子模式表。
图6是本发明实施例中X86子模式对应的MIPS翻译对应关系表。
在图5中,Signed表示符号比较,unsigned表示无符号比较。
具体实施例方式
下面参照附图详细说明本发明的技术方案。
图2是本发明翻译方法流程图,如图所示,动态二进制翻译中的一种翻译方法包括以下步骤步骤10,统计寻找翻译代码中频繁出现并影响翻译质量的翻译代码片断,步骤20,找出上述代码片断中的指令模式。在步骤20中,所述指令模式是一种针对一类具有相似特征的指令序列的统一表达形式。指令模式还可包含多种子模式。所述子模式符合所述指令模式,代表指令模式中的具体一种指令序列。
步骤30,确定指令模式的翻译对应关系。在步骤30中,翻译对应关系是多种的;根据高级语义寻找目标机实现所述对应关系。
步骤40,扫描待翻译的基本块,寻找所述指令模式,找到,匹配成功,给所述指令模式做标记,否则,匹配未成功,结束扫描。
步骤50,翻译基本块,翻译时遇到标记的指令时,按照所述指令模式的翻译对应关系翻译,否则,按照常规翻译。
图3是两种动态翻译方法在翻译的优化过程中运行开销上的对比示意图。通过分析翻译优化过程,我们发现其中大量工作具有重复性,实际翻译中,有一些反复出现的异地代码片段被优化成相同的目标代码,我们将这类情况称为翻译模式。如果优化一个片段的开销是δi,则程序中该片段出现n次就会导致n·δi的开销,如图3中上部分的灰色块所示。如果δi或n值较大,那么优化翻译这段代码片段将导致巨大的运行时开销。既然是一种翻译模式,就可以将模式的元信息嵌入到翻译器本身中,在动态翻译时,一旦遇到符合该模式的代码即可完成直接对应,从而省去了重复优化的开销。图3下部分的过程表示基于本发明的指令模式的翻译,灰色部分的重复开销被省略掉。
下面以X86到MIPS的翻译为例来说明本法明的翻译方法。
首先,寻找模式和翻译对应关系。
通过统计寻找频繁出现并影响翻译质量的代码片段。X86与MIPS之间的一个巨大差异在于X86通过标志位寄存器来体现计算的符号性,而MIPS中没有类似的机制,因而翻译X86代码时必须模拟必要的标志位操作。所谓必要的标志位操作是指有效的标志位定值与引用,例如指令instr_1对标志位SF进行了写操作,紧接着指令instr_2对标志位SF进行了读操作,则instr_1和instr_2对标志位的操作就是必要的,如果instr_1之前有指令instr_0也对SF进行了写操作,而在instr_0与instr_1之间没有对SF的读操作,则instr_0对SF的定值无效,因而没有必要模拟。即使只模拟必要的标志位操作,也造成翻译后的巨大代码膨胀,影响了翻译质量。
经过统计分析发现,X86的标志位使用情况主要表现在条件控制转移指令对上,指令对的模式为(cmpjcc)和(testjcc),通过测试Spec2000标准测试程序发现,两种模式占据运行时所有必要标志位操作的99%以上。由于jcc是多种指令的总称,因此实际上上述两个模式共有16种不同的子模式,如图5中所示,表中给出了每个子模式的意义和名称。例如表中第一项是子模式(cmpjl),名字为CJL,该子模式的意义是如果(a signed<b)为真则跳转,即如果cmp的第一个操作数作为有符号数小于第二个操作数,则跳转。
接着确定模式的翻译对应关系,在该例中只要用MIPS实现相应的条件控制转移功能即可。16个子模式的翻译对应关系如图6的表所示。
其次,结合指令模式匹配完成翻译。
1.扫描待翻译的基本块寻找模式。所谓基本块是指一段没有控制转移的顺序代码序列。按照图4所示的流程来匹配模式(cmpjcc)和(testjcc)。jcc肯定作为基本块的最后一条指令出现,因此如果基本块最后一条指令不为jcc,则该模式匹配失败,否则向前寻找cmp和test指令,如果在尚未找到cmp和test之前先碰到其它对标志位定值的指令,则匹配同样失败(因为即使前面存在cmp或者test指令,它们对标志位的定值对jcc来说仍然是无效的),否则继续向前寻找,直到发现cmp或者test指令,确定模式匹配成功,或者基本块扫描完毕也没有匹配成功。在匹配成功后,给相应的cmp或者test指令作标志,并记下子模式的名称。
图4是指令模式匹配流程图,如图所示,扫描基本块,进行模式匹配包括以下步骤步骤100,输入基本块最后指令;步骤110,判断是否为指令模式中的jcc?如果是,执行下一步,否则,执行步骤d8);步骤120,判断是否为第一条指令?如果是,执行步骤d8),否则,执行下一步;步骤130,取上一条指令;步骤140,判断是否为指令模式cmp或test?如果是,执行下一步,否则,执行步骤d7);步骤150,指令模式(cmp,jcc),(test,jcc)匹配成功,标记该指令cmp或test。
步骤160,判断是否为标志位定值指令?如果是,执行下一步,否则,执行步骤d3);步骤170,指令模式(cmp,jcc),(test,jcc)匹配失败。
2.翻译基本块。翻译时如果指令被作了标记,则进行按模式翻译,否则进行常规翻译。例如当翻译到一条test指令时,发现被作了标志,则按照子模式的名称寻找按模式翻译的策略,翻译生成目标代码片段,否则进行常规的翻译。
当cmp或者test被作了标记,进行按模式翻译的具体步骤如下a.将cmp或者test指令的两个操作数转化为MIPS的两个源操作数Ra和Rb,Ra、Rb为两个MIPS寄存器,必要时要进行内存单元装入寄存器、立即数装入寄存器以及符号扩展等操作。
b.根据子模式名称按照图6选择对应的MIPS实现。例如子模式CJL对应的翻译为一条指令“SLT Rp,Ra,Rb”。(说明为了实现相应的MIPS上条件控制转移功能,专门分配一个寄存器Rp作为是否跳转的条件寄存器,如果Rp不为0则跳转,为0则执行下一条指令。)翻译作了标记的jcc时,只需根据实际情况翻译成类似“BNE Rp,RO,target”的条件转移指令。
由于模式的翻译是基于高级语义单元的,因而可以避免标志位的模拟,从而大大提高翻译质量。基于模式的翻译可以在不增加运行时优化开销的情况下明显改善翻译效果,从而提高动态二进制翻译的性能。
最后应说明的是以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种动态二进制翻译中的翻译方法,包括以下步骤a)统计寻找翻译代码中频繁出现并影响翻译质量的翻译代码片断;b)找出上述代码片断中的指令模式;c)确定指令模式的翻译对应关系;d)扫描待翻译的基本块,寻找所述指令模式,找到,匹配成功,给所述指令模式做标记,否则,匹配未成功,结束扫描;e)翻译基本块,翻译时遇到标记的指令时,按照所述指令模式的翻译对应关系翻译,否则,按照常规翻译。
2.如权利要求1所述的动态二进制翻译中的翻译方法,其特征在于,所述指令模式是针对一类具有相似特征的指令序列的统一表达形式。
3.如权利要求1所述的动态二进制翻译中的翻译方法,其特征在于,所述子模式符合所述指令模式,代表指令模式中的具体一种指令序列。
4.如权利要求1所述的动态二进制翻译中的翻译方法,其特征在于,步骤c)中,根据高级语义寻找目标机实现所述对应关系。
5.如权利要求1所述的动态二进制翻译中的翻译方法,其特征在于,步骤d)中,所述基本块是一段没有控制转移的循序指令序列。
6.如权利要求1所述的动态二进制翻译中的翻译方法,其特征在于,步骤d)包括以下步骤d1)输入基本块最后指令;d2)判断是否为指令模式?如果是,执行下一步,否则,执行步骤d8);d3)判断是否为第一条指令?如果是,执行步骤d8),否则,执行下一步;d4)取上一条指令;d5)判断是否为指令模式?如果是,执行下一步,否则,执行步骤d7);d6)指令模式匹配成功,标记该指令。d7)判断是否为标志位定值指令?如果是,执行下一步,否则,执行步骤d3);d8)指令模式匹配失败。
7.如权利要求8所述的动态二进制翻译中的翻译方法,其特征在于,遇到标记的指令时,步骤e)包括以下步骤e1)将指令模式中的指令的操作数转化为待定的目标机指令的操作数;e2)根据子模式按照所述翻译对应关系翻译标记指令。
全文摘要
本发明涉及一种动态二进制翻译中的翻译方法,包括以下步骤统计寻找翻译代码中频繁出现并影响翻译质量的翻译代码片断;找出上述代码片断中的指令模式;确定指令模式的翻译对应关系;扫描待翻译的基本块,寻找所述指令模式,找到,匹配成功,给所述指令模式做标记,否则,匹配未成功,结束扫描;翻译基本块,翻译时遇到标记的指令时,按照所述指令模式的翻译对应关系翻译,否则,按照常规翻译。本发明通过指令模式匹配来翻译基本块,降低代码重复优化导致的系统开销,提高翻译质量和效果,从而提高了动态二进制翻译的性能。
文档编号G06F9/45GK1746849SQ20041006918
公开日2006年3月15日 申请日期2004年9月10日 优先权日2004年9月10日
发明者白童心, 张兆庆, 冯晓兵, 武成岗, 唐锋, 马湘宁, 谢海斌, 杨浩, 崔慧敏 申请人:中国科学院计算技术研究所