掌桥专利:专业的专利平台
掌桥专利
首页

面向受限系统的基于客户/服务器架构的二进制代码翻译服务系统和方法

文献发布时间:2023-06-19 18:37:28


面向受限系统的基于客户/服务器架构的二进制代码翻译服务系统和方法

技术领域

本发明属于软件迁移技术领域,涉及一种面向受限系统的基于客户/服务器架构的二进制代码翻译服务系统和方法。

背景技术

二进制翻译技术是解决应用程序移植问题的重要手段。它能够在不重新编译源码的情况下将源体系结构的代码翻译为目标体系结构的代码。二进制翻译技术能够分离应用程序对硬件的依赖,加速新平台的推广,在程序移植、性能优化、逆向工程、安全分析等领域具有重要意义。二进制翻译主要分为解释执行、静态二进制翻译和动态二进制翻译三种

静态二进制翻译是一种离线编译技术,它将源体系结构应用程序翻译为目标体系结构的应用程序。静态二进制翻译的好处在于翻译不占用应用程序的执行时间,能够在运行之前进行最大程度地翻译和优化,并且翻译后的应用程序可以多次执行。但是静态二进制翻译在翻译完备性上有所欠缺,在代码发现、代码定位、处理自修改代码等方面会遇到挑战。

动态二进制翻译是一种即时编译技术,它使得源体系结构的应用程序可以在目标体系结构的机器上边翻译边执行。大多数的动态二进制翻译器将代码块(可以是基本块basic block也可以是函数function)作为翻译粒度,翻译过程中将已翻译过的代码块存储在代码缓存中。在后续执行中,当代码缓存中存有目标代码块,可以直接使用代码缓存中的代码块,无需重复翻译。大多数的动态二进制翻译器遇到频繁执行的代码块会进行进一步的优化。由于代码块的翻译和优化都是在运行时进行的,仅在一台受限设备上进行翻译、优化会大大增加应用程序的运行时间。

大多数二进制翻译器在翻译过程中主要分为三部分,首先将机器码提升为中间代码,然后对中间代码进行优化,最后将中间代码生成为目标体系结构代码。目前的一些终端用户设备例如手机、平板电脑等,计算能力低,内存容量小。在二进制翻译器对中间代码进行优化时,一些复杂的优化对计算资源要求较高,这些受限系统尚不能满足要求或优化时间较长。业界有方案引入客户/服务器架构来解决这个问题,将动态二进制翻译器的执行引擎置于客户端,专注于运行翻译后的代码,将翻译引擎置于服务器端,专注于将源体系结构代码翻译为目标体系结构代码

发明内容

为了解决现有技术存在的不足,本发明的目的是提供一种面向受限系统的基于客户/服务器架构的二进制代码翻译服务系统。在本发明中,客户端和服务器端拥有相同的体系结构,此处的体系结构是指基于不同指令集架构的计算机系统,主要解决的技术问题是如何在保证客户端快速响应的同时,尽可能不占用客户端资源去做二进制翻译。本发明充分利用服务器端高性能的特点,生成高效的目标体系结构应用程序,并且服务于客户端后续的多次执行。本发明使用文件包一次传输的方式实现客户端和服务器端之间代码的传输,从而减少了客户端和服务器端的频繁交互,且客户端和服务器端不具有强依赖性,在网络不畅甚至在没有网络环境的极端情况下,能保障应用程序的完整正确执行,客户端仍能正常翻译。

本发明中,所述受限系统是指手机、平板电脑等计算资源少、内存容量小的设备。

本发明的核心创新点是提出了一种新的计算模式:二进制翻译即服务BTaaS(Binary Translation as a Service),可以满足用户在离线分布式计算、云计算等场景下的高效翻译需求。BTaaS使用一种基于客户/服务器架构的二进制代码翻译服务系统,改变了传统的二进制翻译器的翻译模式,利用服务器为客户提供已翻译的高效的应用程序,将二进制翻译转变成向用户提供的一种服务,从而为用户屏蔽了后端的实现细节。用户将一个与客户端体系结构不兼容的应用程序提交给客户端后,客户端先检查客户端的本地是否存有之前翻译好的目标体系结构(此时目标体系结构就是客户端的体系结构)的文件包(简称目标文件包,包括目标体系结构的应用程序)。若有,则执行相应的翻译好的应用程序;若没有,则向服务器端发送请求。服务器端在接收到请求之后会查找服务器端的本地是否有之前翻译好的目标文件包,若有,则将翻译后的目标文件包发送给客户端;若没有翻译过,则向客户端发送未翻译过消息来触发客户端的动态二进制翻译器进行翻译,同时从客户端获取源体系结构的文件包(简称源文件包,包括源体系结构的应用程序+库文件等必要文件)。然后触发服务器端的二进制翻译器对源文件包进行翻译,并保存好翻译后的目标文件包。

当客户端向服务器端发送请求后,等待服务器端回应的时间超过阈值时,会将源文件包交给客户端中的动态二进制翻译器进行翻译。

现有的其他二进制翻译器以代码块为粒度,在进行代码块的翻译前会先判断代码块是否进行过翻译,并根据是否进行过翻译的判断推进后续的进程。而本发明是以文件作为粒度,相较于以代码块为粒度的现有方法来说,服务器端生成的目标体系结构的应用程序能够实现一次翻译,处处使用;在客户/服务器的场景下,能够减少客户端和服务器端之间的交互,减少运行时间。

因为服务器端的算力强劲,可以同时接收多个客户端的请求。所以本发明需要解决的第一个核心问题在于服务器端能否协调多个客户端的请求,在保证正确执行的基础上提高翻译效率。优化目标包括但不限于服务器端对多个请求的执行效率的优化,以及服务器端对翻译好的应用程序的存储管理。为了很好的解决上述问题,本发明选取一台服务器作为注册中心协调多个客户端的请求,通过注册中心进行服务的调配,注册中心负责接收客户端的请求,根据客户端的请求查找最佳服务器的信息,并将服务器的信息转发给客户端进行后续操作;注册中心通过利用源应用程序链接方式等信息协调优化请求的执行效率。若源应用程序的链接方式为静态链接时,服务器端会分别使用静态二进制翻译器和动态二进制翻译器进行翻译,若静态二进制翻译器翻译失败则使用动态二进制翻译器的翻译结果,若静态二进制翻译器翻译成功则比较两种翻译器翻译结果的效率,选用效率较高的翻译结果;若源应用程序的链接方式为动态链接,服务器端会直接使用动态二进制翻译器进行翻译;注册中心中通过存储已翻译信息来管理翻译好的应用程序,包含已翻译应用程序的标识符、目标应用程序的体系结构以及对应的服务器信息。

本发明二进制代码翻译服务系统的服务器端支持安装多个静态二进制翻译器和动态二进制翻译器。由于静态二进制翻译器和动态二进制翻译器存储已翻译代码的形式不同:静态二进制翻译器能够在翻译结束后生成目标体系结构的应用程序,直接供后续调用,而动态二进制翻译器边翻译边执行,最终不会生成一个可执行的目标体系结构应用程序,而是在执行过程中将翻译过的代码以代码块的形式存储在代码缓存中,在对代码块进行翻译之前会进行判断,有些代码块虽然已经进行过翻译,但是因为代码缓存空间有限,有可能部分翻译过的代码块会被覆盖;若代码缓存中存有该代码块的目标代码,则执行代码缓存中的代码,若代码缓存中没有该代码块的目标代码块,翻译结束后将目标代码块存入代码缓存。本发明需要解决的第二个核心问题就是无论服务器端对翻译器的选择如何,客户端都能够正确、有效利用到服务器端的翻译结果。

本发明所述的二进制代码翻译服务系统中,为了客户端能够正确利用到服务器端的翻译结果,客户端和服务器端需要对同一个应用程序形成统一的标识符。一个标识符只能对应唯一一个应用程序。标识符的计算方法需要尽可能的简单,计算时间尽可能的短,减少对整体运行时间的影响。其次,客户端和服务器端之间计算标识符的方法应相同,多个客户端之间计算标识符的方法应相同,否则会产生冲突。这个统一标识符可以采用MD5、SHA256等哈希算法来生成。该统一标识符可用于客户端和服务器端的源文件包和目标文件包的存储和查找。

静态二进制翻译中生成目标代码的形式为目标可执行文件,客户端可以直接执行;动态二进制翻译生成目标代码的形式为目标代码块,代码块不能被单独执行,客户端需要调用相应的动态二进制翻译器执行代码块。本发明所述的二进制代码翻译服务系统中,为了方便客户端的执行,服务器端需要向客户端提供相同形式的目标体系结构代码即目标可执行文件。因此,服务器端需要利用动态信息例如寄存器的变化、控制流的变化以及内存分布的变化等信息和目标体系结构代码块,将动态二进制翻译器的翻译结果从目标体系结构的代码块以及其它文件相关信息(例如翻译后的库函数)组织成目标体系结构可执行文件。

本发明的系统架构图如图1所示。本发明基于客户/服务器架构,客户端将请求发送到缓冲区队列。服务器端从缓冲区获取待处理的请求。服务器端可以同时执行多个请求的任务。客户端仅支持动态二进制翻译器,服务器端支持静态二进制翻译器和动态二进制翻译器。客户端的二进制翻译器只需要保证应用程序可以被正确翻译执行以及进行一些简单的优化,尽可能快地响应用户。服务器端的二进制翻译器可以尽可能对代码进行充分优化,生成高效的目标体系结构的应用程序。服务器端多个二进制翻译器的翻译结果由存储系统统一管理。业界内的二进制翻译器根据可翻译源体系结构数量分为两种:可以翻译多种源体系结构的通用二进制翻译器和可以翻译一种源体系结构的专用二进制翻译器,通过设置注册中心,能够根据源文件的内容和翻译器的翻译水平选择最合适的翻译器。基于这些前提,如图2所示,本发明的二进制代码翻译服务系统支持16种部署方案,分别为:

1)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器;

2)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器;

3)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个或多个专用动态二进制翻译器;

4)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个通用动态二进制翻译器;

5)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器和1个通用动态二进制翻译器;

6)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器和1个或多个专用动态二进制翻译器;

7)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器和1个通用动态二进制翻译器;

8)客户端选用1个或多个专用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器和1个或多个专用动态二进制翻译器;

9)客户端选用1个通用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器;

10)客户端选用1个通用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器;

11)客户端选用1个通用动态二进制翻译器,服务器端选用1个或多个专用动态二进制翻译器;

12)客户端选用1个通用动态二进制翻译器,服务器端选用1个通用动态二进制翻译器;

13)客户端选用1个通用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器和1个通用动态二进制翻译器;

14)客户端选用1个通用动态二进制翻译器,服务器端选用1个通用静态二进制翻译器和1个或多个专用动态二进制翻译器;

15)客户端选用1个通用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器和1个通用动态二进制翻译器;

16)客户端选用1个通用动态二进制翻译器,服务器端选用1个或多个专用静态二进制翻译器和1个或多个专用动态二进制翻译器。

本发明还提出了一种利用上述二进制代码翻译服务系统进行二进制代码翻译的方法,所述方法如图3所示,包括如下步骤:

步骤一、客户端对应用程序进行判断

客户端判断本地是否存有已翻译好的目标文件包,若有,则可以直接执行目标体系结构的应用程序;若没有,则向服务器端发送应用程序标识符,请求目标文件包,等待服务器端的回复。若等待时间超过阈值(阈值的设定与网络带宽和延迟相关,根据实际进行设置)仍然没有得到服务器端的回复,则触发本地的动态二进制翻译器进行翻译,后跳转到步骤五。

步骤二、服务器端接收来自客户端的请求,进行处理

服务器端查询本地是否有目标文件包:

1)如果服务器端找到该文件包,服务器端向客户端发送找到目标文件包消息,并将目标文件包发送回客户端。

2)如果服务器端未找到该文件包,则向客户端发送未找到目标文件包消息,请求源文件包,等待客户端的回复。若等待时间超过阈值仍然没有得到客户端的回复,则结束本次任务。

步骤三、客户端接收到服务器端的回复,并根据请求结果进行执行

客户端接收到来自服务器端的回复,针对不同的请求结果有不同的操作:

1)若服务器端的回复为已找到目标文件包,则接收已经翻译好的目标文件包存入客户端的存储系统,并执行应用程序,后跳转到步骤五。

2)若服务器端的回复为未找到目标文件包,则向服务器端发送源文件包,同时触发客户端的动态二进制翻译器进行翻译。

步骤四、服务器端接收到源文件包进行翻译

服务器端接收到客户端发送的源文件包,触发服务器端的二进制翻译器对源文件包进行翻译。翻译结束后,服务器端将翻译好的目标文件包存储到服务器端的存储系统中。

步骤五、程序结束

程序运行结束,客户端结束任务,释放占有的资源。

本发明的有益效果包括:本发明设计了一种基于客户/服务器架构的二进制代码翻译服务系统,能够实现应用程序跨平台高效运行。本发明在应用程序第一次执行时会触发客户端和服务器端的二进制翻译器进行翻译。客户端的轻量级动态二进制翻译器仅仅需要保证应用程序在第一次翻译时的正确执行而不需要过多考虑执行性能上的优化,服务器端的二进制翻译器则不需要过多考虑翻译器本身的执行时间,有足够的时间做最大程度的优化。在应用程序后续的执行中,不需要再次翻译,只需要执行服务器端生成的应用程序,为客户端节约了优化所花费的时间和计算资源,实现一次翻译,多次执行。基于客户/服务器架构的二进制翻译器能够较好地适应当前业内趋势,使得计算资源得到平均分配,即使是受限系统,也能够完成复杂应用程序的执行,提高了应用程序的执行范围,节约应用程序在新体系架构上的再构建成本。

总的来说,与以往的动态二进制翻译器相比,本发明中服务器端的动态二进制翻译器在翻译结束后能够生成目标体系结构的应用程序,方便后续重复执行;与以往的静态二进制翻译器相比,本发明具有更好的兼容性,在服务器端同时具备动态二进制翻译器和静态二进制翻译器的场景下,当静态二进制翻译器的翻译结果不完备时,可以使用动态二进制翻译器翻译;与传统的非客户/服务器架构的二进制翻译器相比,本发明能够利用服务器端高性能的特点,不必受限于客户端的计算资源,减轻客户端的计算压力,将复杂优化和执行分离,在不占用客户端运行时间的情况下生成较为高效的目标体系结构的应用程序,且服务器端的存储较大,可以减少因存储空间不足造成的重复翻译;与以往的客户/服务器架构的动态二进制翻译器相比,本发明能够将大部分优化的时间与程序的运行时间进行分离,使用较少的时间得到高效的代码;能够减少客户端和服务器端频繁的交互,降低因交互产生的时间开销;客户端对服务器端不具有强依赖性,在网络不畅的情况下客户端仍能依靠本地的动态二进制翻译器独立完成应用程序的翻译执行。

当应用程序第一次被翻译时,客户端轻量级的动态二进制翻译器翻译效率较低。为了弥补这一短板,服务器端可以在所有客户端请求之前将其它体系架构上的常用应用程序提前进行二进制翻译。这样,即使客户端是第一次执行该应用程序,也可以用到服务器端已提前翻译的应用程序。

附图说明

图1是本发明翻译服务系统架构图。

图2是本发明翻译服务系统部署示意图。

图3是本发明翻译服务系统流程泳道图。

图4是本发明文件包存储示意图。

图5是本发明实施例1流程图。

图6是本发明实施例2流程图。

图7是本发明实施例3流程图。

图8是本发明实施例4流程图。

图9是本发明注册中心存储信息示意图。

图10是本发明实施例5整体布局图。

图11是本发明实施例5流程图。

具体实施方式

结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。

本发明提供了一种面向受限系统的基于客户/服务器架构的二进制代码翻译服务系统,所述二进制代码翻译服务系统主要包括了客户端和服务器端两部分,所述客户端为包括手机、平板电脑等在内的终端用户设备,所述客户端支持动态二进制翻译器,能够保证应用程序被正确翻译执行以及进行一些简单的优化,能够尽快响应用户;所述服务器端具有较大的算力,能够支持静态二进制翻译器和动态二进制翻译器,并能够同时执行多个请求任务。

本发明还提供了一种利用上述二进制代码翻译服务系统进行二进制代码翻译服务的方法,所述方法包括如下步骤:

步骤一、客户端对应用程序是否在客户端存储系统中有目标文件包进行判断;若应用程序在本地存储系统中有目标文件包,则客户端执行对应的目标应用程序,完成后结束任务;若应用程序在本地存储系统中没有目标文件包,则客户端向服务器端发送应用程序标识符,请求目标文件包,等待服务器端的回复;

步骤二、服务器端接收来自客户端的目标文件包请求,查询服务器端是否存储有目标文件包;若服务器端的存储系统中有目标文件包,则向客户端发送目标文件包;若服务器端的存储系统中没有目标文件包,则向客户端请求源文件包,等待客户端回复;

若服务器端未响应客户端的请求,客户端自行调取在客户端存储系统中的源文件包,并用客户端的动态二进制翻译器进行翻译;

步骤三、在服务器已响应的情况下,若步骤二中服务器端向客户端发送了目标文件包,客户端接收已经翻译好的目标文件包存入客户端的存储系统,并执行目标应用程序,完成后结束任务;若步骤二中服务器端未向客户端发送目标文件包,则客户端从本地的存储系统中获取源文件包,发送给服务器端,同时触发客户端的动态二进制翻译器进行翻译,完成后结束任务;

步骤四、服务器端接收到客户端发送的源文件包后,触发服务器端的二进制翻译器对源文件包进行翻译,翻译结束后,服务器端将翻译好的目标文件包存储到服务器端的存储系统中,完成后结束任务。

通过一些实施例对本发明的方法进行具体说明。

重量级二进制翻译器是相对于轻量级二进制翻译器而言,翻译效率更高、优化效果更好的一类二进制翻译器。在以下实施例中,通过加'来标注重量级二进制翻译器。客户端的计算平台client1、client2和服务器端的计算平台server1、server2、server3、server4、server5可能基于不同指令集架构,例如X86、ARM和RISC-V等,或是同一指令集架构的不同版本,例如ARM v7和ARM v8。但是,同一个二进制翻译服务系统中客户端的计算平台和服务器端的计算平台之间的指令集架构和版本需要相同。通用动态二进制翻译器UDBT(Universal Dynamic Binary Translation)、UDBT'可能是QEMU、HQEMU等动态二进制翻译器其中之一。专用动态二进制翻译器DBT1'、DBT2'可能是LLPEMU、Instrew、Rv8等动态二进制翻译器其中之一。通用静态二进制翻译器USBT'(Universal Static BinaryTranslation)可能是UQBT等其中之一。专用静态二进制翻译器SBT1'、SBT2'可能是LLBT、FX!32等其中之一。存储系统采用文件系统。

在以下实施例中,客户端和服务器端使用相同的策略来进行文件包的存储管理。如图4为解决这一问题的一种可行方式,即利用数据映射表格进行文件包的存储管理,以表格(下称子表)的形式展示数据的映射关系,分别记录源应用程序的标识符、源文件包的存储位置和目标文件包的存储位置。

此外,多个客户端之间会产生资源竞争,以生产者-消费者模式为例,展示解决这一问题的一种可行方式。本发明实施例中把服务器端看作为消费者,客户端看作为生产者。在服务端部分设置一个固定大小的缓冲区,用于平衡生产者和消费者的处理能力,解耦二者之间的数据交互。缓冲区选用先进先出的缓冲队列实现。客户端将请求发送到缓冲区队列。服务器端从缓冲区获取待处理的请求,并要遵循以下原则:

1)当缓冲区已满时,缓冲区会丢弃后续客户端发送的请求。

2)当缓冲区为空时,服务器端进入阻塞状态。当缓冲区状态不为空时,唤醒服务器端。

因本发明中二进制代码翻译服务系统部署方案较多,在本发明的具体实施方式中选择五个具有代表性的部署方案进行展开叙述。实施例一至实施例四均展示的为单个客户端与服务器端的请求交互,多个客户端与单个服务器端之间的请求协调默认采用上述方法进行适当扩展。

实施例一

客户端选择专用动态二进制翻译器,服务器端选择专用动态二进制翻译器

如图5所示,计算平台client1为客户端,体系结构为ISA-A(InstructionSetArchitecture-A),配置动态二进制翻译器DBT1,DBT2,计算平台server1为服务器端,体系结构为ISA-A,配置动态二进制翻译器DBT1'、DBT2'。应用程序app1基于ISA-B(Instruction SetArchitecture-B)。

1.计算平台client1会查找本地子表中是否存有目标文件包app1_target的地址。若有,则执行目标应用程序;若没有则向计算平台server1发送源应用程序标识符app1,请求目标文件包app1_target,等待计算平台server1回复。若等待时间超过阈值仍然没有得到计算平台server1的回复,则根据源应用程序app1的体系结构ISA-B触发本地的动态二进制翻译器DBT1进行翻译,后跳转到步骤5。

2.计算平台server1接收到计算平台client1的请求后,会根据标识符app1查找本地子表中是否存有目标文件包app1_target的地址。

1)若找到,计算平台server1向计算平台client1发送已找到目标文件包app1_target消息,并将目标文件包app1_target发送回计算平台client1。

2)若没有找到,则向计算平台client1发送未找到文件包app1_target消息。请求源文件包app1_source(源应用程序app1+库文件等必要文件),等待计算平台client1的回复。若等待超过阈值仍然没有得到计算平台client1的回复,则结束本次任务。

3.计算平台client1接收到来自计算平台server1的回复之后,若回复为已找到,则运行接收到的目标应用程序并更新本地子表,然后跳转到步骤5。若回复为未找到,则向计算平台server1发送源文件包app1_source,同时根据源应用程序app1的体系结构ISA-B触发本地的动态二进制翻译器DBT1进行翻译。计算平台client1结束任务,释放占有的资源。

4.计算平台server1端接收到计算平台client1发送的源文件包app1_source,根据源应用程序app1的体系结构ISA-B触发计算平台server1相应的动态二进制翻译器DBT1'对源文件包app1_source进行翻译,生成目标文件包app1_target,存储到文件系统中,并更新本地子表。

5.程序运行结束。

实施例二

客户端选择通用动态二进制翻译器,服务器端选择通用动态二进制翻译器

如图6所示,计算平台client1为客户端,体系结构为ISA-A,配置动态二进制翻译器UDBT。计算平台server2为服务器端,体系结构为ISA-A,配置动态二进制翻译器UDBT'。应用程序app1基于ISA-B。

1.计算平台client1会查找本地子表中是否存有目标文件包app1_target的地址。若有,则执行目标应用程序;若没有则向计算平台server2发送源应用程序标识符app1,请求目标文件包app1_target,等待计算平台server2回复。若等待时间超过阈值仍然没有得到计算平台server2的回复,则根据源应用程序app1的体系结构ISA-B触发本地的动态二进制翻译器UDBT进行翻译,后跳转到步骤5。

2.计算平台server2接收到计算平台client1的请求后,会根据标识符app1查找本地子表中是否存有目标文件包app1_target的地址。

1)若找到,计算平台server2向计算平台client1发送已找到目标文件包app1_target消息,并将目标文件包app1_target发送回计算平台client1。

2)若没有找到,则向计算平台client1发送未找到目标文件包app1_target消息,请求源文件包app1_source(源应用程序app1+库文件等必要文件),等待计算平台client1的回复。若等待超过阈值仍然没有得到计算平台client1的回复,则结束本次任务。

3.计算平台client1接收到来自计算平台server2的回复之后,若回复为已找到,则运行接收到的目标应用程序并更新本地子表,后跳转到步骤5;若回复为未找到,则向计算平台server2发送源文件包app1_source,同时根据源应用程序app1的体系结构ISA-B触发动态二进制翻译器UDBT进行翻译。计算平台client1结束任务,释放占有的资源。

4.计算平台server2端接收到计算平台client1发送的源文件包app1_source,根据源应用程序app1的体系结构ISA-B触发计算平台server2动态二进制翻译器UDBT'。动态二进制翻译器UDBT'对源文件包app1_source进行翻译,在翻译过程中利用翻译好的代码块和动态信息生成目标文件包app1_target,并存储到文件系统中,并更新本地子表。

5.程序运行结束。

实施例三

客户端选择通用动态二进制翻译器,服务器端选择通用动态二进制翻译器和通用静态二进制翻译器

如图7所示,计算平台client1为客户端,体系结构为ISA-A,配置轻量级的动态二进制翻译器UDBT。计算平台server3为服务器端,体系结构为ISA-A,配置重量级的静态二进制翻译器USBT'和动态二进制翻译器UDBT'。应用程序app1基于ISA-B。

1.计算平台client1会查找本地子表中是否存有目标文件包app1_target的地址。若有,则执行目标应用程序;若没有则向计算平台server3发送源应用程序标识符app1,请求目标文件包app1_target,等待计算平台server3端回复。若等待时间超过阈值仍然没有得到计算平台server3的回复,则触发本地的动态二进制翻译器UDBT进行翻译,后跳转到步骤5。

2.计算平台server3接收到计算平台client1的请求后,会根据源应用程序标识符app1查找本地子表中是否存有目标文件包app1_target的地址。

1)若找到,计算平台server3向计算平台client1发送已找到目标文件包app1_target消息,并将目标文件包app1_target发送回计算平台client1。

2)若没有找到,则向计算平台client1发送未找到目标文件包app1_target消息,请求源文件包app1_source(源应用程序app1+库文件等必要文件),等待计算平台client1的回复。若等待时间超过阈值仍然没有得到计算平台client1的回复,则结束本次任务。

3.计算平台client1接收到来自计算平台server3的回复之后,若回复为已找到,则运行接收到的目标应用程序并更新本地子表,后跳转到步骤5;若回复为未找到,则向计算平台server3发送源文件包app1_source,同时触发动态二进制翻译器UDBT进行翻译。计算平台client1结束任务,释放占有的资源。

4.计算平台server3端接收到计算平台client1发送的源文件包app1_source,触发计算平台server3端动态二进制翻译器UDBT'和静态二进制翻译器USBT'分别对源文件包app1_source进行翻译。若静态二进制翻译器USBT'可以独立完成翻译,则在翻译结束后比较两种翻译器结果文件包的运行性能,选取性能最高的结果目标文件包app1_target,存储到文件系统中。若静态二进制翻译器USBT'不能独立完成翻译,则将动态二进制翻译器UDBT'的结果目标文件包app1_target存储到文件系统中,并更新本地子表。

5.程序运行结束。

实施例四

客户端选择通用动态二进制翻译器,服务器端选择多个专用动态二进制翻译器和专用静态二进制翻译器

如图8所示,计算平台client1为客户端,体系结构为ISA-A,配置动态二进制翻译器UDBT,计算平台server4为服务器端,体系结构为ISA-A,配置有多个专用动态二进制翻译器和多个专用静态二进制翻译器,包括静态二进制翻译器SBT1'、SBT2'和动态二进制翻译器DBT1'、DBT2'。应用程序app1基于ISA-B。针对一个客户端的请求,只需要使用一个DBT(例如本实施例中的DBT1'),一个SBT(例如本实施例中的SBT1');服务器端支持处理多个并发的客户端请求;

1.计算平台client1会查找本地子表中是否存有目标文件包app1_target的地址。若有,则执行目标应用程序;若没有则向计算平台server4发送源应用程序标识符app1,请求目标文件包app1_target,等待计算平台server4端回复。若等待时间超过阈值仍然没有得到计算平台server4的回复,则触发本地的动态二进制翻译器UDBT进行翻译,后跳转到步骤5。

2.计算平台server4接收到计算平台client1的请求后,会根据源应用程序标识符app1查找本地子表中是否存有目标文件包app1_target的地址。

1)若找到,计算平台server4向计算平台client1发送已找到目标文件包app1_target消息,并将目标文件包app1_target发送回计算平台client1。

2)若没有找到,则向计算平台client1发送未找到目标文件包app1_target消息,请求源文件包app1_source(源应用程序app1+库文件等必要文件),等待计算平台client1的回复。若等待时间超过阈值仍然没有得到计算平台client1的回复,则结束本次任务。

3.计算平台client1接收到来自计算平台server4的回复之后,若回复为已找到,则运行接收到的目标应用程序并更新本地子表,后跳转到步骤5。若回复为未找到,则向计算平台server4发送源文件包app1_source,同时触发动态二进制翻译器UDBT进行翻译。计算平台client1结束任务,释放占有的资源。

4.计算平台server4端接收到计算平台client1发送的源文件包app1_source,根据源应用程序app1的体系结构ISA-B触发计算平台server4相应的动态二进制翻译器DBT1'和静态二进制翻译器SBT1'分别对文件包app1_source进行翻译。若静态二进制翻译器SBT1'可以独立完成翻译,则在翻译结束后比较两种翻译器的结果目标文件包运行性能,选取性能最高的结果文件包app1_target,存储到文件系统中。若静态二进制翻译器SBT1'不能独立完成翻译,则将动态二进制翻译器DBT1'的结果目标文件包app1_target存储到文件系统中,并更新本地子表。

5.程序运行结束。

实施例五

多个不同体系结构的客户端,服务器端为多个不同体系结构组成的服务集群

在上述实施例中,客户端与服务器端均为一种体系结构。本发明中的二进制代码翻译服务系统将二进制翻译转化为向用户的一种服务,因此需要适配多种体系结构。注册中心在集群中负责接收客户端请求并根据客户端的请求分配最佳的服务器。注册中心可以是任意体系结构,负责服务器集群的负载均衡,如图9所示,注册中心维护一张服务注册表,记录服务器标识符、服务器IP地址、端口号、服务器上配置的二进制翻译器支持的源体系结构和目标体系结构以及服务器最后使用时间,注册中心还保存了所有已翻译文件包对应的服务器存储情况总表,包括源应用程序的标识符、目标应用程序体系结构和服务器标识符。

如图10所示,计算平台client1、client2为客户端,计算平台client1基于体系结构ISA-A,计算平台client2基于体系结构ISA-B。计算平台server1、server2、server3、server4、server5、registry_center共同组成服务集群。计算平台server1、server2、server3、server4配置与前述实施例相同。计算平台server5基于体系结构ISA-B。注册中心registry_center不限制体系结构。应用程序app1基于ISA-B,应用程序app2基于ISA-C。

执行流程如图11所示,客户端向注册中心发送源应用程序的标识符、源应用程序的体系结构、源应用程序的链接方式、目标应用程序的体系结构请求注册中心分配服务器。注册中心在接收到客户端请求后,会查询总表中是否有服务器翻译过,具体分类如下:

1.若有服务器翻译过,且目标应用程序体系结构相同,则将服务器地址发送给客户端。

2.否则,则根据源应用程序的链接方式、源应用程序的体系结构、目标应用程序的体系结构、服务器的空闲情况和服务器上二进制翻译器的配置进行选择。需要遵循的原则为服务器上的二进制翻译器支持的源体系结构和目标体系结构需要分别支持源应用程序的体系结构和目标应用程序的体系结构:

1)若为静态链接,则优先选择含有静态二进制翻译器的服务器。

2)若为动态链接,则优先选择不含有静态二进制翻译器的服务器。

若上述过程中符合条件的服务器有多个,则根据最久未使用算法进行选择,若仍出现多个符合条件的服务器,则进行随机选择。

3.客户端接收到注册中心的回复:

1)若源文件包翻译过,则根据注册中心回复的计算平台的IP和端口号发送源应用程序标识符等内容请求相应服务器发送目标文件包。

2)若源文件包没有翻译过,则根据注册中心回复的计算平台的IP和端口号发送源文件包等内容请求相应服务器对源文件包进行翻译。

4.服务器接收到客户端的请求:

1)若源文件包翻译过,则返回客户端目标文件包。

2)若源文件包没有翻译过,触发二进制翻译器对源文件包进行翻译:

a)若翻译成功,则对该服务器的子表进行更新,并向注册中心发送消息同步更新总表和服务注册表信息。

b)若翻译失败,则向注册中心发送源应用程序的体系结构为动态链接(目的在于请求不含静态二进制翻译器的服务器)、源应用程序的体系结构、目标应用程序的体系结构等必要信息,请求更换不含静态二进制翻译器的服务器。旧服务器接收到新的服务器IP和端口后,将客户端发来的信息转交给新的服务器,跳转到步骤4。

5.若客户端接收到服务器发送的目标文件包,则执行目标应用程序并更新本地子表。

下面以计算平台client1为例:

1.计算平台client1向注册中心registry_center发送请求。

2.注册中心registry_center接收到请求,根据源应用程序app1的体系结构ISA-B、计算平台client1的体系结构ISA-A和源应用程序app1链接方式查询到最佳服务器为计算平台server1,且计算平台server1翻译过源应用程序app1。注册中心registry_center将相关信息发送给计算平台client1。

3.计算平台client1接收到计算平台server1翻译过源应用程序app1信息,向计算平台server1发送源应用程序的标识符和目标应用程序体系结构ISA-A请求目标文件包。

4.计算平台server1接收到请求,查询到目标文件包,将目标文件包发送给计算平台client1。计算平台client1释放占用的资源。

5.计算平台client1接收到目标文件包,执行目标应用程序并更新本地子表。

6.结束任务。

参考文献

[1]马湘宁.二进制翻译关键技术研究[D].中国科学院研究生院(计算技术研究所),2004.

[2]中国发明专利,公开号:CN101504613A,用于受限系统的分布式动态二进制翻译方法.

本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

技术分类

06120115636737