欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬的制造方法

文檔序號(hào):6536661閱讀:144來(lái)源:國(guó)知局
禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬的制造方法
【專利摘要】本發(fā)明提供一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機(jī),包括:判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;若假設(shè)條件不成立,則從已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;修改已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行跳轉(zhuǎn)指令序列禁止已翻譯指令序列的執(zhí)行。本發(fā)明,通過(guò)修改已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程的首地址的跳轉(zhuǎn)指令序列,實(shí)現(xiàn)了一次跳轉(zhuǎn)就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時(shí)的處理效率。
【專利說(shuō)明】禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機(jī)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù),尤其涉及一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機(jī)。
【背景技術(shù)】
[0002]虛擬機(jī)(英文:Virtual Machine簡(jiǎn)稱:VM)的核心是執(zhí)行引擎,包括解釋器和編譯器,其中編譯器通常為即時(shí)編譯器(英文Just-1n-time Compiler,簡(jiǎn)稱:JIT)。VM JIT在翻譯某個(gè)方法時(shí),為了盡可能地提升翻譯后生成的本地機(jī)器指令的質(zhì)量,通常會(huì)基于某些假設(shè)(如對(duì)象的類型、分支是否可能被執(zhí)行等)進(jìn)行深度優(yōu)化,對(duì)于這種基于若干假設(shè)的優(yōu)化,同時(shí)生成相應(yīng)的假設(shè)條件監(jiān)測(cè)語(yǔ)句。當(dāng)某項(xiàng)假設(shè)不再成立時(shí),虛擬機(jī)需要禁止先前基于該假設(shè)翻譯生成的本地機(jī)器指令序列的執(zhí)行。
[0003]虛擬機(jī)禁止已翻譯指令序列的執(zhí)行,一般采用將需要被禁止執(zhí)行的指令序列的若干條首部指令修改為實(shí)現(xiàn)跳轉(zhuǎn)到一個(gè)固定處理例程(fix_handler)首地址功能的若干條指令,然后在這個(gè)固定處理例程中啟動(dòng)解釋執(zhí)行或者重新翻譯等后續(xù)動(dòng)作。在虛擬機(jī)修改已翻譯指令序列的同時(shí)需要保證修改操作的原子性從而保證多線程安全:使得可能正在執(zhí)行該指令序列的多個(gè)線程所執(zhí)行的要么是修改之前的指令序列,要么是修改完成之后的指令序列,以避免引發(fā)執(zhí)行錯(cuò)誤。
[0004]指令序列的原子性修改通常要求硬件所提供的最大原子訪存位數(shù)不小于所需更改的指令序列(即實(shí)現(xiàn)跳轉(zhuǎn)到固定處理例程的首地址功能的指令序列)總長(zhǎng)度,然而標(biāo)準(zhǔn)的MIPS體系結(jié)構(gòu),在64位硬件系統(tǒng)中所能提供的最大原子訪存長(zhǎng)度為8字節(jié),通常小于完成指令修改所需的長(zhǎng)度。在保證多線程安全并且滿足硬件直接支持的原子性修改操作限制的前提下,現(xiàn)有技術(shù)中,虛擬機(jī)禁止已翻譯指令序列執(zhí)行,通常采用下述方法JIT翻譯方法時(shí),在生成的本地指令序列的頭部為實(shí)現(xiàn)遠(yuǎn)跳轉(zhuǎn)的指令預(yù)留足夠的存儲(chǔ)空間,并向其寫入跳轉(zhuǎn)到固定處理例程的首地址的遠(yuǎn)跳轉(zhuǎn)指令序列;當(dāng)需要禁止已翻譯指令序列的執(zhí)行時(shí),首先將第一條指令原子性地修改為一條短跳轉(zhuǎn)指令,通過(guò)該短跳轉(zhuǎn)指令跳轉(zhuǎn)到之前指令序列頭部所預(yù)留的存儲(chǔ)空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠(yuǎn)跳轉(zhuǎn)指令序列以跳轉(zhuǎn)到固定處理例程的首地址,從而完成禁止已翻譯指令序列的執(zhí)行。
[0005]上述方法,通過(guò)增加一次額外的短跳轉(zhuǎn)指令滿足了硬件直接支持的原子性修改操作的限制,并且由于虛擬機(jī)在修改指令序列時(shí),僅存在修改前和修改后兩個(gè)狀態(tài),因此在多線程環(huán)境下也是安全的。然而,由于現(xiàn)代處理器對(duì)跳轉(zhuǎn)指令的執(zhí)行通常代價(jià)較高,采用上述方法,虛擬機(jī)禁止已翻譯指令序列執(zhí)行的效率不高。

【發(fā)明內(nèi)容】

[0006]鑒于此,本發(fā)明提供一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機(jī),以提高虛擬機(jī)禁止已翻譯指令序列執(zhí)行的效率。
[0007]本發(fā)明的第一方面提供一種禁止已翻譯指令序列執(zhí)行的方法,包括:[0008]判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;
[0009]若所述假設(shè)條件不成立,則從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
[0010]修改所述已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到所述固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行所述跳轉(zhuǎn)指令序列禁止所述已翻譯指令序列的執(zhí)行。
[0011]進(jìn)一步地,上述從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,還包括:
[0012]在所述線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;
[0013]將所述固定處理例程的首地址存儲(chǔ)在所述數(shù)據(jù)域中;
[0014]上述從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,包括:
[0015]從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址。
[0016]進(jìn)一步地,上述從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址,包括:
[0017]獲取所述線程控制結(jié)構(gòu)的首地址;
[0018]將所述線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到所述數(shù)據(jù)域?qū)?yīng)的地址,所述固定偏移量為所述數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;
[0019]根據(jù)所述數(shù)據(jù)域?qū)?yīng)的地址獲取所述固定處理例程的首地址。
[0020]進(jìn)一步地,上述跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時(shí)寄存器,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述臨時(shí)寄存器中保存的固定處理例程的首地址。
[0021]本發(fā)明的第二方面提供一種禁止已翻譯指令序列執(zhí)行的裝置,包括:
[0022]監(jiān)測(cè)模塊,用于判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;
[0023]獲取模塊,用于若所述假設(shè)條件不成立,則從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
[0024]修改模塊,用于修改所述已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到所述固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行所述跳轉(zhuǎn)指令序列禁止所述已翻譯指令序列的執(zhí)行。
[0025]進(jìn)一步地,上述裝置,還包括:
[0026]存儲(chǔ)模塊,用于在所述獲取模塊從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,在所述線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;以及
[0027]將所述固定處理例程的首地址存儲(chǔ)在所述數(shù)據(jù)域中;
[0028]上述獲取模塊,具體用于:
[0029]從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址。
[0030]進(jìn)一步地,上述獲取模塊,具體用于:
[0031]獲取所述線程控制結(jié)構(gòu)的首地址;
[0032]將所述線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到所述數(shù)據(jù)域?qū)?yīng)的地址,所述固定偏移量為所述數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;
[0033]根據(jù)所述數(shù)據(jù)域?qū)?yīng)的地址獲取所述固定處理例程的首地址。[0034]進(jìn)一步地,上述跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時(shí)寄存器,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述臨時(shí)寄存器中保存的固定處理例程的首地址。
[0035]本發(fā)明的第三方面提供一種虛擬機(jī),包括如本發(fā)明的第二方面所述的禁止已翻譯指令序列執(zhí)行的裝置。
[0036]本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法和裝置,通過(guò)當(dāng)需要禁止已翻譯指令序列執(zhí)行時(shí),從當(dāng)前線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程的首地址的指令,實(shí)現(xiàn)了一次跳轉(zhuǎn)就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時(shí)的處理效率。
【專利附圖】

【附圖說(shuō)明】
[0037]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0038]圖1為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例一的流程圖;
[0039]圖2為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例二的流程圖;
[0040]圖3為圖2所示方法實(shí)施例中獲取固定處理例程首地址的流程圖;
[0041]圖4為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例三的流程圖;
[0042]圖5為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0043]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0044]圖1為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例一的流程圖,如圖1所示,該方法實(shí)施例,包括如下步驟:
[0045]步驟101、判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;
[0046]步驟102、若假設(shè)條件不成立,則從已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
[0047]步驟103、修改已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行跳轉(zhuǎn)指令序列禁止已翻譯指令序列的執(zhí)行。
[0048]其中,該修改指原子性修改。值得注意的是,此處“修改已翻譯指令序列首部的至少一條指令”指根據(jù)實(shí)現(xiàn)該跳轉(zhuǎn)功能所需指令的條數(shù),確定所需修改的已翻譯指令序列首部的指令條數(shù),舉例來(lái)說(shuō),若實(shí)現(xiàn)該跳轉(zhuǎn)功能需要2條指令,則可通過(guò)硬件支持的訪存指令原子性修改已翻譯指令序列首部前2條指令為該跳轉(zhuǎn)指令序列。
[0049]進(jìn)一步地,在本發(fā)明實(shí)施例中該跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中加載指令用于加載固定處理例程的首地址到臨時(shí)寄存器,跳轉(zhuǎn)指令用于跳轉(zhuǎn)到臨時(shí)寄存器中保存的固定處理例程的首地址。
[0050]具體來(lái)說(shuō),執(zhí)行已翻譯指令序列時(shí),若監(jiān)測(cè)到監(jiān)測(cè)語(yǔ)句中包含的假設(shè)條件不成立或者失效時(shí),從當(dāng)前線程控制結(jié)構(gòu)獲取固定處理例程的首地址,并通過(guò)硬件支持的訪存指令原子性地將需要禁止執(zhí)行的已翻譯指令序列首部指令修改為跳轉(zhuǎn)到固定處理例程的首地址的跳轉(zhuǎn)指令序列:加載固定處理例程的首地址,并跳轉(zhuǎn)到該固定處理例程的首地址,從而禁止已翻譯指令序列的執(zhí)行。在多線程環(huán)境下,硬件直接支持的原子性修改保證了其他線程執(zhí)行的要么是修改前的指令序列要么是修改后的指令序列,從而保證了多線程安全。
[0051]現(xiàn)有技術(shù)中,需要使用短跳轉(zhuǎn)指令跳轉(zhuǎn)到指令序列頭部所預(yù)留的存儲(chǔ)空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠(yuǎn)跳轉(zhuǎn)指令序列來(lái)跳轉(zhuǎn)到固定處理例程的首地址,需要執(zhí)行2次跳轉(zhuǎn)。
[0052]該方法實(shí)施例,通過(guò)從當(dāng)前線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程首地址的指令序列,實(shí)現(xiàn)了一次跳轉(zhuǎn)就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時(shí)的處理效率。
[0053]圖2為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例二的流程圖,該實(shí)施例在圖1所示方法實(shí)施例一的基礎(chǔ)上,主要包括步驟102的【具體實(shí)施方式】,如圖2所示,該實(shí)施例,包括如下步驟:
[0054]步驟201、在線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;
[0055]步驟202、將固定處理例程的首地址存儲(chǔ)在數(shù)據(jù)域中;
[0056]步驟203、從數(shù)據(jù)域中獲取固定處理例程的首地址。
[0057]其中,步驟203為圖1所示方法實(shí)施例一中步驟102進(jìn)一步的【具體實(shí)施方式】。
[0058]進(jìn)一步地,圖3為圖2所示方法實(shí)施例中獲取固定處理例程首地址的流程圖,如圖3所示,步驟203可包括的下述步驟:
[0059]步驟301、獲取線程控制結(jié)構(gòu)的首地址;
[0060]其中,可指定一個(gè)通用寄存器,用于存儲(chǔ)當(dāng)前線程控制結(jié)構(gòu)的首地址,該通用寄存器不宜再參與翻譯時(shí)的寄存器分配;若JIT在翻譯過(guò)程中必須使用該寄存器,則要注意對(duì)其進(jìn)行保護(hù)。由于對(duì)線程控制結(jié)構(gòu)的訪問(wèn)十分頻繁,將線程控制結(jié)構(gòu)的首地址存儲(chǔ)到通用寄存器中,可以加快頻繁訪問(wèn)操作的速度,提高運(yùn)行效率。
[0061]步驟302、將線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到數(shù)據(jù)域?qū)?yīng)的地址,固定偏移量為數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;
[0062]步驟303、根據(jù)數(shù)據(jù)域?qū)?yīng)的地址獲取固定處理例程的首地址。
[0063]具體來(lái)說(shuō),在虛擬機(jī)的線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域,專門用于保存禁止已翻譯指令序列執(zhí)行時(shí),需要跳轉(zhuǎn)到的固定處理例程的首地址。當(dāng)有新線程創(chuàng)建時(shí),進(jìn)行線程初始化,同時(shí)向線程控制結(jié)構(gòu)的新增數(shù)據(jù)域中存入上述固定處理例程的首地址,然后在執(zhí)行方法對(duì)應(yīng)的已翻譯指令序列時(shí),若需要禁止已翻譯指令序列的執(zhí)行,首先獲取線程控制結(jié)構(gòu)的首地址,然后根據(jù)數(shù)據(jù)域?qū)?yīng)的固定偏移量獲取該數(shù)據(jù)域?qū)?yīng)的地址,并從該數(shù)據(jù)域中獲取固定處理例程的首地址。
[0064]對(duì)于64位虛擬機(jī)而言,任一內(nèi)存地址的表示僅需8字節(jié),因此該數(shù)據(jù)域需占用8字節(jié)的存儲(chǔ)空間,并且該線程控制結(jié)構(gòu)中的該數(shù)據(jù)域保存的固定處理例程的首地址可適用于當(dāng)前線程中包含的所有待執(zhí)行的方法對(duì)應(yīng)的指令序列。對(duì)于每個(gè)當(dāng)前線程,其包含的待執(zhí)行的方法可能包括成百上千個(gè),以當(dāng)前線程包含100個(gè)方法舉例來(lái)說(shuō),現(xiàn)有技術(shù)中,通過(guò)在方法對(duì)應(yīng)的指令序列頭部預(yù)留存儲(chǔ)空間以保存遠(yuǎn)跳轉(zhuǎn)所需的指令序列,對(duì)于64位虛擬機(jī),每個(gè)方法都需要預(yù)留8條指令的空間,每條指令4字節(jié),此時(shí)需要預(yù)留的存儲(chǔ)空間至少為 100X8X4=3200 字節(jié)。
[0065]該方法實(shí)施例,在圖1所示方法實(shí)施例具有的技術(shù)效果的基礎(chǔ)上,通過(guò)在線程控制結(jié)構(gòu)中增加數(shù)據(jù)域以保存固定處理例程首地址,大大節(jié)省了禁止已翻譯指令序列執(zhí)行時(shí)需要的存儲(chǔ)空間,并且可通過(guò)通用寄存器保存線程控制結(jié)構(gòu)的首地址,以加快頻繁訪問(wèn)操作的速度,提高運(yùn)行效率。
[0066]圖4為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實(shí)施例三的流程圖,該實(shí)施例在圖1和圖2所示方法實(shí)施例的基礎(chǔ)上,以MIPS架構(gòu)處理器64位虛擬機(jī)為例來(lái)進(jìn)行說(shuō)明該方法實(shí)施例的工作原理。需說(shuō)明的,本發(fā)明提供的方法實(shí)施例適用于但不限于MIPS架構(gòu)處理器這類不直接支持32位立即數(shù)跳轉(zhuǎn)的處理器,舉例來(lái)說(shuō),本發(fā)明提供的方法實(shí)施例還可以在Spare架構(gòu)的處理器上適用。如圖4所示,該方法實(shí)施例,包括如下步驟:
[0067]步驟401、在線程控制結(jié)構(gòu)中增加一個(gè)名為fixed_handler的數(shù)據(jù)域,用于保存禁止已翻譯指令序列執(zhí)行時(shí),需要跳轉(zhuǎn)到的固定處理例程的首地址;
[0068]步驟402、指定通用寄存器T9,專門用于存儲(chǔ)當(dāng)前線程控制結(jié)構(gòu)的首地址,該通用寄存器T9不再參與翻譯時(shí)的寄存器分配;
[0069]步驟403、創(chuàng)建新線程,進(jìn)行線程初始化,將固定處理例程的首地址保存到線程控制結(jié)構(gòu)中的“fixecLhandler”數(shù)據(jù)域,并且將線程控制結(jié)構(gòu)的首地址加載到寄存器T9中;
[0070]步驟404、執(zhí)行目標(biāo)程序,判斷目標(biāo)程序中的方法是否已翻譯;
[0071]步驟405、若未翻譯,判斷該方法是否滿足翻譯條件,即判斷該方法是否為熱點(diǎn)方法;
[0072]步驟406、若滿足翻譯條件,則調(diào)用即時(shí)編譯器進(jìn)行翻譯得到該方法對(duì)應(yīng)的已翻譯指令序列,并將已翻譯指令序列的第一條指令按8字節(jié)對(duì)齊,以滿足8字節(jié)原子訪存操作要求;
[0073]步驟407、若已翻譯,判斷監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;
[0074]步驟408、若不成立,通過(guò)MIPS指令集提供的8字節(jié)訪存指令“sd”,原子性地將需要禁止的已翻譯指令序列首部的前面兩條指令修改為下面兩條指令:
[0075]“Id AT,off (T9) ”
[0076]“jr AT,,
[0077]sd指令是所有MIPS架構(gòu)CPU均支持的一條標(biāo)準(zhǔn)指令,該指令是由CPU硬件直接支持的,用于對(duì)內(nèi)存以8字節(jié)為單位進(jìn)行寫操作。經(jīng)過(guò)上述修改,在執(zhí)行已翻譯指令序列時(shí),首先通過(guò)Id指令加載線程控制結(jié)構(gòu)fixed_handler數(shù)據(jù)域中保存的固定處理例程的首地址到臨時(shí)寄存器AT,然后通過(guò)jr指令跳轉(zhuǎn)到臨時(shí)寄存器AT中保存的固定處理例程的首地址,以進(jìn)行解釋執(zhí)行或者重新翻譯等后續(xù)操作,其中,off為fixecLhandler數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;
[0078]步驟409、若不滿足翻譯條件,調(diào)用解釋器解釋執(zhí)行該方法;
[0079]步驟410、若已翻譯且假設(shè)條件成立,執(zhí)行該方法對(duì)應(yīng)的已翻譯指令序列。[0080]其中,步驟401中,在線程控制結(jié)構(gòu)中增加數(shù)據(jù)域以保存固定處理例程的首地址,不需要使用短跳轉(zhuǎn)指令跳轉(zhuǎn)到現(xiàn)有技術(shù)中指令序列頭部所預(yù)留的存儲(chǔ)空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠(yuǎn)跳轉(zhuǎn)指令序列來(lái)跳轉(zhuǎn)到固定處理例程的首地址,減少了一次短跳轉(zhuǎn),提高了執(zhí)行效率;步驟406中,可根據(jù)字節(jié)對(duì)齊需求進(jìn)行對(duì)齊,若不需要字節(jié)對(duì)齊,則不需要執(zhí)行字節(jié)對(duì)齊相關(guān)的步驟;步驟408,通過(guò)硬件支持的8字節(jié)訪存指令進(jìn)行原子性修改,在滿足硬件原子性修改要求的同時(shí),保證了多線程安全。
[0081]需說(shuō)明的是步驟408中,不同的處理器,在實(shí)現(xiàn)相同功能時(shí)所用的指令不同,例如,對(duì)于Spare處理器,可以通過(guò)Idx指令加載固定處理例程首地址,jmp指令跳轉(zhuǎn)到該固定處理例程的首地址,然后通過(guò)訪存指令stx修改已翻譯指令序列首部的指令。
[0082]該方法實(shí)施例,通過(guò)從當(dāng)前線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程首地址的指令序列,實(shí)現(xiàn)了一次跳轉(zhuǎn)就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時(shí)的處理效率,并且通過(guò)在線程控制結(jié)構(gòu)中增加數(shù)據(jù)域以保存固定處理例程首地址,大大節(jié)省了禁止已翻譯指令序列執(zhí)行時(shí)需要的存儲(chǔ)空間。
[0083]圖5為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的裝置的結(jié)構(gòu)示意圖,如圖5所示,該禁止已翻譯指令序列執(zhí)行的裝置500,包括:監(jiān)測(cè)模塊501、獲取模塊502、修改模塊503和存儲(chǔ)模塊504,其中
[0084]監(jiān)測(cè)模塊501,用于判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;
[0085]獲取模塊502,用于若假設(shè)條件不成立,則從已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址;
[0086]修改模塊503,用于修改已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行跳轉(zhuǎn)指令序列禁止已翻譯指令序列的執(zhí)行。
[0087]存儲(chǔ)模塊504,用于在獲取模塊502從已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,在線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;以及
[0088]將固定處理例程的首地址存儲(chǔ)在數(shù)據(jù)域中;
[0089]相應(yīng)地,獲取模塊502,具體用于:
[0090]從數(shù)據(jù)域中獲取固定處理例程的首地址。
[0091]進(jìn)一步地,獲取模塊502,具體用于:
[0092]獲取線程控制結(jié)構(gòu)的首地址;
[0093]將線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到數(shù)據(jù)域?qū)?yīng)的地址,固定偏移量為數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;
[0094]根據(jù)數(shù)據(jù)域?qū)?yīng)的地址獲取固定處理例程的首地址。
[0095]進(jìn)一步地,修改模塊503中的跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中加載指令用于加載固定處理例程的首地址到臨時(shí)寄存器,跳轉(zhuǎn)指令用于跳轉(zhuǎn)到臨時(shí)寄存器中保存的固定處理例程的首地址。
[0096]該裝置實(shí)施例,可以用于執(zhí)行上述圖1?圖3所示的方法實(shí)施例中提供的技術(shù)方案和圖4所示的方法實(shí)施例中的相應(yīng)步驟,其實(shí)現(xiàn)原理和技術(shù)效果類似,不再贅述。
[0097]本發(fā)明還提供一種虛擬機(jī),該虛擬機(jī),可包括圖5所示的裝置實(shí)施例中給提供的禁止已翻譯指令序列執(zhí)行的裝置500,可用于執(zhí)行上述圖1?圖3所示的方法實(shí)施例中提供的技術(shù)方案和圖4所示的方法實(shí)施例中的相應(yīng)步驟,其實(shí)現(xiàn)原理和技術(shù)效果類似,不再贅述。
[0098]最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。
【權(quán)利要求】
1.一種禁止已翻譯指令序列執(zhí)行的方法,其特征在于,包括: 判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立; 若所述假設(shè)條件不成立,則從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址; 修改所述已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到所述固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行所述跳轉(zhuǎn)指令序列禁止所述已翻譯指令序列的執(zhí)行。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,還包括: 在所述線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域; 將所述固定處理例程的首地址存儲(chǔ)在所述數(shù)據(jù)域中; 所述從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址,包括: 從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址,包括: 獲取所述線程控制結(jié)構(gòu)的首地址; 將所述線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到所述數(shù)據(jù)域?qū)?yīng)的地址,所述固定偏移量為所述數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量; 根據(jù)所述數(shù)據(jù)域?qū)?yīng)的地址獲取所述固定處理例程的首地址。
4.根據(jù)權(quán)利要求1~3任一項(xiàng)所述的方法,其特征在于,所述跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時(shí)寄存器,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述臨時(shí)寄存器中保存的固定處理例程的首地址。
5.一種禁止已翻譯指令序列執(zhí)行的裝置,其特征在于,包括: 監(jiān)測(cè)模塊,用于判斷已翻譯指令序列對(duì)應(yīng)的監(jiān)測(cè)語(yǔ)句中包括的假設(shè)條件是否成立;獲取模塊,用于若所述假設(shè)條件不成立,則從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址; 修改模塊,用于修改所述已翻譯指令序列首部的至少一條指令為跳轉(zhuǎn)到所述固定處理例程的首地址的跳轉(zhuǎn)指令序列,以執(zhí)行所述跳轉(zhuǎn)指令序列禁止所述已翻譯指令序列的執(zhí)行。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,還包括: 存儲(chǔ)模塊,用于在所述獲取模塊從所述已翻譯指令序列對(duì)應(yīng)的線程控制結(jié)構(gòu)中獲取固定處理例程的首地址之前,在所述線程控制結(jié)構(gòu)中增加一數(shù)據(jù)域;以及將所述固定處理例程的首地址存儲(chǔ)在所述數(shù)據(jù)域中; 所述獲取模塊,具體用于: 從所述數(shù)據(jù)域中獲取所述固定處理例程的首地址。
7.根 據(jù)權(quán)利要求6所述的裝置,其特征在于,所述獲取模塊,具體用于: 獲取所述線程控制結(jié)構(gòu)的首地址; 將所述線程控制結(jié)構(gòu)的首地址增加一個(gè)固定偏移量得到所述數(shù)據(jù)域?qū)?yīng)的地址,所述固定偏移量為所述數(shù)據(jù)域在線程控制結(jié)構(gòu)中對(duì)應(yīng)的偏移量;根據(jù)所述數(shù)據(jù)域?qū)?yīng)的地址獲取所述固定處理例程的首地址。
8.根據(jù)權(quán)利要求5~7任一項(xiàng)所述的裝置,其特征在于,所述跳轉(zhuǎn)指令序列,包括加載指令和跳轉(zhuǎn)指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時(shí)寄存器,所述跳轉(zhuǎn)指令用于跳轉(zhuǎn)到所述臨時(shí)寄存器中保存的固定處理例程的首地址。
9.一種虛擬機(jī),其特征在于,包括如權(quán)利要求4~6任一項(xiàng)所述的禁止已翻譯指令序列執(zhí)行的裝置 。
【文檔編號(hào)】G06F9/30GK103744641SQ201410032331
【公開日】2014年4月23日 申請(qǐng)日期:2014年1月23日 優(yōu)先權(quán)日:2014年1月23日
【發(fā)明者】傅杰, 靳國(guó)杰, 高翔 申請(qǐng)人:龍芯中科技術(shù)有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
区。| 兰州市| 景洪市| 大荔县| 温宿县| 勃利县| 明溪县| 汤原县| 濮阳市| 平乡县| 平阳县| 弥渡县| 岗巴县| 宣城市| 婺源县| 昌邑市| 北川| 桦川县| 通州市| 濮阳市| 郧西县| 宜兰市| 内江市| 兖州市| 乃东县| 蒙阴县| 邯郸市| 德钦县| 霞浦县| 甘谷县| 伊春市| 合水县| 寻甸| 天台县| 怀柔区| 鹿泉市| 温宿县| 克山县| 阿城市| 淮滨县| 常宁市|