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

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

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

【技术保护点】
1.一种指令安装方法,其特征在于,包括:根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。

【技术特征摘要】
1.一种指令安装方法,其特征在于,包括:根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令;将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内。2.根据权利要求1所述的方法,其特征在于,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:若所述缓冲区大小不超过固定区域最大值,则从所述内存地址空间中任意选择一个可用的固定区域作为缓冲区。3.根据权利要求1所述的方法,其特征在于,所述根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区包括:若所述缓冲区大小超过固定区域最大值,则从所述内存地址空间中选择连续的多个固定区域作为缓冲区。4.根据权利要求3所述的方法,其特征在于,所述目标跳转指令包括序列间跳转指令,所述将虚拟机指令序列中的目标跳转指令编译为本地指令序列中的区域跳转指令包括:判断所述序列间跳转指令对应的跳转指令地址和跳转目标地址是否具备位于同一固定区域内的条件;若所述序列间跳转指令对应的跳转指令地址和跳转目标地址具备位于同一固定区域内的条件,则将所述序列间跳转指令编译为区域跳转指令。5.根据权利要求1-4任一项所述的方法,其特征在于,所述缓冲区包括多个固定区域,所述将所述本地指令序列安装到所述缓冲区的目标固定区域中,使得所述区域跳转指令的跳转指令地址和跳转目标地址位于同一个固定区域内包括:根据所述本地指令序列的空间占用大小,以及所述区域跳转指令的跳转指令地址和跳转目标地址,从所述缓冲区的多个固定区域中选取空间足够存放所述本地指令序列的目标固定区域;将所述本地指令序列安装到所述缓冲区的目标固定区域中。6.根据权利要求5所述的方法,其特征在于,所述方法还包括:若从所述缓冲区的多个固定区域中无法选取出空间足够存放所述本地指令序列的目标固定区域,则通知所述虚拟机关闭动态编译。7.一种指令安装装置,其特征在于,包括:缓冲区分配模块,用于根据处理器的固定区域最大值和虚拟机中存放本地指令序列的缓冲区大小的比较结果,从内存地址空间中分配至少一个固定区域作为缓冲区;指令编译模块,用于将虚拟机指令序列中的目标跳转指令编译为本...

【专利技术属性】
技术研发人员:傅杰敖琪高翔
申请(专利权)人:龙芯中科技术有限公司
类型:发明
国别省市:北京,11

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

1