[发明专利]中间语言的延迟跳转指令二进制翻译实现的方法无效
申请号: | 200910055218.6 | 申请日: | 2009-07-23 |
公开(公告)号: | CN101604255A | 公开(公告)日: | 2009-12-16 |
发明(设计)人: | 管海兵;梁阿磊;左保京;章一超;孙廷韬 | 申请(专利权)人: | 上海交通大学 |
主分类号: | G06F9/45 | 分类号: | G06F9/45 |
代理公司: | 上海交达专利事务所 | 代理人: | 王锡麟;王桂忠 |
地址: | 200240*** | 国省代码: | 上海;31 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 中间 语言 延迟 跳转 指令 二进制 翻译 实现 方法 | ||
技术领域
本发明涉及的是一种电信技术领域的方法,特别是一种中间语言的延迟跳转指令二进制翻译实现的方法。
背景技术
虚拟执行技术中的动态二进制翻译是应用最为广泛的方法,是为遗留代码提供移植可能性和提高软件的平台适应性的一种有效手段,它在不需要可执行程序的源代码的情况下,可以动态地将源机器平台上的二进制程序经过转换,运行于其他目标机器平台上。
要使源平台的程序能够正确地在目标平台上执行,就必须通过动态二进制翻译在目标平台上对源平台进行完全而正确的模拟。这其中主要包括对源平台指令集的解释和系统调用的模拟,然而每个体系结构都有自身的一些特性,比如Intel的x86处理器只有8个通用寄存器,有些RISC体系结构的寄存器数目稍多一些,SPARC处理器上还实现了寄存器窗口的技术,使得它实际上拥有上百个通用寄存器。诸如此类的特征都会体现在体系结构的指令集中,在利用中间指令翻译源平台代码实现多源多目标的动态二进制翻译系统中,既要保证源平台指令语义能被正确翻译,又要不违反中间指令精简的原则,有时候是很难实现的,即便实现了,也可能造成很大的开销。
在流水线体系结构中,当前一条指令还在解码阶段时,流水线就已经去存储器中取后一条指令了,以此来提高CPU执行指令的吞吐量。但当碰到跳转指令时,执行跳转的时候后面已经上流水线的指令很可能是无用的,这样无疑会导致性能的下降。于是现在大部分的体系结构中都采用了延迟跳转技术,在跳转指令后放置一条或几条需要执行的指令,它们所在的位置称作延迟槽,这样即使跳转了,已经上流水线的指令也不会被浪费。一些常见的RISC体系结构都应用了这样的技术,比如MIPS、PA-RISC、SPARC都有容纳一条指令的延迟槽,同时还有少量的体系结构,如SHARC DSP和MIPS-X实现了含有两条指令的延迟槽。
SPARC体系结构在此原则上还实现了一个更加复杂的延迟跳转技术,它在条件跳转指令中引入了一个控制位annul bit,当执行跳转时,延迟槽指令会被执行;当不跳转时,会检查annul bit,如果它为1,则不执行延迟槽中指令,否则仍然执行。这样设计的目的是让SPARC平台的程序可以更加灵活,比如有些条件跳转在跳转成功时需要几条延迟槽指令,但不跳转时却不需要任何多余的指令,这样如果使用简单的延迟槽方法,不够灵活或者造成空间上的浪费。SPARC平台在条件跳转指令中引入这样一个控制位,就能最大程度地节省空间,同时还保证了执行效率。
但在动态二进制翻译的环境中,如何在目标平台上模拟出源平台延迟跳转指令的特性就成了一个重要的课题。因为目标平台往往不具备相同的延迟槽指令处理机制,目前在二进制翻译领域可以使用如下方法完成对延迟跳转指令的模拟:
1、最简单的方法,将源平台的延迟跳转指令转换为目标平台的非延迟跳转指令,如果指令集中带有annul bit的话,再根据其值将延迟槽里的指令放到跳转的一个或两个方向上。但当延迟槽指令也是一条延迟跳转指令、CALL指令或其他控制转移指令的话,就无法正确执行到第一个跳转的目标指令了。
2、利用RTL(Register Transfer Lists),先将源平台指令翻译为RTL而不是直接翻译为目标平台代码,然后对这些RTL进行转换和优化,最终再将它翻译为目标平台的代码。RTL对描述源指令集和目标指令集以及它们之间的互相翻译提供了一个统一的框架。
RTL是对程序运行期间机器平台变化效果的一种列表描述,每一个效果即表示了一个值被传递到一个指定的存储位置(比如一个store指令),这个传递当且仅当RTL中的判断表达式为真时才发生。
比如对于指令I的RTL格式如下:
bI->nPC:=targetI|annul:=aI|Ic
其中:
bI:表示I是否跳转,它是一个表达式而不是一个常量或者I的一部分。对于非跳转指令,bI为false。对于CALL指令和非条件跳转指令,bI为true。
targetI:当bI为true时,targetI为能在运行时计算出跳转目的地址的表达式。当bI为false时,targetI是任意的,即不用在此特地指定。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于上海交通大学,未经上海交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910055218.6/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种获得程序模块间调用关系的方法及装置
- 下一篇:光学撷取模块信号处理方法