CN102662631A - 间接分支指令处理方法和装置 - Google Patents
间接分支指令处理方法和装置 Download PDFInfo
- Publication number
- CN102662631A CN102662631A CN2012100694634A CN201210069463A CN102662631A CN 102662631 A CN102662631 A CN 102662631A CN 2012100694634 A CN2012100694634 A CN 2012100694634A CN 201210069463 A CN201210069463 A CN 201210069463A CN 102662631 A CN102662631 A CN 102662631A
- Authority
- CN
- China
- Prior art keywords
- destination address
- branch instruction
- indirect branch
- buffer memory
- memory array
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title abstract 2
- 238000013519 translation Methods 0.000 claims abstract description 85
- 238000000034 method Methods 0.000 claims abstract description 45
- 238000012384 transportation and delivery Methods 0.000 claims description 32
- 230000000694 effects Effects 0.000 abstract description 5
- 238000012545 processing Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 8
- 208000034423 Delivery Diseases 0.000 description 7
- 238000010276 construction Methods 0.000 description 5
- 238000000151 deposition Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000009191 jumping Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000012141 concentrate Substances 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000004321 preservation Methods 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30061—Multi-way branch instructions, e.g. CASE
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种间接分支指令处理方法和装置,其中,该方法包括:加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,缓存数组中的记录项用于记录当前基本块中已执行过的间接分支指令的目标地址;判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同;若当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同,则跳转到当前执行的间接分支指令的目标地址,并从当前执行的间接分支指令的目标地址开始执行代码。本发明解决了二进制翻译的过程中上下文切换的次数过多导致翻译效率低的问题,达到了提高二进制翻译系统的效率的效果。
Description
技术领域
本发明涉及动态二进制翻译领域,具体而言,涉及一种间接分支指令处理方法和装置。
背景技术
二进制翻译技术指的是将一个体系结构上执行的二进制代码转换为能被另一个体系结构所执行的二进制代码。在动态二进制翻译技术中,性能是最为关注的话题。许多研究工作表明间接指令的处理是影响性能的关键因素。在源程序代码序列中,以跳转指令为标志截取一系列代码段,称为基本块,动态二进制翻译以基本块(或称代码块)为基本翻译和执行单位,一般应用程序平均每4-7条指令就有一个跳转指令。跳转指令包括两种:确定性跳转和非确定性跳转。确定性跳转包括直接跳转和条件跳转。对于确定性跳转,目标地址在编译时就已经确定,可以将目标基本块(或称代码块)的地址和直接跳转的目标进行挂接,每当运行到该直接跳转指令或者跳转时直接跳转到目标基本块,减少查找次数和上下文切换。对于非确定性跳转,例如间接跳转指令,它们的目标地址只有在运行的时候才能确定,因此通用的方法是返回翻译模块进行查找,这样不可避免地要进行上下文切换和执行现场的保持和恢复,增加了动态二进制翻译的开销。
现有的对于二进制翻译中间接分支指令的处理方法分为硬件方法和软件方法。硬件方法主要是影子栈(shadow stack),用影子栈(视为一种硬件栈)维护翻译程序的跳转关系,间接分支指令只要查询硬件栈就可以得到返回地址。软件方法分为三种:数据缓存哈希(data cachehashing),指令缓存哈希(instruction cache hashing),和内嵌指令缓存哈希(inline instruction cachehanding)。这三个方法都使用一个全局哈希数组来查找间接分支指令的目标地址,这样就使得在二进制翻译中要进行上下文切换和执行现场的保存和恢复。图1示出了相关技术中二进制翻译的一种流程图,从图中可以看出,现有的二进制翻译过程中包括如下步骤:
S102,首先在EIP(32位机的指令寄存器)中查找判断当前基本块(或称代码块)是否在全局哈希数据组中,若不存在,则执行S104-S106,若存在,则直接执行S106。
S104,翻译基本块;
S106,执行基本块代码;
S108,当遇到间接分支指令时,保存现场,切换上下文,返回S102。
从上述流程的描述中可以看出,现有的二进制翻译过程中,当遇到间接分支指令时,需要保存现场,然后切换上下文返回翻译模块,这明显降低了动态二进制翻译器的效率。要提高动态二进制翻译器的效率必须减少上下文切换的次数。
针对相关技术中二进制翻译的过程中上下文切换的次数过多导致翻译系统效率低的问题,目前尚未提出有效的解决方案。
发明内容
本发明提供了一种间接分支指令处理方法和装置,以至少解决相关技术中二进制翻译过程中上下文切换的次数过多导致翻译效率低的问题。
根据本发明的一个方面,提供了一种间接分支指令处理方法,包括:加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,缓存数组中的记录项用于记录当前基本块中已执行过的间接分支指令的目标地址;判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同;若当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同,则跳转到当前执行的间接分支指令的目标地址,并从当前执行的间接分支指令的目标地址开始执行代码。
优选的,在判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同之后,还包括:若判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不同,则将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中。
优选的,将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中的步骤包括:将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;将当前执行的间接分支指令的目标地址记录在缓存数组中第i个记录项中。
优选的,将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中的步骤包括:判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;若当前执行的间接分支指令的目标地址所对应的基本块被翻译,则将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中;若当前执行的间接分支指令的目标地址所对应的基本块未被翻译,则对当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块的首地址记录在缓存数组中对应的记录项中。
优选的,判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译的步骤包括:判断当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;若相同,则判断出当前执行的间接分支指令的目标地址所对应的基本块已被翻译;若不同,则判断出当前执行的间接分支指令的目标地址所对应的基本块未被翻译。
优选的,判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同的步骤包括:将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;判断当前执行的间接分支指令的目标地址与缓存数组中第i个记录项中记录的目标地址是否相同。
根据本发明的另一方面,提供了一种间接分支指令处理装置,该装置包括:加载单元,用于加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,缓存数组中的记录项用于记录当前基本块中已执行过的间接分支指令的目标地址;判断单元,用于判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同;执行单元,用于在判断单元判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同时,跳转到当前执行的间接分支指令的目标地址,并从当前执行的间接分支指令的目标地址开始执行代码。
优选的,间接分支指令处理装置还包括:记录单元,用于在判断单元判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不同时,将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中。
优选的,记录单元包括:第一取模模块,将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;第一记录模块,用于将当前执行的间接分支指令的目标地址记录在缓存数组中第i个记录项中。
优选的,记录单元包括:第一判断模块,用于判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;第二记录模块,用于在判断模块判断当前执行的间接分支指令的目标地址所对应的基本块被翻译时,将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中;翻译模块,用于在判断模块判断当前执行的间接分支指令的目标地址所对应的基本块未被翻译时,对当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块的首地址记录在缓存数组中对应的记录项中。
优选的,第一判断模块包括:第一判断子模块,用于判断当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;第二判断子模块,用于在第一判断子模块判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同时,判断出当前执行的间接分支指令的目标地址所对应的基本块已被翻译;第三判断子模块,用于在第一判断子模块判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址不同时,判断出当前执行的间接分支指令的目标地址所对应的基本块未被翻译。
通过本发明,为每个基本块增加与之对应的缓存数组,缓存数组中的记录项中缓存有当前基本块中已执行过的间接分支指令的目标地址,在二进制翻译的过程中执行间接分支指令时,先判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同的情况下,直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不需要进行更多的上下文的切换,解决了二进制翻译的过程中上下文切换的次数过多导致翻译系统效率低的问题,达到了提高二进制翻译的效率的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术的二进制翻译的过程流程示意图;
图2是根据本发明实施例的间接分支指令处理方法的一种优选的流程图;
图3是根据本发明实施例的间接分支指令处理装置的一种优选的结构图;
图4是根据本发明实施例的间接分支指令处理装置的另一种优选的结构图;
图5是根据本发明实施例的间接分支指令处理装置的另一种优选的结构图;
图6是根据本发明实施例的间接分支指令处理装置的另一种优选的结构图;
图7是根据本发明实施例的间接分支指令处理装置的又一种优选的结构图;
图8是根据本发明实施例的间接分支指令处理方法在二进制程序翻译过程中的一种优选的流程示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例1
本实施例提供了一种间接分支指令处理方法,如图2所示,该方法包括:
S202,加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,缓存数组中的记录项用于记录当前基本块中已执行过的间接分支指令的目标地址;优选的,每一个基本块对应一个缓存数组,该缓存数组中的记录项记录当前基本块中已执行过的间接分支指令的目标地址。优选的,可以通过记录该间接分支指令的目标地址所在基本块对应的结构体的指针来实现记录间接分支指令的目标地址的过程,其中,上述结构体用于存储对应的基本块,但本发明不仅限于此,还可以通过其他可替换的方式来记录间接分支指令的目标地址。
S204,判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同;优选的,在执行该间接分支指令时,以间接分支指令的目标地址作哈希,根据哈希结果把目标地址或目标地址所在基本块结构体的指针存入当前间接分支指令所在基本块的缓存数组中,优选的,上述哈希操作中的哈希函数为间接分支指令的目标地址值对缓存数组的大小取模,取模的结果为对应存放的缓存数组相应的位置。
S206,若当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同,则跳转到当前执行的间接分支指令的目标地址,并从当前执行的间接分支指令的目标地址开始执行代码。
在上述优选的实施方式中,为每个基本块增加与之对应的缓存数组,缓存数组中的记录项用来缓存当前基本块中已执行过的间接分支指令的目标地址,在二进制翻译的过程中执行间接分支指令时,先判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同的情况下,直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不需要进行更多的上下文的切换,解决了二进制翻译的过程中上下文切换的次数过多导致翻译系统效率低的问题,达到了提高二进制翻译的效率的效果。
优选的,在判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同之后,该间接分支指令处理方法还包括:若判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不同,则将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中。
在上述优选的实施方式中,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不同时,将当前执行的间接分支指令的目标地址记录在间接分支所在基本块的缓存数组中对应的记录项中,使得在下次执行相同的间接分支指令时,可以直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不必切换上下文返回到翻译模块,从而提高了二进制翻译系统的效率。
本实施例还提供了将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中的一种优选的方法,具体来说,该方法包括:将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中第i个记录项中。优选的,例如,基本块的缓存数组大小为8项,间接分支指令的目标地址为0x3003d820,把0x3003d820对8取模余0,则将当前执行的间接分支指令的目标地址0x3003d820或目标地址0x3003d820所在基本块结构体的指针记录在缓存数组中第0个记录项中。上述技术方案的实施,提供了一种简单的哈希操作来实现将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中对应的记录项中。
本实施例还提供了将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中的一种具体的方案,该方案包括:判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;若当前执行的间接分支指令的目标地址所对应的基本块被翻译,则将当前执行的间接分支指令的目标地址或目标地址所在的基本块结构体的指针记录在缓存数组中对应的记录项中;若当前执行的间接分支指令的目标地址所对应的基本块未被翻译,则对当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块的首地址或基本块结构体的指针记录在缓存数组中对应的记录项中。
在上述优选的实施例中,在将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项之前,对当前执行的间接分支指令的目标地址所对应的基本块是否被翻译进行判断,若未被翻译,则先将基本块进行翻译之后,再将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中对应的记录项中,以便下次跳转到当前执行的间接分支指令的目标地址时可以直接执行代码,无需再次翻译,进而提高了二进制翻译系统的效率。
本优选的实施例还提供了一种判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译的具体的方法,该方法包括:判断当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;若相同,则判断出当前执行的间接分支指令的目标地址所对应的基本块已被翻译;若不同,则判断出当前执行的间接分支指令的目标地址所对应的基本块未被翻译。通过上述优选的实施例,只需判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址是否相同即可判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译,使得判断过程变得简单而实用。
本优选的实施例还提供了一种判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同的优选的方案,具体来说,该方案包括:将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;判断当前执行的间接分支指令的目标地址与缓存数组中第i个记录项中记录的目标地址或结构体的指针指向的目标地址是否相同。优选的,例如,基本块的缓存数组大小为8项,间接分支指令的目标地址为0x3003d820,把0x3003d820对8取模余0,则将判断当前执行的间接分支指令的目标地址0x3003d820与缓存数组中第0个记录项中记录的目标地址或基本块结构体的指针指向的目标地址是否相同。
实施例2
在上述实施例1的基础上,本实施例还提供了一种间接分支指令处理装置,具体的,如图3所示,该装置包括:加载单元302,用于加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,缓存数组中的记录项用于记录当前基本块中已执行过的间接分支指令的目标地址;优选的,每一个基本块对应一个缓存数组,该缓存数组中的记录项记录当前基本块中已执行过的间接分支指令的目标地址,优选的,可以通过记录该间接分支指令的目标地址所在基本块对应的结构体的指针来实现记录间接分支指令的目标地址的过程,其中,上述结构体用于存储对应的基本块,但本发明不仅限于此,还可以通过其他可替换的方式来记录间接分支指令的目标地址。判断单元304,用于判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同;优选的,在执行该间接分支指令时,以间接分支指令的目标地址作哈希,根据哈希结果把目标地址或目标地址所在基本块结构体的指针存入当前间接分支指令所在基本块的缓存数组中,优选的,上述哈希操作中的哈希函数为间接分支指令的目标地址值对缓存数组的大小取模,取模的结果为对应存放的缓存数组相应的位置。执行单元306,用于在判断单元304判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同时,跳转到当前执行的间接分支指令的目标地址,并从当前执行的间接分支指令的目标地址开始执行代码。
在上述优选的实施方式中,为每个基本块增加与之对应的缓存数组,缓存数组中的记录项用来缓存当前基本块中已执行过的间接分支指令的目标地址,在二进制翻译的过程中执行间接分支指令时,先判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同的情况下,直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不需要进行更多的上下文的切换,解决了二进制翻译的过程中上下文切换的次数过多导致翻译系统效率低的问题,达到了提高二进制翻译的效率的效果。
本发明还对上述装置进行了改进,具体的,如图4所示,该装置还包括:记录单元402,用于在判断单元304判断当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不同时,将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项中。
在上述优选的实施方式中,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址不时,将当前执行的间接分支指令的目标地址记录在间接分支所在基本的缓存数组中对应的记录项中,使得在下次执行相同的间接分支指令时,可以直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不必切换上下文返回到翻译模块,从而提高了二进制翻译系统的效率。
本发明还对上述记录单元402进行了优化,具体来说,如图5所示,记录单元402包括:第一取模模块502,将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;第一记录模块504,用于将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中第i个记录项中。优选的,例如,基本块的缓存数组大小为8项,间接分支指令的目标地址为0x3003d820,把0x3003d820对8取模余0,则将当前执行的间接分支指令的目标地址0x3003d820或目标地址0x3003d820所在的基本块结构体的指针记录在缓存数组中第0个记录项中。上述技术方案的实施,提供了一种简单的哈希操作来实现将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中对应的记录项中。
本发明还还对上述记录单元402进行了进一步的优化,具体的,如图6所示,记录单元402包括:判断模块602,用于判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;第二记录模块604,用于在判断模块602判断当前执行的间接分支指令的目标地址所对应的基本块被翻译时,将当前执行的间接分支指令的目标地址或目标地址所在的基本块结构体的指针记录在缓存数组中对应的记录项中;翻译模块606,用于在判断模块602判断当前执行的间接分支指令的目标地址所对应的基本块未被翻译时,对当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块首地址或基本块结构体的指针记录在缓存数组中对应的记录项中。
在上述优选的实施例中,在将当前执行的间接分支指令的目标地址记录在缓存数组中对应的记录项之前,对当前执行的间接分支指令的目标地址所对应的基本块是否被翻译进行判断,若未被翻译,则先将基本块进行翻译之后,再将当前执行的间接分支指令的目标地址或目标地址所在基本块结构体的指针记录在缓存数组中对应的记录项中,以便下次跳转到当前执行的间接分支指令的目标地址时可以直接执行代码,无需再次翻译,进而提高了二进制翻译系统的效率。
本发明还对上述判断模块602进行了改进,如图7所示,上述判断模块602包括:第一判断子模块702,用于判断当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;第二判断子模块704,用于在第一判断子模块702判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同时,判断出当前执行的间接分支指令的目标地址所对应的基本块已被翻译;第三判断子模块706,用于在第一判断子模块702判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址不同时,判断出当前执行的间接分支指令的目标地址所对应的基本块未被翻译。通过上述优选的实施例,只需判断当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址是否相同即可判断当前执行的间接分支指令的目标地址所对应的基本块是否被翻译,使得判断过程变得简单而实用。
优选的,判断单元304包括:第二取模模块,用于将当前执行的间接分支指令的目标地址对缓存数组中的记录项的个数取模,得到余数i;第二判断模块,判断当前执行的间接分支指令的目标地址与缓存数组中第i个记录项中记录的目标地址或基本块结构体的指针指向的目标地址是否相同。优选的,例如,基本块的缓存数组大小为8项,间接分支指令的目标地址为0x3003d820,把0x3003d820对8取模余0,则将判断当前执行的间接分支指令的目标地址0x3003d820与缓存数组中第0个记录项中记录的目标地址或基本块结构体的指针指向的目标地址是否相同。
此处需要说明的是,上述第一取模模块502和第二取模模块可以是同一个执行取模功能的模块,也可以是两个相互独立的取模模块;上述第一记录模块504和第二记录模块604可以是同一个执行记录功能的模块,也可以是两个相互独立的记录模块;上述第一判断子模块702、第二判断子模块704和第三判断子模块706可以是同一个执行记录功能的子模块,也可以是三个相互独立的判断子模块。
实施例3
在上述实施例1和实施例2的基础上,本发明还提供了一种应用于二进制翻译的具体的间接分支指令处理方案,该方案包括:
步骤1,为每一个基本块增加一个缓存数组,这个缓存数组用于缓存间接分支指令的目标地址。优选的,可以通过记录该间接分支指令的目标地址所在基本块对应的结构体的指针来实现记录间接分支指令的目标地址的过程,其中,上述结构体用于存储对应的基本块,但本发明不仅限于此,还可以通过其他可替换的方式来记录间接分支指令的目标地址。
步骤2,在第一次执行间接分支指令时,因为该间接分支所在基本块的缓存数组为空,所以必须返回到翻译模块,根据目标地址查找或者翻译新的基本块。以间接分支指令的目标地址作哈希操作,根据哈希操作的结果把间接分支指令的目标地址或目标地址所在基本块结构体的指针存入当前间接跳转分支所在基本块的缓存数组中,优选的,哈希函数可以是间接分支指令的目标地址的值对缓存数组大小取模,取模的结果为对应存放的缓存数组中相应的位置。优选的,可以增加上述缓存数组的大小,由于使用上述的哈希函数进行存储,所以适当增大数组大小不会增加查找时间,进而来增加命中率。
步骤3,当再次遇到上述的间接分支指令时,在翻译后代码中直接把间接分支指令的目标地址做与上述哈希函数相同的哈希操作,根据哈希操作的结果载入缓存数组中对应的记录项,根据记录项中记录的目标地址或基本块结构体的指针指向的地址与该间接分支指令的目标地址是否相等判断是否命中,如果命中,直接跳转到记录项中记录的基本块首地址或基本块结构体的指针指向的翻译后代码执行,如果未命中,返回到翻译模块,查找或者翻译目标基本块。优选的,如果遇到自修改代码,会使得基本块代码失效,为了在翻译后代码中使得这样的基本块未命中,可以在无效基本块的同时,把基本块的指令首地址设置为0,这样在间接分支指令的目标地址进行比较时就不会命中。
步骤4,对于更新缓存数组中的目标地址或目标地址所在的基本块结构体的指针,同样先把目标地址作哈希操作,根据哈希操作的结果把目标地址或目标地址所在的基本块结构体的指针存入当前间接分支指令所在基本块的缓存数组中供下次查找。优选的,如果基本块的缓存数组中已经存有历史目标地址所在的基本块,可以使用的更新策略包括但不限于以下之一:直接更新策略、先进先出策略(FIFO)、随机策略(Random)或最近最少使用策略(LRU)。
具体来说,如图8所示,在二进制程序翻译过程中,包括如下步骤:
S802,根据源代码指令地址查找判断该基本块的首地址是否已经存在于全局哈希数组中;若存在,直接执行S806,若不存在,执行S804-S806。
S804,翻译该基本块;
S806,把该基本块的首地址或基本块结构体的指针存入上一个基本块(最后一条指令是间接分支指令的基本块)的缓存数组中;
S808,执行该基本块;
S810,当遇到间接分支指令时,加载间接分支指令所在的基本块对应的缓存数组;
S812,判断间接分支指令的目标地址的值和对应的缓存数组中对应位置记录的基本块首地址或基本块结构体指针指向的地址的值是否相等,若相等,跳转到缓存数组中对应位置基本块指向的翻译后代码地址,并执行S808;若不相等,则执行S814。
S814,保存现场,切换上下文,返回S802。
下面结合具体示例进行进一步的说明:
例如,间接分支指令为call *%ecx,所在基本块为B1,基本块B1的缓存数组cache_array的大小为8项,初始值全为NULL。
在第一次执行该间接分支指令时,间接分支指令的目标地址为0x3003d820,也就是ecx寄存器值的内容为0x3003d820,由于间接分支指令所在的基本块B1对应的缓存数组内容为空,因而在后端查找中未命中,则直接返回翻译模块。因为目标地址0x3003d820所对应的基本块B2是第一次翻译,所以在全局哈希数组中查找不到,使得翻译模块执行翻译操作得到新的基本块B2(B2的源代码指令首地址为0x3003d820)。把0x3003d820对8(基本块B1对应的缓存数组的大小为8)取模余0,所以把基本块B2的结构体的指针Ptr存入基本块B1的缓存数组cache_array的第0项。
当第二次执行该间接分支指令时,若此时间接分支指令的目标地址仍然为0x3003d820。在翻译后的代码中,加载间接分支指令所在的基本块B1的缓存数组cache_array,把间接分支指令的目标地址0x3003d820对缓存数组的大小8取模余0,判断0x3003d820和B1的cache_array数组的第0项记录基本块结构体的指针指向的源代码指令地址是否相等,若此时正好相等,直接跳转到基本块B2执行。
当第三次执行该间接分支指令时,若此时间接分支指令的目标地址为0x3003d824,在翻译后的代码中,加载间接分支指令所在的基本块B1的缓存数组cache_array,把间接分支指令的目标地址0x3003d824对缓存数组的大小8取模余4,判断0x3003d824和B1的cache_array数组的第4项记录的基本块结构体的指针指向的源代码指令首地址是否相等,由于B1的缓存数组cache_array的第4项所记录的内容为空,此时显然不等,则保存现场,返回翻译模块翻译新的基本块B3(B3的源代码指令首地址为0x3003d824),把0x3003d824对缓存数组的大小8取模余4,所以把B3结构体的指针存入B1的cache_array数组的第4项。后面遇到次间接分支指令的执行,执行流程以此类推。
从以上的描述中,可以看出,在本发明中,为每个基本块增加与之对应的缓存数组,缓存数组中的记录项中缓存有当前基本块中已执行过的间接分支指令的目标地址,在二进制翻译的过程中执行间接分支指令时,先判断当前执行的间接分支指令的目标地址是否与缓存数组中对应的记录项中记录的目标地址相同,在当前执行的间接分支指令的目标地址与缓存数组中对应的记录项中记录的目标地址相同的情况下,直接跳转到当前执行的间接分支指令的目标地址开始执行代码,不需要进行更多的上下文的切换,解决了二进制翻译的过程中上下文切换的次数过多导致翻译系统效率低的问题,达到了提高二进制翻译的效率的效果。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (11)
1.一种间接分支指令处理方法,其特征在于,包括:
加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,所述缓存数组中的记录项用于记录所述当前基本块中已执行过的间接分支指令的目标地址;判断所述当前执行的间接分支指令的目标地址是否与所述缓存数组中对应的记录项中记录的目标地址相同;
若所述当前执行的间接分支指令的目标地址与所述缓存数组中对应的记录项中记录的目标地址相同,则跳转到所述当前执行的间接分支指令的目标地址,并从所述当前执行的间接分支指令的目标地址开始执行代码。
2.根据权利要求1所述的方法,其特征在于,在判断所述当前执行的间接分支指令的目标地址是否与所述缓存数组中对应的记录项中记录的目标地址相同之后,还包括:
若判断所述当前执行的间接分支指令的目标地址与所述缓存数组中对应的记录项中记录的目标地址不同,则将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中。
3.根据权利要求2所述的方法,其特征在于,将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中的步骤包括:
将所述当前执行的间接分支指令的目标地址对所述缓存数组中的记录项的个数取模,得到余数i;
将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中第i个记录项中。
4.根据权利要求2所述的方法,其特征在于,将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中的步骤包括:
判断所述当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;
若所述当前执行的间接分支指令的目标地址所对应的基本块被翻译,则将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中;
若所述当前执行的间接分支指令的目标地址所对应的基本块未被翻译,则对所述当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块的首地址记录在所述缓存数组中对应的记录项中。
5.根据权利要求4所述的方法,其特征在于,判断所述当前执行的间接分支指令的目标地址所对应的基本块是否被翻译的步骤包括:
判断所述当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;
若相同,则判断出所述当前执行的间接分支指令的目标地址所对应的基本块已被翻译;
若不同,则判断出所述当前执行的间接分支指令的目标地址所对应的基本块未被翻译。
6.根据权利要求1所述的方法,其特征在于,判断所述当前执行的间接分支指令的目标地址是否与所述缓存数组中对应的记录项中记录的目标地址相同的步骤包括:
将所述当前执行的间接分支指令的目标地址对所述缓存数组中的记录项的个数取模,得到余数i;
判断所述当前执行的间接分支指令的目标地址与所述缓存数组中第i个记录项中记录的目标地址是否相同。
7.一种间接分支指令处理装置,其特征在于,包括:
加载单元,用于加载与当前执行的间接分支指令所在的当前基本块对应的缓存数组,其中,所述缓存数组中的记录项用于记录所述当前基本块中已执行过的间接分支指令的目标地址;
判断单元,用于判断所述当前执行的间接分支指令的目标地址是否与所述缓存数组中对应的记录项中记录的目标地址相同;
执行单元,用于在所述判断单元判断当前执行的间接分支指令的目标地址与所述缓存数组中对应的记录项中记录的目标地址相同时,跳转到所述当前执行的间接分支指令的目标地址,并从所述当前执行的间接分支指令的目标地址开始执行代码。
8.根据权利要求7所述的装置,其特征在于,还包括:
记录单元,用于在所述判断单元判断当前执行的间接分支指令的目标地址与所述缓存数组中对应的记录项中记录的目标地址不同时,将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中。
9.根据权利要求8所述的装置,其特征在于,所述记录单元包括:
第一取模模块,将所述当前执行的间接分支指令的目标地址对所述缓存数组中的记录项的个数取模,得到余数i;
第一记录模块,用于将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中第i个记录项中。
10.根据权利要求8所述的装置,其特征在于,所述记录单元包括:
第一判断模块,用于判断所述当前执行的间接分支指令的目标地址所对应的基本块是否被翻译;
第二记录模块,用于在所述判断模块判断所述当前执行的间接分支指令的目标地址所对应的基本块被翻译时,将所述当前执行的间接分支指令的目标地址记录在所述缓存数组中对应的记录项中;
翻译模块,用于在所述判断模块判断所述当前执行的间接分支指令的目标地址所对应的基本块未被翻译时,对所述当前执行的间接分支指令的目标地址所对应的基本块执行二进制翻译,并将经过二进制翻译得到的基本块的首地址记录在所述缓存数组中对应的记录项中。
11.根据权利要求10所述的装置,其特征在于,所述第一判断模块包括:
第一判断子模块,用于判断所述当前执行的间接分支指令的目标地址是否与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同;
第二判断子模块,用于在所述第一判断子模块判断所述当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址相同时,判断出所述当前执行的间接分支指令的目标地址所对应的基本块已被翻译;
第三判断子模块,用于在所述第一判断子模块判断所述当前执行的间接分支指令的目标地址与全局哈希数组中记录的已执行二进制翻译的基本块的首地址不同时,判断出所述当前执行的间接分支指令的目标地址所对应的基本块未被翻译。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210069463.4A CN102662631B (zh) | 2012-03-15 | 2012-03-15 | 间接分支指令处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210069463.4A CN102662631B (zh) | 2012-03-15 | 2012-03-15 | 间接分支指令处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102662631A true CN102662631A (zh) | 2012-09-12 |
CN102662631B CN102662631B (zh) | 2014-09-10 |
Family
ID=46772132
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210069463.4A Active CN102662631B (zh) | 2012-03-15 | 2012-03-15 | 间接分支指令处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102662631B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150196A (zh) * | 2013-02-07 | 2013-06-12 | 浙江大学 | 动态二进制翻译中代码Cache管理方法 |
CN104252334B (zh) * | 2013-06-29 | 2017-07-07 | 华为技术有限公司 | 分支目标地址获取方法和装置 |
CN107153499A (zh) * | 2016-03-04 | 2017-09-12 | 株式会社理光 | 交互式白板设备的语音控制 |
CN108228239A (zh) * | 2016-12-13 | 2018-06-29 | 龙芯中科技术有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452395A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
CN101706734A (zh) * | 2009-11-10 | 2010-05-12 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其系统 |
EP2339757A1 (en) * | 2009-12-28 | 2011-06-29 | Nxp B.V. | Power-reduced preliminary decoded bits in viterbi decoder |
-
2012
- 2012-03-15 CN CN201210069463.4A patent/CN102662631B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452395A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 函数调用和返回的处理方法、二进制翻译方法和系统 |
CN101706734A (zh) * | 2009-11-10 | 2010-05-12 | 中国科学院计算技术研究所 | 二进制翻译中间接跳转指令的翻译方法及其系统 |
EP2339757A1 (en) * | 2009-12-28 | 2011-06-29 | Nxp B.V. | Power-reduced preliminary decoded bits in viterbi decoder |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103150196A (zh) * | 2013-02-07 | 2013-06-12 | 浙江大学 | 动态二进制翻译中代码Cache管理方法 |
CN103150196B (zh) * | 2013-02-07 | 2015-12-23 | 浙江大学 | 动态二进制翻译中代码Cache管理方法 |
CN104252334B (zh) * | 2013-06-29 | 2017-07-07 | 华为技术有限公司 | 分支目标地址获取方法和装置 |
CN107153499A (zh) * | 2016-03-04 | 2017-09-12 | 株式会社理光 | 交互式白板设备的语音控制 |
CN108228239A (zh) * | 2016-12-13 | 2018-06-29 | 龙芯中科技术有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
CN108228239B (zh) * | 2016-12-13 | 2021-04-20 | 龙芯中科技术股份有限公司 | 基于快速模拟器qemu的分支指令抓取方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102662631B (zh) | 2014-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Leis et al. | The adaptive radix tree: ARTful indexing for main-memory databases | |
US7228388B2 (en) | Enabling and disabling cache bypass using predicted cache line usage | |
CN103425600B (zh) | 一种固态盘闪存转换层中的地址映射方法 | |
CN100468400C (zh) | 一种提高搜索信息速度的方法及系统 | |
US4991088A (en) | Method for optimizing utilization of a cache memory | |
CN101375228B (zh) | 具有省电指令高速缓存通路预测器和指令代替方案的微处理器 | |
US8370575B2 (en) | Optimized software cache lookup for SIMD architectures | |
CN100478918C (zh) | 微处理器中分段高速缓存的设计方法及分段高速缓存 | |
US20130042055A1 (en) | Memory system including key-value store | |
CN104794067A (zh) | 堆栈存储的变量值预测 | |
CN105493040A (zh) | 在访问动态类型化阵列对象过程中的尺寸依赖类型 | |
CN103294822B (zh) | 一种基于主动哈希和布隆过滤器的高效缓存方法 | |
CN102662631B (zh) | 间接分支指令处理方法和装置 | |
CN101593131A (zh) | 基于对象池来实现线程操作的方法和设备 | |
CN109983536A (zh) | 响应标签匹配命令的存储电路 | |
US20130297877A1 (en) | Managing buffer memory | |
CN102147798A (zh) | 处理哈希查找冲突问题的方法和装置 | |
US20060059311A1 (en) | Using a cache miss pattern to address a stride prediction table | |
CN101236564A (zh) | 一种海量数据高性能读取显示方法 | |
CN105393210A (zh) | 用于模拟共享存储器结构的存储器单元 | |
CN101390047A (zh) | 数据处理系统和用于预取数据和/或指令的方法 | |
CN100520739C (zh) | 一种快速虚实地址转换装置及其方法 | |
CN103176914A (zh) | 一种低缺失率、低缺失惩罚的缓存方法和装置 | |
CN101847096A (zh) | 包含栈变量函数的优化方法 | |
US8468297B2 (en) | Content addressable memory system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100190 No. 10 South Road, Zhongguancun Academy of Sciences, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |