寄存器窗口切换在二进制翻译中的实现方法技术

技术编号:3820392 阅读:331 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种计算机技术领域的寄存器窗口切换技术在动态二进制翻译中的实现方法,包括如下步骤:用一段连续内存空间对应源平台上的所有寄存器窗口;用一个虚拟寄存器保存源平台上当前寄存器窗口在对应的模拟内存空间中的地址,用另外的固定的内存空间模拟与寄存器窗口无关的控制/状态寄存器和全局寄存器;用二级寻址的方式来确定源平台寄存器在模拟内存中的位置;在翻译器前端翻译每条寄存器窗口切换指令时动态调整虚拟寄存器的值。本发明专利技术采用两级的寻址方式使得每条寄存器窗口切换指令在翻译成中间指令时只需要调整一个虚拟寄存器的值,有效地减少了内存访问的次数,从而提高了翻译后的目标代码的执行效率。

【技术实现步骤摘要】

本专利技术涉及一种计算机
的寄存器窗口切换方法,特别是一种寄存 器窗口切换在二进制翻译中的实现方法。
技术介绍
动态二进制翻译是虚拟机技术中应用最广泛的一种方法,是解决遗留代码 和提高软件平台适应性的一种有效手段,它在不需要可执行程序的源代码的情 况下,可以动态地转换源机器平台上的二进制程序,并使之运行于其他目标机 器平台上。对于动态二进制翻译器自身而言,执行性能是一个非常重要的衡量 指标。所谓执行性能是指,以源程序在原架构下运行的效率为参照,其在动态 二进制翻译器提供的运行环境下的效率损失度越低,翻译器的执行性能越好。 包含中间指令的动态二进制翻译器一般包括前端和后端。对翻译代码的优化就 集中在中间语言层次和目标机器代码层次,而前端的翻译质量直接影响了生成 的中间指令的质量和目标机器代码的质量。有些系统结构,比如SPARC, AMD 29000和Intel i960,拥有很大数量的寄 存器,工作寄存器组成若干个窗口,形成环状的结构,利用重叠寄存器窗口技 术来加快程序的运转。寄存器窗口技术就是把寄存器分成很多固定数量的寄存 器组,为每个函数调用过程分配一个寄存器组,当发生调用的时候,自动地把 CPU转换到不同的寄存器组使用,不再需要做保存和恢复的操作,这个寄存器组 即寄存器窗口。相邻的寄存器窗口间有固定数量的寄存器是重叠的,用来在两 个寄存器窗口间进行数据共享。参数传递就是利用这个机制来实现的。每当有 函数调用或从函数返回的时候,分别有一条指令(比如SPARC上是SAVE和 RESTORE)来完成寄存器窗口的切换,但是由于不是每种系统结构都有相应的机 制,这样就导致在具有寄存器窗口技术的架构上编译的程序被翻译到其它平台 架构上的时候效率严重受到影响,比如,以SPARC为前端的二进制翻译就会有很大程度的性能降低。目前解决寄存器窗口切换在动态二进制翻译中实现的方 法有方法一对每条SAVE指令保存所有的寄存器的内容,并把重叠部分的寄存器读取到新的寄存器窗口中,对每条RESTORE指令读取所保存的寄存器的内容。方法二分析程序的数据流图,据此得出哪些寄存器的内容在该指令的后面是需要用到的,对每条SAVE指令只保存这些需要用到的寄存器的内容,对每 条RESTORE指令读取所保存的寄存器的内容。可以看到,第一种方法对于每条寄存器窗口切换指令都需要进行很多次寄 存器间复制和内存访问的操作,效率很低;第二种方法在效率上提高了一些, 但是需要分析数据流图,增加了翻译器前端的复杂度,并且只是消除了一部分 访问内存的操作,没有从本质上提高效率,因为寄存器窗口切换指令被执行的 频率是很高的,每次要保存一些寄存器的值到内存势必会增加不少内存的读写 操作。因此,针对上述技术难题,在现有
中需要提出一种新型的适用于 基于中间指令的动态二进制翻译中的寄存器窗口切换指令的方法,用来提高在 具有寄存器窗口技术的平台上编译的程序被翻译后在异构平台上的执行性能。
技术实现思路
本专利技术的目的在于针对现有技术的不足,提供一种寄存器窗口切换在二进 制翻译中的实现方法。本专利技术通过减少对内存的操作,降低运行时的开销,使 程序执行性能有较大的提升。本专利技术包括步骤如下 ①在翻译器的前端建立映射关系时不是只用一个寄存器窗口大小的内存空 间对应源平台上的寄存器,而是用一段连续内存空间对应源平台上的所有寄存器窗口;② 用一个虚拟寄存器保存源平台上当前寄存器窗口在对应的模拟内存空间 中的地址,这个虚拟寄存器与模拟内存空间中标记寄存器窗口位置的指针建立 映射关系;③ 用另外的固定的内存空间模拟与寄存器窗口无关的控制/状态寄存器和 全局寄存器;④ 对于映射源平台寄存器和翻译器虚拟寄存器的中间指令(比如GET/PUT 指令)用二级寻址的方式来确定源平台寄存器在模拟内存中的位置, 一级地址 为步骤①中内存空间的起始地址与要访问的寄存器号之和,二级地址为一级地 址与步骤②中虚拟寄存器的值之和;⑤ 在翻译器前端翻译每条寄存器窗口切换指令时动态调整步骤②中虚拟寄 存器的值。步骤①中所述的在翻译器的前端建立映射关系时通过模拟源平台的整个寄 存器组而不是一个寄存器窗口,然后通过两级寻址方式很巧妙的实现了与源平 台的寄存器窗口的一一对应。步骤⑤中通过所述的操作一个虚拟寄存器(此寄存器被映射到标记当前寄 存器窗口位置的指针,步骤②中所述)来调整窗口位置,取代了将上一个寄存 器窗口切换到内存的操作,有效地减少了内存操作,使得中间代码的质量有了 很大的提高,从而提高了目标代码的执行效率。所述的与与源平台的寄存器窗口的一一对应,将所有的源寄存器组与一块 内存空间建立映射关系,在模拟源平台寄存器的内存空间中申请窗口数目大小 的内存空间regs,与寄存器窗口组建立一一映射关系。本专利技术所述的动态二进制翻译,包含两个过程 一是把在源平台下运行的映像进行解构,按一个个基本块进行翻译,转换成由中间代码组成的中间代码块;二是把中间代码块翻译成在目标平台上能运行的目标代码块。动态二进制 翻译器包含中间代码层,因为如果要达到多源多目标的翻译特性,多了这一层 将会减少从源平台翻译到目标平台的翻译路径。即动态二进制翻译器分为前端 和后端。前端翻译的好坏直接影响了生成的中间代码的质量。本专利技术正是运用 在前端中,完成把寄存器窗口切换指令简洁高效的翻译为中间指令。本专利技术使得对于每条寄存器窗口切换指令只需要调整一个虚拟寄存器的 值,即步骤②中所述的标记当前寄存器窗口位置的指针的值。这大大减少了对 内存的操作,有效地提高了生成的中间代码的质量,从而提高了目标代码的执 行性能。与通过分析数据流图决定保存哪些寄存器的方法相比,本专利技术是简洁 有效的,并且通过调整一个虚拟寄存器的值来取代传统的复制大量内存内容的 方式从根本上减少了对内存的操作,因而翻译出的目标代码的执行效率更高。附图说明图1为本专利技术采用的模拟源平台寄存器的内存空间分布图。 具体实施例方式为更好地理解本专利技术的技术方案,以下结合附图并通过具体的实施例作进 一步描述。以下实施例不构成对本专利技术的限定。SPARC是SUN和TI公司合作开发的一款RISC微处理器。SPARC的处理器包 含两种类型的寄存器通用寄存器和控制/状态寄存器,通用寄存器分为全局寄 存器和寄存器窗口。在任一时刻, 一条指令能在整型寄存器单元中访问8个全 局(globals)寄存器和一个包含24个寄存器的窗口。 一个寄存器窗口由8个 in寄存器、8个local寄存器和8个out寄存器组成,其中8个out寄存器和 下一个邻接窗口的8个in寄存器地址相同。SAVE和RESTORE指令引起窗口的切 换。CrossBit是一个动态二进制翻译系统,它可以为执行在多种不同体系结构 的源程序,通过翻译和优化的方法,提供异构架构下的执行环境。为了实现多 源多目标,CrossBit使用了中间代码层,这样会减少翻译路径。只需要把前端 二进制映像程序(前端)翻译成中间代码块,然后再把中间代码块翻译成对应 的目标平台代码(后端),就能形成一种二进制翻译器。如果目标平台改变,只 需改变一个后端。目前,CrossBit支持SimpleScalar, MIPS, X86, SPARC前端, X86和SPARC后端。本文档来自技高网
...

【技术保护点】
一种寄存器窗口切换在动态二进制翻译中的实现方法,其特征在于,包括如下步骤: ①在翻译器的前端建立映射关系时用一段连续内存空间对应源平台上的所有寄存器窗口; ②用一个虚拟寄存器保存源平台上当前寄存器窗口在对应的模拟内存空间中的地址 ,这个虚拟寄存器与模拟内存空间中标记寄存器窗口位置的指针建立映射关系; ③用另外的固定的内存空间模拟与寄存器窗口无关的控制/状态寄存器和全局寄存器; ④对于映射源平台寄存器和翻译器虚拟寄存器的中间指令用二级寻址的方式来确定源平台 寄存器在模拟内存中的位置; ⑤在翻译器前端翻译每条寄存器窗口切换指令时动态调整步骤②中虚拟寄存器的值。

【技术特征摘要】

【专利技术属性】
技术研发人员:管海兵梁阿磊左保京章一超孙廷韬
申请(专利权)人:上海交通大学
类型:发明
国别省市:31[中国|上海]

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

1