一种指令安装方法、装置、电子设备及存储介质转让专利

申请号 : CN201910234150.1

文献号 : CN109918132B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 傅杰敖琪高翔

申请人 : 龙芯中科技术股份有限公司

摘要 :

本发明实施例提供了一种指令安装方法和装置,所述方法包括:根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区,将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令,将本地指令序列安装到所述缓冲区的目标固定区域中,实现了以固定区域为单位对缓冲区的分配进行控制,进而可以控制本地指令序列的编译与安装,确保区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内,避免了生成区域跳转指令带来的安全性风险,实现自动编译生成区域跳转指令,继而提高了编译生成跳转指令的质量,优化了虚拟机上跳转指令的执行性能。

权利要求 :

1.一种指令安装方法,其特征在于,包括:根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;

将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;

将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。

2.根据权利要求1所述的方法,其特征在于,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:

若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。

3.根据权利要求1所述的方法,其特征在于,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:

若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。

4.根据权利要求3所述的方法,其特征在于,所述目标跳转指令包括序列间跳转指令,所述将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令包括:判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;

若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。

5.根据权利要求1‑4任一项所述的方法,其特征在于,所述缓冲区包括多个固定区域,所述将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内包括:根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的目标固定区域;

将所述本地指令序列安装到所述缓冲区的目标固定区域中。

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。

7.一种指令安装装置,其特征在于,包括:缓冲区分配模块,用于根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;

指令编译模块,用于将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;

序列安装模块,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。

8.根据权利要求7所述的装置,其特征在于,所述缓冲区分配模块包括:第一选择子模块,用于若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。

9.根据权利要求7所述的装置,其特征在于,所述缓冲区分配模块包括:第二选择子模块,用于若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。

10.根据权利要求9所述的装置,其特征在于,所述目标跳转指令包括序列间跳转指令,所述指令编译模块包括:

判断子模块,用于判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;

编译子模块,用于若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。

11.根据权利要求7‑10任一项所述的装置,其特征在于,所述缓冲区包括多个固定区域,所述序列安装模块包括:

区域选择子模块,用于根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的目标固定区域;

安装子模块,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中。

12.根据权利要求11所述的装置,其特征在于,所述装置还包括:通知模块,用于若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。

13.一种电子设备,其特征在于,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;

将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;

将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。

14.一种可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如方法权利要求1‑6中一个或多个所述的指令安装方法。

说明书 :

一种指令安装方法、装置、电子设备及存储介质

技术领域

[0001] 本发明涉及计算机技术领域,特别是涉及一种指令安装方法、一种指令安装装置、一种电子设备以及一种可读存储介质。

背景技术

[0002] 虚拟机(VM,Virtual Machine)主要通过软件(或者辅以少量硬件支持)的方法来虚拟出一台计算机,并且这台虚拟的计算机通常还支持一套对应的指令集,称为虚拟机指
令集。虚拟机依托于本地的物理机(Host Machine),通过其执行引擎对给定的虚拟机指令
序列(目标程序)在本地机器上模拟执行。
[0003] 虚拟机的执行引擎可以由解释器来实现。由于解释器具有可移植性高、实现代价低和内存占用少等特点,大多数虚拟机的执行引擎都包含解释器。解释器以一条虚拟机指
令为单位进行取指令、指令分派、取操作数和执行。但单纯的解释执行性能低下,因此虚拟
机中引入动态编译系统来提高其性能。
[0004] 编译器是动态编译系统的核心。编译器以一组连续的虚拟机指令序列(基本块、函数或方法)为单位整体编译成本地CPU指令序列,称为本地方法,然后由硬件直接执行编译
后的本地方法。编译器由于消除了重复的取指令和指令分派等过程,同时又在编译时进行
大量卓有成效的优化,因此其性能往往是解释器的10倍以上。由于编译器是在程序运行期
间进行动态编译的,故又被称为即时编译器(JIT,Just‑in‑time Compiler)。动态编译是决
定虚拟机性能的关键。
[0005] 和传统C/C++等静态编译不同,动态编译行为发生在程序运行期间,会引入额外的编译开销。研究表明,程序运行的时间分布具有明显的局部性特征,即程序执行的大部分时
间集中在小部分代码上。为了尽可能降低由动态编译产生的额外开销,现代虚拟机的动态
编译系统通常依据“选择性编译”(selective compilation)理论进行设计和实现。其核心
思想是:仅编译程序中频繁执行的部分(称为热点),未被编译部分则解释执行。
[0006] 方法编译后将生成对应的本地方法。随后,本地方法将被拷贝到代码缓冲区中等待被执行。代码缓冲区是虚拟机中用于存放本地方法的专用存储区域。本地方法拷贝到代
码缓冲区的过程又称为本地方法的安装。
[0007] 经申请人研究发现,动态编译过程中,跳转指令的生成是影响虚拟机性能的重要因素。充分利用硬件支持的跳转指令是编译生成高效跳转指令的前提。通常,硬件直接支持
的跳转指令可分为如下三类:
[0008] 第一,PC相对跳转(PC‑relative branch),该类指令的一般模式为:branch‑opcode condition offset,其典型代表为MIPS(Microprocessor without interlocked 
piped stages,无内部互锁流水级的微处理器)架构的beq/bne指令,以及x86的jcc类指令。
这类指令的特点是当且仅当条件满足时才进行跳转,并且跳转的目标地址是相对于当前跳
转指令(或当前跳转指令的下一条指令)的偏移。例如,在MIPS机器上,beq s0,s1,32表示当
且仅当寄存器s0和寄存器s1的值相等时才进行跳转,跳转的目标地址为该条指令的下一条
指令地址加上偏移量32。不同架构PC相对跳转的偏移量offset的编码范围差异较大。例如,
x86机器支持8位、16位和32位三种长度的offset编码,而MIPS仅支持16位的offset编码长
度。Offset的编码长度越短,PC相对跳转的范围也越窄,该指令的可用范围也越小。
[0009] 由于PC相对跳转类指令直接支持条件判断并且执行效率较高,故在跳转范围可达的前提下,编译器优先考虑利用PC相对跳转指令实现程序的条件跳转语义。而当跳转范围
不可达时,编译器也可以采用其它类型的指令等价实现条件跳转语义,但通常执行代价更
高。
[0010] 第二,PC区域跳转(PC‑region branch),该类指令的一般模式为:branch‑opcode position‑in‑region,这类指令最经典的代表是MIPS架构的j指令。这种指令的特点是跳转
是无条件的,但跳转指令的指令地址和跳转的目标地址的高k位必须要相同。
[0011] 由于PC区域跳转指令无需进行分支预测,故其执行效率高。但受限于地址空间的限制,该类指令目前仅适用于指令地址空间固定(如内核和引导程序等)的极少数场景。几
乎所有用户态程序的指令地址空间并不固定,故编译器很难生成该类指令,gcc等主流编译
器产品中均不支持该指令。
[0012] 第三,PC绝对跳转,该类指令的一般模式为:jump‑opcode target,其典型代表为MIPS架构的jr/jalr指令和x86的jmp类指令。这种指令的跳转也是无条件的,并且可跳转到
任意目标地址。这类指令又可进一步细分为跳转到立即数目标地址,和跳转到寄存器目标
地址。其中跳转到寄存器目标地址,具有高度的通用性和灵活性,应用也最为广泛。但由于
此类指令分支预测困难,故其执行开销通常比PC相对跳转和PC区域跳转大。故如有可能,主
流的编译器都尽量避免生成该类指令。
[0013] 综上所述,编译器优先生成PC相对跳转指令,其次是PC绝对跳转。受跳转的地址空间限制,编译器生成PC区域跳转指令非常困难,至今在产品级编译器中均不支持该类指令。
但由于PC区域跳转指令的执行效率高,编译器支持的缺乏导致硬件性能并未充分发挥,从
而影响跳转指令的性能。

发明内容

[0014] 本发明实施例所要解决的技术问题是提供一种指令安装方法、装置、电子设备及可读存储介质,以便解决受限于跳转的地址空间的限制无法自动编译区域跳转指令的问
题。
[0015] 为了解决上述问题,本发明提供了一种指令安装方法,包括:
[0016] 根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;
[0017] 将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;
[0018] 将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0019] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0020] 若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。
[0021] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0022] 若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。
[0023] 可选地,所述目标跳转指令包括序列间跳转指令,所述将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令包括:
[0024] 判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;
[0025] 若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0026] 可选地,所述缓冲区包括多个固定区域,所述将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一
个固定区域内包括:
[0027] 根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的
目标固定区域;
[0028] 将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0029] 可选地,所述方法还包括:
[0030] 若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0031] 相应的,本发明还提供了一种指令安装装置,包括:
[0032] 缓冲区分配模块,用于根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;
[0033] 指令编译模块,用于将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;
[0034] 序列安装模块,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0035] 可选地,所述缓冲区分配模块包括:
[0036] 第一选择子模块,用于若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。
[0037] 可选地,所述缓冲区分配模块包括:
[0038] 第二选择子模块,用于若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。
[0039] 可选地,所述目标跳转指令包括序列间跳转指令,所述指令编译模块包括:
[0040] 判断子模块,用于判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;
[0041] 编译子模块,用于若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0042] 可选地,所述缓冲区包括多个固定区域,所述序列安装模块包括:
[0043] 区域选择子模块,用于根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存
放所述本地指令序列的目标固定区域;
[0044] 安装子模块,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0045] 可选地,所述装置还包括:
[0046] 通知模块,用于若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0047] 相应的,本发明还提供了一种电子设备,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理
器执行所述一个或者一个以上程序包含用于进行以下操作的指令:
[0048] 根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;
[0049] 将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;
[0050] 将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0051] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0052] 若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。
[0053] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0054] 若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。
[0055] 可选地,所述目标跳转指令包括序列间跳转指令,所述将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令包括:
[0056] 判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;
[0057] 若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0058] 可选地,所述缓冲区包括多个固定区域,所述将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一
个固定区域内包括:
[0059] 根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的
目标固定区域;
[0060] 将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0061] 可选地,所述方法还包括:
[0062] 若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0063] 相应的,本发明还提供了一种可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述指令安装方法。
[0064] 依据本发明实施例,通过根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区,将
虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令,将本地指令序
列安装到所述缓冲区的目标固定区域中,实现了以固定区域为单位对缓冲区的分配进行控
制,进而可以控制本地指令序列的编译与安装,确保区域跳转指令的跳转指令地址和跳转
目标地址位于同一个固定区域内,避免了生成区域跳转指令带来的安全性风险,实现自动
编译生成区域跳转指令,继而提高了编译生成跳转指令的质量,优化了虚拟机上跳转指令
的执行性能。

附图说明

[0065] 图1示出了本发明实施例一的一种指令安装方法的步骤流程图;
[0066] 图2示出了本发明实施例二的一种指令安装方法的步骤流程图;
[0067] 图3示出了本发明实施例三的一种指令安装装置实施例的结构框图;
[0068] 图4示出了根据一示例性实施例示出的一种用于指令安装的电子设备的结构框图。

具体实施方式

[0069] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0070] 参照图1,示出了本发明实施例一的一种指令安装方法的步骤流程图,具体可以包括如下步骤:
[0071] 步骤101,根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区。
[0072] 在本发明实施例中,虚拟机上执行的指令序列,记为虚拟机指令序列,虚拟机指令序列编译成物理机上的处理器可执行的指令序列,记为本地指令序列。虚拟机在将虚拟机
指令序列动态编译成本地指令序列后,本地指令序列将被拷贝到缓冲区中等待被执行。一
般该用于存放本地指令序列的缓冲区在虚拟机启动时随机分配内存地址空间得到,很难保
证跳转指令的指令地址和跳转的目标地址的高k位是相同的,因此需要对缓冲区的分配方
式进行控制。
[0073] 一系列连续的指令地址空间,并且满足该区域内所有指令地址的高k位相同,称为固定区域。指令地址的总长度减去k的值为固定区域的可编码长度,可编码长度越大,固定
区域理论上的空间最大值也越大。具体的k值由对应处理器的架构的具体实现决定。例如,
MIPS的64位架构上k=36,可编码长度为28位,固定区域最大值为256M。而在MIPS的32位架
构上k=4,可编码长度为28位,固定区域最大值为256M。也就是说,处理器的固定区域最大
值是事先由硬件确定的,而虚拟机存放本地指令序列所需的缓冲区大小也是事先确定的。
[0074] 在本发明实施例中,在虚拟机分配缓冲区时,根据虚拟机存放本地指令序列所需的缓冲区大小和处理器的固定区域最大值的比较结果,决定缓冲区分配的控制策略。具体
实现时包括多种情况,例如,若缓冲区大小不超过固定区域最大值,则从内存地址空间中任
意选择一个可用的固定区域作为缓冲区即可,或者若缓冲区大小超过固定区域最大值,则
从内存地址空间中选择多个固定区域作为缓冲区,或者其他任意适用的分配方式,本发明
实施例对此不做限制。
[0075] 值得说明的是,缓冲区大小不一定是固定区域最大值的整数倍,在从内存地址空间中分配一个或多个固定区域时,可以根据缓冲区大小决定实际分配的大小,例如,缓冲区
大小为固定区域最大值的2.5倍时,先分配两个完整的固定区域,再将第三个固定区域中的
一半区域作为一个固定区域分配,最后得到三个固定区域组成的缓冲区,其中,两个固定区
域一样大,一个固定区域仅为完整的固定区域的一半。
[0076] 步骤102,将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令。
[0077] 在本发明实施例中,虚拟机指令序列中的跳转指令通常优先生成相对跳转指令,其次生成绝对跳转指令,但是某些条件下,无法生成相对跳转指令,而绝对跳转指令的执行
开销通常比相对跳转指令和区域跳转指令都大。因此,将虚拟机指令序列中的目标跳转指
令编译为本地指令序列中的区域跳转指令,其中,目标跳转指令是指虚拟机指令序列中全
部或部分跳转指令。
[0078] 在本发明实施例中,由于以固定区域为单位对缓冲区的分配进行了控制,因此可以使更多的目标跳转指令适用于生成区域跳转指令。缓冲区分配的不同决定跳转指令编译
的控制策略,若缓冲区只包含一个固定区域,则指令序列内的跳转和指令序列间的跳转均
适用生成区域跳转指令,若缓冲区包含多个固定区域,则指令序列内的跳转适用生成区域
跳转指令,而指令序列间的跳转需要进行额外的判断,判断序列间跳转指令对应的跳转指
令地址和跳转目标地址是否具备位于同一固定区域内的条件;若序列间跳转指令对应的跳
转指令地址和跳转目标地址具备位于同一固定区域内的条件,则序列间跳转指令适用生成
区域跳转指令,否则不适用生成区域跳转指令。
[0079] 步骤103,将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0080] 在本发明实施例中,由于本地指令序列中包括区域跳转指令,因此需要将本地指令序列安装到缓冲区的同一个固定区域内,即目标固定区域,并且使得区域跳转指令的跳
转指令地址和跳转目标地址位于同一个固定区域内。
[0081] 具体来说,缓冲区分配的不同决定了指令序列安装的控制策略,例如,若缓冲区只包含一个固定区域,那么只需缓冲区有足够的空间安装本地指令序列,那么区域跳转指令
的跳转指令地址和跳转目标地址就会位于这一个固定区域内,不会不满足区域跳转指令的
执行条件,因此本地指令序列在满足安装后不超过缓冲区范围的前提下可自由安装。若缓
冲区包含多个固定区域,则需要选择一个可用的目标固定区域,即选择一个有足够的空间
安装本地指令序列的固定区域,然后将本地指令序列安装到该目标固定区域即可。具体可
以任意适用的安装方式,本发明实施例对此不做限制。
[0082] 依据本发明实施例,通过根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区,将
虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令,将本地指令序
列安装到所述缓冲区的目标固定区域中,实现了以固定区域为单位对缓冲区的分配进行控
制,进而可以控制本地指令序列的编译与安装,确保区域跳转指令的跳转指令地址和跳转
目标地址位于同一个固定区域内,避免了生成区域跳转指令带来的安全性风险,实现自动
编译生成区域跳转指令,继而提高了编译生成跳转指令的质量,优化了虚拟机上跳转指令
的执行性能。
[0083] 参照图2,示出了本发明实施例二的一种指令安装方法的步骤流程图,具体可以包括如下步骤:
[0084] 步骤201,根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区。
[0085] 在本发明实施例中,可选地,根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区
的一种实现方式可以包括:若所述缓冲区大小不超过固定区域最大值,则从所述内存地址
空间中任意选择一个可用的固定区域作为缓冲区。
[0086] 例如,MIPS兼容的处理器所支持的固定区域最大值为X,而Java虚拟机实际运行所需缓冲区大小通常为Y,由于缓冲区大小小于固定区域最大值,故将缓冲区分配在起始的X
内存地址空间范围内即可,此时缓冲区全部位于同一个固定区域内,缓冲区中任意一条区
域跳转指令可跳转至缓冲区内的任意位置。
[0087] 在本发明实施例中,可选地,根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区
的另一种实现方式可以包括:若所述缓冲区大小超过固定区域最大值,则从所述内存地址
空间中选择连续的多个固定区域作为缓冲区。
[0088] 选择多个固定区域作为缓冲区,优选为选择连续的多个固定区域,即相邻的固定区域,这样可以使程序的局部性更优,进而提高执行效率。
[0089] 步骤202,判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件。
[0090] 在本发明实施例中,目标跳转指令包括序列间跳转指令,为了避免序列间跳转指令出现跳转指令地址和跳转目标地址无法位于同一固定区域内的情况,在编译过程中,判
断序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的
条件,例如,计算跳转指令地址和跳转目标地址之间的差值,若差值小于固定区域的大小,
则序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,
或者其他任意适用的条件,本发明实施例对此不做限制。
[0091] 步骤203,若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0092] 在本发明实施例中,若序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,即该序列间跳转指令经过了筛选,可以编译为区域跳转指令,
这样就可以在安装之前,预先将一部分无法使得跳转指令地址和跳转目标地址位于同一固
定区域内的跳转指令剔除,将剔除的这部分跳转指令生成为其他类型的跳转指令,避免后
续因无法安装而重新编译的麻烦,减少不必要的编译所带来的无用开销。
[0093] 步骤204,根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指
令序列的目标固定区域。
[0094] 在本发明实施例中,缓冲区包括多个固定区域时,需要根据本地指令序列的空间占用大小,以及区域跳转指令的跳转指令地址和跳转目标地址,从缓冲区的多个固定区域
中选取空间足够存放本地指令序列的目标固定区域。
[0095] 选择目标固定区域需要同时满足两个条件,即目标固定区域中可用的空间大于本地指令序列的空间占用大小,以及区域跳转指令的跳转指令地址和跳转目标地址可以同时
位于该目标固定区域内。
[0096] 实际应用时,为了确保本地指令序列安装后,尤其是对序列间跳转指令编译的区域跳转指令,使得区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内,
可以设置要求固定区域中可用的空间超过本地指令序列的空间占用大小的N倍,才被选择
为目标固定区域,或者其他任意适用的条件,本发明实施例对此不做限制。
[0097] 步骤205,若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0098] 在本发明实施例中,若从缓冲区的多个固定区域中无法选取出空间足够存放本地指令序列的目标固定区域,则不执行步骤204,改为通知虚拟机缓冲区空间不足,关闭动态
编译功能。
[0099] 步骤206,将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0100] 在本发明实施例中,依据本地指令序列生成的先后顺序在缓冲区的目标固定区域中连续安装,直至目标固定区域的空间不足为止。
[0101] 依据本发明实施例,通过根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区,将
虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令,将本地指令序
列安装到所述缓冲区的目标固定区域中,实现了以固定区域为单位对缓冲区的分配进行控
制,进而可以控制本地指令序列的编译与安装,确保区域跳转指令的跳转指令地址和跳转
目标地址位于同一个固定区域内,避免了生成区域跳转指令带来的安全性风险,实现自动
编译生成区域跳转指令,继而提高了编译生成跳转指令的质量,优化了虚拟机上跳转指令
的执行性能。
[0102] 进一步,通过判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件,预先将一部分无法使得跳转指令地址和跳转目标地址位
于同一固定区域内的跳转指令剔除,将剔除的这部分跳转指令生成为其他类型的跳转指
令,避免后续因无法安装而重新编译的麻烦,减少不必要的编译所带来的无用开销。
[0103] 需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依
据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该
知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施
例所必须的。
[0104] 参照图3,示出了本发明实施例三的一种指令安装装置实施例的结构框图,具体可以包括如下模块:
[0105] 缓冲区分配模块301,用于根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;
[0106] 指令编译模块302,用于将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;
[0107] 序列安装模块303,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0108] 在本发明实施例中,可选地,所述缓冲区分配模块包括:
[0109] 第一选择子模块,用于若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。
[0110] 在本发明实施例中,可选地,所述缓冲区分配模块包括:
[0111] 第二选择子模块,用于若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。
[0112] 在本发明实施例中,可选地,所述目标跳转指令包括序列间跳转指令,所述指令编译模块包括:
[0113] 判断子模块,用于判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;
[0114] 编译子模块,用于若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0115] 在本发明实施例中,可选地,所述缓冲区包括多个固定区域,所述序列安装模块包括:
[0116] 区域选择子模块,用于根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存
放所述本地指令序列的目标固定区域;
[0117] 安装子模块,用于将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0118] 在本发明实施例中,可选地,所述装置还包括:
[0119] 通知模块,用于若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0120] 依据本发明实施例,通过根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区,将
虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令,将本地指令序
列安装到所述缓冲区的目标固定区域中,实现了以固定区域为单位对缓冲区的分配进行控
制,进而可以控制本地指令序列的编译与安装,确保区域跳转指令的跳转指令地址和跳转
目标地址位于同一个固定区域内,避免了生成区域跳转指令带来的安全性风险,实现自动
编译生成区域跳转指令,继而提高了编译生成跳转指令的质量,优化了虚拟机上跳转指令
的执行性能。
[0121] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0122] 图4是根据一示例性实施例示出的一种用于指令安装的电子设备700的结构框图。例如,电子设备700可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平
板设备,医疗设备,健身设备,个人数字助理等。
[0123] 参照图4,电子设备700可以包括以下一个或多个组件:处理组件702,存储器704,电源组件706,多媒体组件708,音频组件710,输入/输出(I/O)的接口712,传感器组件714,
以及通信组件716。
[0124] 处理组件702通常控制电子设备700的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件702可以包括一个或多个处理器720来执
行指令,以完成上述的方法的全部或部分步骤。此外,处理组件702可以包括一个或多个模
块,便于处理组件702和其他组件之间的交互。例如,处理部件702可以包括多媒体模块,以
方便多媒体组件708和处理组件702之间的交互。
[0125] 存储器704被配置为存储各种类型的数据以支持在设备700的操作。这些数据的示例包括用于在电子设备700上操作的任何应用程序或方法的指令,联系人数据,电话簿数
据,消息,图片,视频等。存储器704可以由任何类型的易失性或非易失性存储设备或者它们
的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除
可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪
存储器,磁盘或光盘。
[0126] 电力组件704为电子设备700的各种组件提供电力。电力组件704可以包括电源管理系统,一个或多个电源,及其他与为电子设备700生成、管理和分配电力相关联的组件。
[0127] 多媒体组件708包括在所述电子设备700和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面
板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸
传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动
动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,
多媒体组件708包括一个前置摄像头和/或后置摄像头。当电子设备700处于操作模式,如拍
摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置
摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
[0128] 音频组件710被配置为输出和/或输入音频信号。例如,音频组件710包括一个麦克风(MIC),当电子设备700处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风
被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器704或经由通
信组件716发送。在一些实施例中,音频组件710还包括一个扬声器,用于输出音频信号。
[0129] I/O接口712为处理组件702和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁
定按钮。
[0130] 传感器组件714包括一个或多个传感器,用于为电子设备700提供各个方面的状态评估。例如,传感器组件714可以检测到设备700的打开/关闭状态,组件的相对定位,例如所
述组件为电子设备700的显示器和小键盘,传感器组件714还可以检测电子设备700或电子
设备700一个组件的位置改变,用户与电子设备700接触的存在或不存在,电子设备700方位
或加速/减速和电子设备700的温度变化。传感器组件714可以包括接近传感器,被配置用来
在没有任何的物理接触时检测附近物体的存在。传感器组件714还可以包括光传感器,如
CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件714还可以
包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
[0131] 通信组件716被配置为便于电子设备700和其他设备之间有线或无线方式的通信。电子设备700可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示
例性实施例中,通信部件714经由广播信道接收来自外部广播管理系统的广播信号或广播
相关信息。在一个示例性实施例中,所述通信部件714还包括近场通信(NFC)模块,以促进短
程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带
(UWB)技术,蓝牙(BT)技术和其他技术来实现。
[0132] 在示例性实施例中,电子设备700可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列
(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
[0133] 在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器704,上述指令可由电子设备700的处理器720执行以完成上述方法。例
如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁带、软
盘和光数据存储设备等。
[0134] 一种非临时性计算机可读存储介质,当所述存储介质中的指令由终端的处理器执行时,使得终端能够执行一种指令安装方法,所述方法包括:
[0135] 根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;
[0136] 将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;
[0137] 将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。
[0138] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0139] 若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。
[0140] 可选地,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:
[0141] 若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。
[0142] 可选地,所述目标跳转指令包括序列间跳转指令,所述将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令包括:
[0143] 判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;
[0144] 若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。
[0145] 可选地,所述缓冲区包括多个固定区域,所述将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一
个固定区域内包括:
[0146] 根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的
目标固定区域;
[0147] 将所述本地指令序列安装到所述缓冲区的目标固定区域中。
[0148] 可选地,所述方法还包括:
[0149] 若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。
[0150] 本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0151] 本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和
硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可
用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上
实施的计算机程序产品的形式。
[0152] 本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图
中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些
计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设
备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执
行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中
指定的功能的装置。
[0153] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包
括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方
框或多个方框中指定的功能。
[0154] 这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在
计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程
和/或方框图一个方框或多个方框中指定的功能的步骤。
[0155] 尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为
包括优选实施例以及落入本发明实施例范围的所有变更和修改。
[0156] 最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作
之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意
在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包
括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品
或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要
素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
[0157] 以上对本发明所提供的一种指令安装方法、一种指令安装装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用
于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的
思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为
对本发明的限制。