首页> 中国专利> 用于受限系统的分布式动态二进制翻译方法

用于受限系统的分布式动态二进制翻译方法

摘要

本发明涉及一种用于受限系统的分布式动态二进制翻译方法,对传统动态二进制翻译器做改进,将翻译器的翻译和执行模块做划分,分别安置于服务端和受限客户端,服务端完成翻译功能,客户端完成执行功能。客户端在执行异构平台代码时,向服务端发送翻译请求,服务端翻译完成后,将翻译后代码返回给客户端,由客户端执行此代码,直至遇到未翻译的代码,重新开始一轮请求,翻译,执行的过程。本发明通过划分翻译模块和执行模块,大大减轻了瘦客户端执行异构代码的负担,使动态二进制翻译同样使用于瘦客户端。本发明不受限于任何特定的硬件平台,适用于一切受限系统的分布式二进制翻译器,并能取得理想的效果。

著录项

  • 公开/公告号CN101504613A

    专利类型发明专利

  • 公开/公告日2009-08-12

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN200910047474.0

  • 申请日2009-03-12

  • 分类号G06F9/45;

  • 代理机构上海交达专利事务所;

  • 代理人毛翠莹

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-17 22:23:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-08

    未缴年费专利权终止 IPC(主分类):G06F9/45 授权公告日:20110928 终止日期:20180312 申请日:20090312

    专利权的终止

  • 2011-09-28

    授权

    授权

  • 2009-10-07

    实质审查的生效

    实质审查的生效

  • 2009-08-12

    公开

    公开

说明书

技术领域

本发明涉及一种用于受限系统的分布式的动态二进制翻译方法,具体涉及一种采用分布式架构,适用于在瘦客户端等受限系统上使用的动态二进制翻译方法。本发明属于动态二进制翻译技术领域。

背景技术

动态二进制翻译技术可以在不重新编译源代码的情况下,自动翻译异构平台的二进制代码,达到运行异构平台的二进制代码的目的。动态二进制翻译技术可以使硬件生产商在构建新系统结构时,不用更多考虑兼容之前的体系结构。同时使用动态二进制翻译技术也能更好地维护之前遗留的二进制代码,特别是那些硬件已经不再生产的平台上的二进制代码,又可以加强单个体系架构的应用范围,使单个体系结构(如Intel平台)运行多个体系结构(如MIPS,SPARC,PowerPC平台)的二进制代码。

一般动态二进制翻译器必定包括翻译模块,执行模块。翻译模块将源平台的二进制代码直接翻译到目标平台可执行代码,对于翻译复杂的源平台的二进制代码,如Intel IA32平台的二进制代码,其对应的翻译模块必定是复杂而庞大的,在进行指令翻译过程中,翻译模块会消耗比较多的计算资源以及内存资源,对于一个动态二进制翻译器是一个不小的负担。执行模块主要功能是执行经过翻译模块翻译后的目标平台可执行代码。

目前已经开发出一些商用的动态二进制翻译器,如Intel的IA32EL、Hp的Dynamo等,但所有这些动态二进制翻译器都并非针对于一个受限系统(如手机,ARM平台等计算能力、内存容量都相对比较弱的系统)。对于瘦客户端等受限系统来说,直接移植传统动态二进制翻译器会带来非常大的开销,并且效果也会非常低效。原因就是受限系统的运算能力,内存都相对较弱,而翻译器中的复杂模块,如翻译模块等在受限系统中的运行,将消耗巨大的系统资源,带来额外开销,使本来资源就有限的受限系统更难承受。

发明内容

本发明的目的在于针对现有技术的不足,提供一种用于受限系统的分布式动态二进制翻译方法,适用于处理器、内存资源都有限的受限系统,加强受限系统执行异构平台程序的能力。

为实现上述目的,本发明对传统动态二进制翻译器做改进,将翻译器的翻译和执行模块做划分,分别安置于服务端和受限客户端,服务端完成翻译功能,客户端完成执行功能。客户端在执行异构平台代码时,向服务端发送翻译请求,服务端翻译完成后,将翻译后代码返回给客户端,由客户端执行此代码,直至遇到未翻译的代码,重新开始一轮请求,翻译,执行的过程。通过这种模块划分,减轻动态二进制翻译器在受限系统的负担,加快动态二进制翻译器在受限系统运行速度。

本发明用于受限系统的分布式动态二进制翻译方法的步骤如下:

1.客户端加载异构平台的二进制代码,与服务端建立连接,完成各自初始化。

受限系统动态二进制翻译器的客户端加载异构平台的二进制代码,完成初始化,并通过网络连接与受限系统动态二进制翻译器的服务端连接,发送二进制代码和同步信息。服务端根据此二进制行代码所属指令集平台,初始化翻译器服务端对应的翻译模块,完成服务端的初始化。

2.服务端接收客户端翻译请求,翻译指定的源二进制代码块至客户端的目标代码块。

受限系统动态二进制翻译的客户端在执行一个未翻译过的基本块时,发送翻译请求至动态二进制翻译器服务端。服务端接收到客户端的翻译请求后,先在已翻译代码缓存中查找是否存在已经翻译过的代码块,如果存在,则对代码块做修改后,将代码块发送回客户端;否则开始一个翻译过程,翻译完成后将起始地址和翻译好的代码块存入服务端的已翻译代码缓存区中,并将翻译后代码块传送给客户端。

3.客户端等待服务端的回应,接收翻译后的代码块。

在服务端完成翻译前,客户端一直处于等待状态,直到服务端翻译过程完成,通知客户端后,客户端开始接收翻译后的代码块,将其存入客户端本地代码缓存区中。

4.客户端执行翻译后代码块。

客户端在接收到翻译后的代码块后,开始对其做基本块连接,保存机器运行状态,然后开始执行连接后的基本块;如果遇到未翻译的代码块,则开始新一轮的请求、翻译、执行过程。

5.程序运行结束,退出程序,客户端和服务端释放各自的内存资源等。

本发明的所涉及的方法的优点在于采用分布式架构,分离一个动态二进制翻译器的翻译模块和执行模块,翻译模块放在服务端,执行模块放在客户端,使得对系统资源有较高要求的翻译模块与受限系统分离,大大减轻了作为客户端的受限系统的负担。本发明这种分布式动态二进制翻译方法更加合适于受限系统,加强了受限系统执行异构平台程序的能力。

附图说明

图1是分布式动态二进制翻译器的框架图。

具体实施方式

为了更好的理解本发明的技术方案,以下通过具体的实施例作进一步描述。以下实施例不构成对本发明的限定,该方法适合一切受限系统分布式动态二进制翻译器的设计。

实施例以一个分布式的动态二进制翻译器DVEE为例。DVEE分为服务端和客户端两个部分,如图1所示。服务端主要负责代码的翻译,客户端负责源程序的加载,和执行翻译后的代码块。服务端的目标代码缓存区,即服务端的已翻译代码缓存区,用于存放服务端每次翻译后的代码块;客户端的目标缓存区,即客户端本地缓存区,用于接收服务端发送来的翻译后的代码块。服务端接收到客户端的翻译请求,完成翻译,并将翻译后的代码块传送给客户端,客户端在接收到翻译后的代码块后,开始对其做基本块连接,然后开始执行连接后的基本块。

服务端和客户端通过网络连接通信,通信协议用SOCKET编程接口构建于TCP/IP协议之上。通信时消息采用的数据包格式如表1所示,一共包括五个部分,消息头,消息类型,消息长度,消息内容,消息尾。

表1 传输协议数据包格式

 

消息头消息类型消息长度消息内容消息尾0xA5///0x5A

本发明分布式的动态二进制翻译方法的具体步骤如下:

1、客户端加载异构平台的二进制代码,与服务端建立连接,完成各自初始化。受限系统动态二进制翻译器客户端加载异构平台的二进制代码,获得程序入口地址,将此地址赋值给某一全局变量SPC(源程序初始基本块入口地址),同时创建一个空的目标代码缓存区,将此缓存区的起始地址赋值给全局变量TPC(目标平台基本块入口地址)。之后客户端通过网络连接与动态二进制翻译器服务端连接,发送二进制代码和同步信息。客户端将二进制代码和同步信息(客户端所属平台,仿真寄存器组在客户端的内存地址)构建成一个初始化类型消息,将此消息发送给服务端。服务端接收到此消息后,读取消息内容,保存在服务端。服务端根据此二进制行代码所属指令集平台,初始化翻译器服务端对应的翻译模块,同时开辟一个足够大的目标代码缓存区,完成服务端的初始化。

2、服务端接收客户端翻译请求,翻译指定的源二进制代码块至客户端的目标代码块。受限系统动态二进制翻译的客户端在执行一个未翻译过的基本块时,发送翻译请求至动态二进制翻译器服务端。客户端以全局变量SPC作为关键字在本地目标代码缓存区中查找对应的翻译后的目标代码块。如果查找命中,则本地目标代码缓存区已保留翻译后的代码块,将代码块起始地址赋值给TPC,转步骤4;如果查找没有命中,则首先检查客户端翻译代码缓存区是否已经满,满的话全部将缓存区全部清空,将TPC设置为缓存区的首地址,否则将TPC设置为缓存区空闲区域起始地址。将此时的SPC和TPC构建一个翻译请求类型的消息发送个服务端。服务端接收到客户端的翻译请求后,读取SPC和TPC,先在目标代码缓存区中查找是否存在已经翻译过的代码块,查找的关键字就是SPC,如果存在,根据TPC的值对翻译过的代码块中的地址偏移指令做修改,构建翻译应答类消息,将代码块发送回客户端;否则开始一个翻译过程,从初始化时得到的源平台二进制代码中逐一取出指令,对指令解码,生成中间指令,直到遇到的指令满足基本块结束条件,如遇到跳转指令等。再将这些中间指令序列翻译成目标代码块,翻译完成后将起始地址(SPC)和翻译好的代码存入服务端的目标代码缓存区中,并构建翻译应答消息,将翻译后代码块传送给客户端,完成此次请求,转步骤3。

3、客户端等待服务端的回应,接收翻译后的代码块。当服务端完成翻译前,客户端一直处于等待状态,直到服务端翻译过程完成,通知客户端。客户端开始接收翻译后代码,将其放置在TPC所指向的目标代码缓存区中,这样在本地就保存了与SPC所指向的源平台基本块所对应的翻译后的目标平台代码块,同时将TPC的值加上目标代码块大小后的值作为缓存区空闲区起始地址,可以作为下一次翻译后代码放置位置的起始地址,转步骤4。

4、客户端执行翻译后代码块。客户端在接收到翻译后代码块后,开始对其做基本块连接(连接指将上个目标代码块末端跳转的目的地址修改为这个基本块的入口地址),保存机器运行状态,即将目标平台中通用寄存器保存到栈中,然后开始执行连接后的基本块。如果遇到未翻译的代码块,则将下次要执行的基本块的首地址赋给SPC,转步骤2,则开始新一轮的请求、翻译、执行过程。直到任务结束,转步骤5。

5、程序运行结束,退出程序,客户端和服务端释放各自的内存资源等。当程序正常结束,返回翻译器后,客户端释放本地翻译代码缓存区,向服务端发送结束类型消息,并且结束客户端进程。服务端在接收到结束消息后,释放服务端翻译代码缓存区,删除源程序二进制代码。至此一次完整的受限系统运行异构平台二进制代码过程全部完成。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号