[發(fā)明專利]禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機有效
| 申請?zhí)枺?/td> | 201410032331.3 | 申請日: | 2014-01-23 |
| 公開(公告)號: | CN103744641A | 公開(公告)日: | 2014-04-23 |
| 發(fā)明(設(shè)計)人: | 傅杰;靳國杰;高翔 | 申請(專利權(quán))人: | 龍芯中科技術(shù)有限公司 |
| 主分類號: | G06F9/30 | 分類號: | G06F9/30 |
| 代理公司: | 北京同立鈞成知識產(chǎn)權(quán)代理有限公司 11205 | 代理人: | 劉芳 |
| 地址: | 100095 北京市海淀*** | 國省代碼: | 北京;11 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 禁止 翻譯 指令 序列 執(zhí)行 方法 裝置 虛擬機 | ||
技術(shù)領(lǐng)域
本發(fā)明涉及計算機技術(shù),尤其涉及一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機。
背景技術(shù)
虛擬機(英文:Virtual?Machine簡稱:VM)的核心是執(zhí)行引擎,包括解釋器和編譯器,其中編譯器通常為即時編譯器(英文:Just-in-time?Compiler,簡稱:JIT)。VM?JIT在翻譯某個方法時,為了盡可能地提升翻譯后生成的本地機器指令的質(zhì)量,通常會基于某些假設(shè)(如對象的類型、分支是否可能被執(zhí)行等)進行深度優(yōu)化,對于這種基于若干假設(shè)的優(yōu)化,同時生成相應(yīng)的假設(shè)條件監(jiān)測語句。當某項假設(shè)不再成立時,虛擬機需要禁止先前基于該假設(shè)翻譯生成的本地機器指令序列的執(zhí)行。
虛擬機禁止已翻譯指令序列的執(zhí)行,一般采用將需要被禁止執(zhí)行的指令序列的若干條首部指令修改為實現(xiàn)跳轉(zhuǎn)到一個固定處理例程(fix_handler)首地址功能的若干條指令,然后在這個固定處理例程中啟動解釋執(zhí)行或者重新翻譯等后續(xù)動作。在虛擬機修改已翻譯指令序列的同時需要保證修改操作的原子性從而保證多線程安全:使得可能正在執(zhí)行該指令序列的多個線程所執(zhí)行的要么是修改之前的指令序列,要么是修改完成之后的指令序列,以避免引發(fā)執(zhí)行錯誤。
指令序列的原子性修改通常要求硬件所提供的最大原子訪存位數(shù)不小于所需更改的指令序列(即實現(xiàn)跳轉(zhuǎn)到固定處理例程的首地址功能的指令序列)總長度,然而標準的MIPS體系結(jié)構(gòu),在64位硬件系統(tǒng)中所能提供的最大原子訪存長度為8字節(jié),通常小于完成指令修改所需的長度。在保證多線程安全并且滿足硬件直接支持的原子性修改操作限制的前提下,現(xiàn)有技術(shù)中,虛擬機禁止已翻譯指令序列執(zhí)行,通常采用下述方法:JIT翻譯方法時,在生成的本地指令序列的頭部為實現(xiàn)遠跳轉(zhuǎn)的指令預(yù)留足夠的存儲空間,并向其寫入跳轉(zhuǎn)到固定處理例程的首地址的遠跳轉(zhuǎn)指令序列;當需要禁止已翻譯指令序列的執(zhí)行時,首先將第一條指令原子性地修改為一條短跳轉(zhuǎn)指令,通過該短跳轉(zhuǎn)指令跳轉(zhuǎn)到之前指令序列頭部所預(yù)留的存儲空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠跳轉(zhuǎn)指令序列以跳轉(zhuǎn)到固定處理例程的首地址,從而完成禁止已翻譯指令序列的執(zhí)行。
上述方法,通過增加一次額外的短跳轉(zhuǎn)指令滿足了硬件直接支持的原子性修改操作的限制,并且由于虛擬機在修改指令序列時,僅存在修改前和修改后兩個狀態(tài),因此在多線程環(huán)境下也是安全的。然而,由于現(xiàn)代處理器對跳轉(zhuǎn)指令的執(zhí)行通常代價較高,采用上述方法,虛擬機禁止已翻譯指令序列執(zhí)行的效率不高。
發(fā)明內(nèi)容
鑒于此,本發(fā)明提供一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機,以提高虛擬機禁止已翻譯指令序列執(zhí)行的效率。
本發(fā)明的第一方面提供一種禁止已翻譯指令序列執(zhí)行的方法,包括:
判斷已翻譯指令序列對應(yīng)的監(jiān)測語句中包括的假設(shè)條件是否成立;
若所述假設(shè)條件不成立,則從所述已翻譯指令序列對應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
修改所述已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到所述固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行所述跳轉(zhuǎn)指令序列禁止所述已翻譯指令序列的執(zhí)行。
進一步地,上述從所述已翻譯指令序列對應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,還包括:
在所述線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;
將所述固定處理例程的首地址存儲在所述數(shù)據(jù)域中;
上述從所述已翻譯指令序列對應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,包括:
從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址。
進一步地,上述從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址,包括:
獲取所述線程控制結(jié)構(gòu)的首地址;
將所述線程控制結(jié)構(gòu)的首地址增加一個固定偏移量得到所述數(shù)據(jù)域?qū)?yīng)的地址,所述固定偏移量為所述數(shù)據(jù)域在線程控制結(jié)構(gòu)中對應(yīng)的偏移量;
根據(jù)所述數(shù)據(jù)域?qū)?yīng)的地址獲取所述固定處理例程的首地址。
進一步地,上述跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時寄存器,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述臨時寄存器中保存的固定處理例程的首地址。
本發(fā)明的第二方面提供一種禁止已翻譯指令序列執(zhí)行的裝置,包括:
監(jiān)測模塊,用于判斷已翻譯指令序列對應(yīng)的監(jiān)測語句中包括的假設(shè)條件是否成立;
獲取模塊,用于若所述假設(shè)條件不成立,則從所述已翻譯指令序列對應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于龍芯中科技術(shù)有限公司,未經(jīng)龍芯中科技術(shù)有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410032331.3/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





