[发明专利]禁止已翻译指令序列执行的方法、装置和虚拟机有效
申请号: | 201410032331.3 | 申请日: | 2014-01-23 |
公开(公告)号: | CN103744641A | 公开(公告)日: | 2014-04-23 |
发明(设计)人: | 傅杰;靳国杰;高翔 | 申请(专利权)人: | 龙芯中科技术有限公司 |
主分类号: | G06F9/30 | 分类号: | G06F9/30 |
代理公司: | 北京同立钧成知识产权代理有限公司 11205 | 代理人: | 刘芳 |
地址: | 100095 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 禁止 翻译 指令 序列 执行 方法 装置 虚拟机 | ||
技术领域
本发明涉及计算机技术,尤其涉及一种禁止已翻译指令序列执行的方法、装置和虚拟机。
背景技术
虚拟机(英文:Virtual Machine简称:VM)的核心是执行引擎,包括解释器和编译器,其中编译器通常为即时编译器(英文:Just-in-time Compiler,简称:JIT)。VM JIT在翻译某个方法时,为了尽可能地提升翻译后生成的本地机器指令的质量,通常会基于某些假设(如对象的类型、分支是否可能被执行等)进行深度优化,对于这种基于若干假设的优化,同时生成相应的假设条件监测语句。当某项假设不再成立时,虚拟机需要禁止先前基于该假设翻译生成的本地机器指令序列的执行。
虚拟机禁止已翻译指令序列的执行,一般采用将需要被禁止执行的指令序列的若干条首部指令修改为实现跳转到一个固定处理例程(fix_handler)首地址功能的若干条指令,然后在这个固定处理例程中启动解释执行或者重新翻译等后续动作。在虚拟机修改已翻译指令序列的同时需要保证修改操作的原子性从而保证多线程安全:使得可能正在执行该指令序列的多个线程所执行的要么是修改之前的指令序列,要么是修改完成之后的指令序列,以避免引发执行错误。
指令序列的原子性修改通常要求硬件所提供的最大原子访存位数不小于所需更改的指令序列(即实现跳转到固定处理例程的首地址功能的指令序列)总长度,然而标准的MIPS体系结构,在64位硬件系统中所能提供的最大原子访存长度为8字节,通常小于完成指令修改所需的长度。在保证多线程安全并且满足硬件直接支持的原子性修改操作限制的前提下,现有技术中,虚拟机禁止已翻译指令序列执行,通常采用下述方法:JIT翻译方法时,在生成的本地指令序列的头部为实现远跳转的指令预留足够的存储空间,并向其写入跳转到固定处理例程的首地址的远跳转指令序列;当需要禁止已翻译指令序列的执行时,首先将第一条指令原子性地修改为一条短跳转指令,通过该短跳转指令跳转到之前指令序列头部所预留的存储空间的首地址,然后继续执行先前写入的远跳转指令序列以跳转到固定处理例程的首地址,从而完成禁止已翻译指令序列的执行。
上述方法,通过增加一次额外的短跳转指令满足了硬件直接支持的原子性修改操作的限制,并且由于虚拟机在修改指令序列时,仅存在修改前和修改后两个状态,因此在多线程环境下也是安全的。然而,由于现代处理器对跳转指令的执行通常代价较高,采用上述方法,虚拟机禁止已翻译指令序列执行的效率不高。
发明内容
鉴于此,本发明提供一种禁止已翻译指令序列执行的方法、装置和虚拟机,以提高虚拟机禁止已翻译指令序列执行的效率。
本发明的第一方面提供一种禁止已翻译指令序列执行的方法,包括:
判断已翻译指令序列对应的监测语句中包括的假设条件是否成立;
若所述假设条件不成立,则从所述已翻译指令序列对应的线程控制结构中获取固定处理例程的首地址;
修改所述已翻译指令序列首部的至少一条指令为跳转到所述固定处理例程的首地址的跳转指令序列,以执行所述跳转指令序列禁止所述已翻译指令序列的执行。
进一步地,上述从所述已翻译指令序列对应的线程控制结构中获取固定处理例程的首地址之前,还包括:
在所述线程控制结构中增加一数据域;
将所述固定处理例程的首地址存储在所述数据域中;
上述从所述已翻译指令序列对应的线程控制结构中获取固定处理例程的首地址,包括:
从所述数据域中获取所述固定处理例程的首地址。
进一步地,上述从所述数据域中获取所述固定处理例程的首地址,包括:
获取所述线程控制结构的首地址;
将所述线程控制结构的首地址增加一个固定偏移量得到所述数据域对应的地址,所述固定偏移量为所述数据域在线程控制结构中对应的偏移量;
根据所述数据域对应的地址获取所述固定处理例程的首地址。
进一步地,上述跳转指令序列,包括加载指令和跳转指令,其中所述加载指令用于加载所述固定处理例程的首地址到临时寄存器,所述跳转指令用于跳转到所述临时寄存器中保存的固定处理例程的首地址。
本发明的第二方面提供一种禁止已翻译指令序列执行的装置,包括:
监测模块,用于判断已翻译指令序列对应的监测语句中包括的假设条件是否成立;
获取模块,用于若所述假设条件不成立,则从所述已翻译指令序列对应的线程控制结构中获取固定处理例程的首地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术有限公司,未经龙芯中科技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410032331.3/2.html,转载请声明来源钻瓜专利网。