动态二进制翻译系统中可重定向的寄存器分配方法技术方案

技术编号:3813727 阅读:436 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种动态二进制翻译系统中可重定向的寄存器分配方法,基于基本块内变量的next-use信息实施替换策略,根据不同的目标平台,自适应的启用不同的寄存器分配器,进行目标平台寄存器的分配。根据动态二进制翻译领域的不同需要对基本块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求非特定寄存器分配。本发明专利技术具有可重定向性,结合了变量的使用信息特性,具有分配效果好、分配开销低的特点,对于动态二进制翻译领域有更好的适用性,对于多源多目标的二进制翻译器尤其适用。

【技术实现步骤摘要】

本专利技术涉及一种,具体涉 及一种利用基本块内变量的next-use信息来进行寄存器分配,具备重定向特性 的寄存器分配方法。本专利技术属于动态二进制翻译
,尤其适用于多源多 目标的二进制翻译平台。
技术介绍
动态二进制翻译是虚拟执行技术中应用最为广泛的方法,是为遗留代码提供 移植可能性和提高软件的平台适应性的一种有效手段,它在不需要可执行程序 的源代码的情况下,可以动态地将源机器平台上的二进制程序经过转换,运行 于其他目标机器平台上。对于动态二进制翻译器自身而言,执行性能是一个非 常重要的衡量指标。所谓执行性能是指,以源程序在原架构下运行的效率为参 照,其在动态二进制翻译器提供的运行环境下的效率损失度越低,翻译器的执 行性能越好。寄存器在计算机存储体系结构里处于最上层,是访问速度最快的存储介质, 而且由于芯片大小的限制,通常寄存器数目不多,Intel的x86处理器只有8个 通用寄存器,有些RISC (精简指令集计算机)体系结构的寄存器数目稍多一些, 但也只有儿十个左右的寄存器,当然里面还包含很多特殊寄存器,能够被翻译器 使用的就更少了。为了提高翻译器翻译后的代码的执行性能,动态二进制翻译 领域需要采用一种技术,它使得翻译后的代码块能够尽可能高效的利用寄存器 这一稀缺资源。但是对于动态二进制翻译领域,考虑到动态执行的实时性,分 配算法复杂度不能太高。因此技术人员必须在更高效的使用目标平台的寄存器 和分配算法的复杂度之间寻求平衡。4就一般而言,在动态二进制翻译领域,对源程序的翻译、执行或优化等操作 都是以源程序的基本块为单位。所谓基本块是指仅有单入口点和单出口点的一 组指令序列,基本块的入口点仅存在于此基本块的开始,基本块的出口点仅存 在于此基本块的末尾,程序的执行流从此基本块的入口点进入并执行块内指令, 之后从出口点离开。动态二进制翻译领域的寄存器分配也是以基本块为单位, 完成对基本块内代码中的变量进行寄存器的分配。目前,在动态二进制翻译领域可以使用如下方法完成寄存器分配任务1、 简单的寄存器分配方法,这种分配算法通过对基本块内的变量号按目标 机寄存器数目进行一次取模运算,得出的数字即是被分配的寄存器编号。如果 该寄存器被同一条指令的其他变量占用,则尝试下一个编号的寄存器。如果该 寄存器没有被同一条指令内的其他变量占用,则把该寄存器内内容交换到内存, 然后分配该寄存器给当前变量。如果该寄存器空闲,直接分配该寄存器给当前 变量。这种方法简单有效,开销小,适用于动态二进制翻译领域的及时性特性, 但没有利用基本块内变量的信息,使得分配结果不够高效,寄存器使用效率不 咼o2、 全局寄存器分配方法,这种方法把跨越多个基本块常用的一些变量存放 在全局寄存器中,比如把循环中常用的变量保存在特定的寄存器中。因为在动 态二进制翻译中,翻译和执行的基本单位是一个基本块,所以这里所指的全局 也仅在一个基本块范围之内,全局变量是指在这个基本块内被使用次数(use-frequency)最多的那个变量,把这些变量存放在某些寄存器中,在整个基 本块的生存期,对它们都不做替换。这种方法需要在分配前,先走查一下整个 基本块,收集基本块内所有变量的使用频率信息。然后分配一些固定的寄存器 给这些使用频次最高的变量,其余变量使用简单的寄存器分配方法进行分配。 这种方法利用了基本块内变量的信息,但在使用上不够充分,只在开始阶段利 用收集到的信息固定分配了若干变量,对后续变量的分配过程则完全丢弃了这 些信息。3、图染色分配方法,这种方法在静态编译器领域有着重要的地位,它是一 种基于图简化思路的启发式分配方法。它包括如下几个步骤(1) 变量存活期信息的收集(2) 干扰图的构造(3) 图精简以及寄存器分配 变量存活期的收集通过遍历整个基本块,从而获得每个变量的存活期。如果两个变量存活期有重叠,则表明这两个变量存在冲突,即不能同时分配到同一 个寄存器。在干扰图里体现为这两个变量之间存在一条干扰边。通过这种方式 构造出干扰图。然后基于干扰图的简化过程,把每个变量压栈,当所有变量都 完全压桟后,则表明所有变量都能够分配到一个寄存器。如果干扰图不能继续 简化下去,则采用spill OUt方式把这个变量放到内存去,从图中删除该结点, 继续简化,直到干扰图简化完毕。然后通过弹栈操作进行寄存器分配。弹栈的 过程只需找出一个没被和它存在干扰关系的变量占用的寄存器即可。这种方法 收集了基本块内变量的信息,并充分利用了收集到的这些信息,最优化的进行 了寄存器分配,使得寄存器分配的效果最好,但是整个分配过程比较耗时,开 销很大,在开销和分配效果上需要根据分配对象进行确定。对于一个基本块内 的寄存器分配,图染色算法不太适用。从上述的三种寄存器分配方法可以看出,每种方法都有其固有的优缺点,三 者收集并利用信息的丰富程度呈递增趋势,同时,分配丌销和实现复杂度也随 之增加。对于前两种寄存器分配方法,实现较简单,但是利用基本块内变量的 信息十分有限,不能达到有效的效果。最后一种剖分信息虽然充分利用了收集 到的信息,其执行性能损失将无法接受,或者说,在动态二进制翻译领域,在 一个基本块内,按照此种分配方法所得到的寄存器使用效率的提高还不足以弥 补为达到这种效果所付出的分配丌销。因此需要专利技术一种新型的适用于动态二进制翻译的寄存器分配方法,既能有 效的利用基本块内变量的信息,产生良好的分配结果,又不能有太多分配开销。 同时还需要满足动态二进制翻译领域多源多目标所要求的重定向特性。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种动态二进制翻译系统中可 重定向的寄存器分配方法,对多种目标平台具有可重定向性,具有分配开销小, 分配效率高等特性,满足动态二进制翻译器领域中多源多目标的翻译特性以及 二进制翻译系统对分配开销的敏感性的特殊需求。为实现上述目的,本专利技术设计的一种可重定向的寄存器分配方法,基于基本 块内变量的next-use信息实施替换策略,根据不同的目标平台,自适应的启用 不同的寄存器分配器,进行目标平台寄存器的分配。根据动态二进制翻译领域 的不同需要对基本块中的变量进行寄存器的分配,分为普通分配、强制要求特 定寄存器分配、强制要求非特定寄存器分配。所谓next-use信息是指该变量下次被使用的位置。本专利技术分配方法的作用位置动态二进制翻译器通常会包含中间代码层,因为如果要达到多源多目标的翻 译特性,多了这一层将会减少从源平台翻译到目标平台的翻译过程。这样动态 二进制翻译器就需要包含两个过程 一是把在源平台下运行的映像进行解构, 按一个个基本块进行翻译,转换成由中间代码组成的中间代码块;二是把中间 代码块翻译成在目标平台上能运行的目标代码块。在过程一中,源映像代码中 的寄存器用数量不受限制的虚拟寄存器替代。在过程二中,需要把中间代码块 中的虚拟寄存器用目标平台的实际寄存器来替代,而目标平台的寄存器数目都 是有限的,个别平台寄存器资源极其宝贵,比如x86,充分使用这些资源能够使 得整个计算系统性能得到很大的提高。本专利技术分配方法正是运用在过程二中, 完成把目标平台寄存器合理有效的分配给目标指令的变量。本专利技术进行寄存器分配的具体步骤如下l)初始化寄存器分配器的目标平台,本文档来自技高网
...

【技术保护点】
一种动态二进制翻译系统中可重定向的寄存器分配方法,其特征在于包括如下步骤: 1)初始化寄存器分配器的目标平台,包括寄存器数目,寄存器之间的数据移动机器指令,内存到寄存器的数据移动机器指令以及寄存器到内存的数据移动机器指令; 2) 初始化块寄存器分配器内部数据结构,包括初始化寄存器状态的数据结构数据,所有寄存器状态设为空闲,所有目标平台寄存器所匹配的变量设为空,所有匹配的变量所在指令设为空;初始化基本块所有变量所在位置为内存;清空存放基本块变量next-use信息的所有队列; 3)从基本块头部到尾部扫描收集next-use信息,依次把基本块内变量的next-use信息分别放进变量各自的队列; 4)根据不同翻译需要对基本块中的变量进行寄存器的分配,分为普通分配、强制要求特定寄存器分配、强制要求 非特定寄存器分配; 5)对于普通分配,依次查看寄存器的状态,如果有寄存器已被分配给该变量,则继续保持这种分配;否则再依次查看寄存器的状态,若有空闲寄存器或者有寄存器对应变量失去活性,且变量在后续指令是被定义的,则把该空闲寄存器或者对应 变量失去活性的寄存器分配给该变量;若有空闲寄存器或者有寄存器对应变量失去活性,且变量在后续指令是被使用的,则把该空闲寄存器或者对应变量失去活性的寄存器分配给该变量,并把该变量对应的内存的数据装载到该空闲寄存器或者对应变量失去活性的寄存器;若无空闲寄存器且没有寄存器对应变量失去活性,且变量在后续指令是被定义的,则先找出next-use信息最大值的变量所对应的寄存器,如果next-use信息最大值的变量后续会被使用,则把该寄存器的值保存到对应变量的内存,然后把该寄存器分配给该变量,如果next-use信息最大值的变量后续不会被使用,则直接把该寄存器分配给该变量;若无空闲寄存器且没有寄存器对应变量失去活性,且变量在后续指令是被使用的,则先找出next-use信息最大值的变量所对应的寄存器,如果next-use信息最大值的变量后续会被使用,则把该寄存器的值保存到对应变量的内存,然后把该寄存器分配给该变量,并把该变量对应的内存的数据装载到该寄存器,如果next-use信息最大值的变量后续不会被使用,则直接把该寄存器分配给该变量,并把该变量对应的内存的数据装载到该寄存器; 6)对于强制要求特定寄存器分配,如果强制要求寄存器已被分配的变量恰好是该变量,则继续保持这种分配;如果强制要求...

【技术特征摘要】

【专利技术属性】
技术研发人员:管海兵梁阿磊蔡战举姜玲燕孙廷韬
申请(专利权)人:上海交通大学
类型:发明
国别省市:31[中国|上海]

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

1