禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬的制造方法
【專利摘要】本發(fā)明提供一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機,包括:判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;若假設條件不成立,則從已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址;修改已翻譯指令序列首部的至少一條指令為跳轉到固定處理例程的首地址的跳轉指令序列,以執(zhí)行跳轉指令序列禁止已翻譯指令序列的執(zhí)行。本發(fā)明,通過修改已翻譯指令序列首部的至少一條指令為跳轉到固定處理例程的首地址的跳轉指令序列,實現(xiàn)了一次跳轉就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時的處理效率。
【專利說明】禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機
【技術領域】
[0001]本發(fā)明涉及計算機技術,尤其涉及一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機。
【背景技術】
[0002]虛擬機(英文:Virtual Machine簡稱:VM)的核心是執(zhí)行引擎,包括解釋器和編譯器,其中編譯器通常為即時編譯器(英文Just-1n-time Compiler,簡稱:JIT)。VM JIT在翻譯某個方法時,為了盡可能地提升翻譯后生成的本地機器指令的質量,通常會基于某些假設(如對象的類型、分支是否可能被執(zhí)行等)進行深度優(yōu)化,對于這種基于若干假設的優(yōu)化,同時生成相應的假設條件監(jiān)測語句。當某項假設不再成立時,虛擬機需要禁止先前基于該假設翻譯生成的本地機器指令序列的執(zhí)行。
[0003]虛擬機禁止已翻譯指令序列的執(zhí)行,一般采用將需要被禁止執(zhí)行的指令序列的若干條首部指令修改為實現(xiàn)跳轉到一個固定處理例程(fix_handler)首地址功能的若干條指令,然后在這個固定處理例程中啟動解釋執(zhí)行或者重新翻譯等后續(xù)動作。在虛擬機修改已翻譯指令序列的同時需要保證修改操作的原子性從而保證多線程安全:使得可能正在執(zhí)行該指令序列的多個線程所執(zhí)行的要么是修改之前的指令序列,要么是修改完成之后的指令序列,以避免引發(fā)執(zhí)行錯誤。
[0004]指令序列的原子性修改通常要求硬件所提供的最大原子訪存位數不小于所需更改的指令序列(即實現(xiàn)跳轉到固定處理例程的首地址功能的指令序列)總長度,然而標準的MIPS體系結構,在64位硬件系統(tǒng)中所能提供的最大原子訪存長度為8字節(jié),通常小于完成指令修改所需的長度。在保證多線程安全并且滿足硬件直接支持的原子性修改操作限制的前提下,現(xiàn)有技術中,虛擬機禁止已翻譯指令序列執(zhí)行,通常采用下述方法JIT翻譯方法時,在生成的本地指令序列的頭部為實現(xiàn)遠跳轉的指令預留足夠的存儲空間,并向其寫入跳轉到固定處理例程的首地址的遠跳轉指令序列;當需要禁止已翻譯指令序列的執(zhí)行時,首先將第一條指令原子性地修改為一條短跳轉指令,通過該短跳轉指令跳轉到之前指令序列頭部所預留的存儲空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠跳轉指令序列以跳轉到固定處理例程的首地址,從而完成禁止已翻譯指令序列的執(zhí)行。
[0005]上述方法,通過增加一次額外的短跳轉指令滿足了硬件直接支持的原子性修改操作的限制,并且由于虛擬機在修改指令序列時,僅存在修改前和修改后兩個狀態(tài),因此在多線程環(huán)境下也是安全的。然而,由于現(xiàn)代處理器對跳轉指令的執(zhí)行通常代價較高,采用上述方法,虛擬機禁止已翻譯指令序列執(zhí)行的效率不高。
【發(fā)明內容】
[0006]鑒于此,本發(fā)明提供一種禁止已翻譯指令序列執(zhí)行的方法、裝置和虛擬機,以提高虛擬機禁止已翻譯指令序列執(zhí)行的效率。
[0007]本發(fā)明的第一方面提供一種禁止已翻譯指令序列執(zhí)行的方法,包括:[0008]判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;
[0009]若所述假設條件不成立,則從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址;
[0010]修改所述已翻譯指令序列首部的至少一條指令為跳轉到所述固定處理例程的首地址的跳轉指令序列,以執(zhí)行所述跳轉指令序列禁止所述已翻譯指令序列的執(zhí)行。
[0011]進一步地,上述從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址之前,還包括:
[0012]在所述線程控制結構中增加一數據域;
[0013]將所述固定處理例程的首地址存儲在所述數據域中;
[0014]上述從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址,包括:
[0015]從所述數據域中獲取所述固定處理例程的首地址。
[0016]進一步地,上述從所述數據域中獲取所述固定處理例程的首地址,包括:
[0017]獲取所述線程控制結構的首地址;
[0018]將所述線程控制結構的首地址增加一個固定偏移量得到所述數據域對應的地址,所述固定偏移量為所述數據域在線程控制結構中對應的偏移量;
[0019]根據所述數據域對應的地址獲取所述固定處理例程的首地址。
[0020]進一步地,上述跳轉指令序列,包括加載指令和跳轉指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時寄存器,所述跳轉指令用于跳轉到所述臨時寄存器中保存的固定處理例程的首地址。
[0021]本發(fā)明的第二方面提供一種禁止已翻譯指令序列執(zhí)行的裝置,包括:
[0022]監(jiān)測模塊,用于判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;
[0023]獲取模塊,用于若所述假設條件不成立,則從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址;
[0024]修改模塊,用于修改所述已翻譯指令序列首部的至少一條指令為跳轉到所述固定處理例程的首地址的跳轉指令序列,以執(zhí)行所述跳轉指令序列禁止所述已翻譯指令序列的執(zhí)行。
[0025]進一步地,上述裝置,還包括:
[0026]存儲模塊,用于在所述獲取模塊從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址之前,在所述線程控制結構中增加一數據域;以及
[0027]將所述固定處理例程的首地址存儲在所述數據域中;
[0028]上述獲取模塊,具體用于:
[0029]從所述數據域中獲取所述固定處理例程的首地址。
[0030]進一步地,上述獲取模塊,具體用于:
[0031]獲取所述線程控制結構的首地址;
[0032]將所述線程控制結構的首地址增加一個固定偏移量得到所述數據域對應的地址,所述固定偏移量為所述數據域在線程控制結構中對應的偏移量;
[0033]根據所述數據域對應的地址獲取所述固定處理例程的首地址。[0034]進一步地,上述跳轉指令序列,包括加載指令和跳轉指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時寄存器,所述跳轉指令用于跳轉到所述臨時寄存器中保存的固定處理例程的首地址。
[0035]本發(fā)明的第三方面提供一種虛擬機,包括如本發(fā)明的第二方面所述的禁止已翻譯指令序列執(zhí)行的裝置。
[0036]本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法和裝置,通過當需要禁止已翻譯指令序列執(zhí)行時,從當前線程控制結構中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉到固定處理例程的首地址的指令,實現(xiàn)了一次跳轉就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時的處理效率。
【專利附圖】
【附圖說明】
[0037]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0038]圖1為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例一的流程圖;
[0039]圖2為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例二的流程圖;
[0040]圖3為圖2所示方法實施例中獲取固定處理例程首地址的流程圖;
[0041]圖4為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例三的流程圖;
[0042]圖5為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的裝置的結構示意圖。
【具體實施方式】
[0043]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0044]圖1為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例一的流程圖,如圖1所示,該方法實施例,包括如下步驟:
[0045]步驟101、判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;
[0046]步驟102、若假設條件不成立,則從已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址;
[0047]步驟103、修改已翻譯指令序列首部的至少一條指令為跳轉到固定處理例程的首地址的跳轉指令序列,以執(zhí)行跳轉指令序列禁止已翻譯指令序列的執(zhí)行。
[0048]其中,該修改指原子性修改。值得注意的是,此處“修改已翻譯指令序列首部的至少一條指令”指根據實現(xiàn)該跳轉功能所需指令的條數,確定所需修改的已翻譯指令序列首部的指令條數,舉例來說,若實現(xiàn)該跳轉功能需要2條指令,則可通過硬件支持的訪存指令原子性修改已翻譯指令序列首部前2條指令為該跳轉指令序列。
[0049]進一步地,在本發(fā)明實施例中該跳轉指令序列,包括加載指令和跳轉指令,其中加載指令用于加載固定處理例程的首地址到臨時寄存器,跳轉指令用于跳轉到臨時寄存器中保存的固定處理例程的首地址。
[0050]具體來說,執(zhí)行已翻譯指令序列時,若監(jiān)測到監(jiān)測語句中包含的假設條件不成立或者失效時,從當前線程控制結構獲取固定處理例程的首地址,并通過硬件支持的訪存指令原子性地將需要禁止執(zhí)行的已翻譯指令序列首部指令修改為跳轉到固定處理例程的首地址的跳轉指令序列:加載固定處理例程的首地址,并跳轉到該固定處理例程的首地址,從而禁止已翻譯指令序列的執(zhí)行。在多線程環(huán)境下,硬件直接支持的原子性修改保證了其他線程執(zhí)行的要么是修改前的指令序列要么是修改后的指令序列,從而保證了多線程安全。
[0051]現(xiàn)有技術中,需要使用短跳轉指令跳轉到指令序列頭部所預留的存儲空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠跳轉指令序列來跳轉到固定處理例程的首地址,需要執(zhí)行2次跳轉。
[0052]該方法實施例,通過從當前線程控制結構中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉到固定處理例程首地址的指令序列,實現(xiàn)了一次跳轉就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時的處理效率。
[0053]圖2為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例二的流程圖,該實施例在圖1所示方法實施例一的基礎上,主要包括步驟102的【具體實施方式】,如圖2所示,該實施例,包括如下步驟:
[0054]步驟201、在線程控制結構中增加一數據域;
[0055]步驟202、將固定處理例程的首地址存儲在數據域中;
[0056]步驟203、從數據域中獲取固定處理例程的首地址。
[0057]其中,步驟203為圖1所示方法實施例一中步驟102進一步的【具體實施方式】。
[0058]進一步地,圖3為圖2所示方法實施例中獲取固定處理例程首地址的流程圖,如圖3所示,步驟203可包括的下述步驟:
[0059]步驟301、獲取線程控制結構的首地址;
[0060]其中,可指定一個通用寄存器,用于存儲當前線程控制結構的首地址,該通用寄存器不宜再參與翻譯時的寄存器分配;若JIT在翻譯過程中必須使用該寄存器,則要注意對其進行保護。由于對線程控制結構的訪問十分頻繁,將線程控制結構的首地址存儲到通用寄存器中,可以加快頻繁訪問操作的速度,提高運行效率。
[0061]步驟302、將線程控制結構的首地址增加一個固定偏移量得到數據域對應的地址,固定偏移量為數據域在線程控制結構中對應的偏移量;
[0062]步驟303、根據數據域對應的地址獲取固定處理例程的首地址。
[0063]具體來說,在虛擬機的線程控制結構中增加一數據域,專門用于保存禁止已翻譯指令序列執(zhí)行時,需要跳轉到的固定處理例程的首地址。當有新線程創(chuàng)建時,進行線程初始化,同時向線程控制結構的新增數據域中存入上述固定處理例程的首地址,然后在執(zhí)行方法對應的已翻譯指令序列時,若需要禁止已翻譯指令序列的執(zhí)行,首先獲取線程控制結構的首地址,然后根據數據域對應的固定偏移量獲取該數據域對應的地址,并從該數據域中獲取固定處理例程的首地址。
[0064]對于64位虛擬機而言,任一內存地址的表示僅需8字節(jié),因此該數據域需占用8字節(jié)的存儲空間,并且該線程控制結構中的該數據域保存的固定處理例程的首地址可適用于當前線程中包含的所有待執(zhí)行的方法對應的指令序列。對于每個當前線程,其包含的待執(zhí)行的方法可能包括成百上千個,以當前線程包含100個方法舉例來說,現(xiàn)有技術中,通過在方法對應的指令序列頭部預留存儲空間以保存遠跳轉所需的指令序列,對于64位虛擬機,每個方法都需要預留8條指令的空間,每條指令4字節(jié),此時需要預留的存儲空間至少為 100X8X4=3200 字節(jié)。
[0065]該方法實施例,在圖1所示方法實施例具有的技術效果的基礎上,通過在線程控制結構中增加數據域以保存固定處理例程首地址,大大節(jié)省了禁止已翻譯指令序列執(zhí)行時需要的存儲空間,并且可通過通用寄存器保存線程控制結構的首地址,以加快頻繁訪問操作的速度,提高運行效率。
[0066]圖4為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的方法實施例三的流程圖,該實施例在圖1和圖2所示方法實施例的基礎上,以MIPS架構處理器64位虛擬機為例來進行說明該方法實施例的工作原理。需說明的,本發(fā)明提供的方法實施例適用于但不限于MIPS架構處理器這類不直接支持32位立即數跳轉的處理器,舉例來說,本發(fā)明提供的方法實施例還可以在Spare架構的處理器上適用。如圖4所示,該方法實施例,包括如下步驟:
[0067]步驟401、在線程控制結構中增加一個名為fixed_handler的數據域,用于保存禁止已翻譯指令序列執(zhí)行時,需要跳轉到的固定處理例程的首地址;
[0068]步驟402、指定通用寄存器T9,專門用于存儲當前線程控制結構的首地址,該通用寄存器T9不再參與翻譯時的寄存器分配;
[0069]步驟403、創(chuàng)建新線程,進行線程初始化,將固定處理例程的首地址保存到線程控制結構中的“fixecLhandler”數據域,并且將線程控制結構的首地址加載到寄存器T9中;
[0070]步驟404、執(zhí)行目標程序,判斷目標程序中的方法是否已翻譯;
[0071]步驟405、若未翻譯,判斷該方法是否滿足翻譯條件,即判斷該方法是否為熱點方法;
[0072]步驟406、若滿足翻譯條件,則調用即時編譯器進行翻譯得到該方法對應的已翻譯指令序列,并將已翻譯指令序列的第一條指令按8字節(jié)對齊,以滿足8字節(jié)原子訪存操作要求;
[0073]步驟407、若已翻譯,判斷監(jiān)測語句中包括的假設條件是否成立;
[0074]步驟408、若不成立,通過MIPS指令集提供的8字節(jié)訪存指令“sd”,原子性地將需要禁止的已翻譯指令序列首部的前面兩條指令修改為下面兩條指令:
[0075]“Id AT,off (T9) ”
[0076]“jr AT,,
[0077]sd指令是所有MIPS架構CPU均支持的一條標準指令,該指令是由CPU硬件直接支持的,用于對內存以8字節(jié)為單位進行寫操作。經過上述修改,在執(zhí)行已翻譯指令序列時,首先通過Id指令加載線程控制結構fixed_handler數據域中保存的固定處理例程的首地址到臨時寄存器AT,然后通過jr指令跳轉到臨時寄存器AT中保存的固定處理例程的首地址,以進行解釋執(zhí)行或者重新翻譯等后續(xù)操作,其中,off為fixecLhandler數據域在線程控制結構中對應的偏移量;
[0078]步驟409、若不滿足翻譯條件,調用解釋器解釋執(zhí)行該方法;
[0079]步驟410、若已翻譯且假設條件成立,執(zhí)行該方法對應的已翻譯指令序列。[0080]其中,步驟401中,在線程控制結構中增加數據域以保存固定處理例程的首地址,不需要使用短跳轉指令跳轉到現(xiàn)有技術中指令序列頭部所預留的存儲空間的首地址,然后繼續(xù)執(zhí)行先前寫入的遠跳轉指令序列來跳轉到固定處理例程的首地址,減少了一次短跳轉,提高了執(zhí)行效率;步驟406中,可根據字節(jié)對齊需求進行對齊,若不需要字節(jié)對齊,則不需要執(zhí)行字節(jié)對齊相關的步驟;步驟408,通過硬件支持的8字節(jié)訪存指令進行原子性修改,在滿足硬件原子性修改要求的同時,保證了多線程安全。
[0081]需說明的是步驟408中,不同的處理器,在實現(xiàn)相同功能時所用的指令不同,例如,對于Spare處理器,可以通過Idx指令加載固定處理例程首地址,jmp指令跳轉到該固定處理例程的首地址,然后通過訪存指令stx修改已翻譯指令序列首部的指令。
[0082]該方法實施例,通過從當前線程控制結構中獲取固定處理例程的首地址,并原子性修改指令序列首部的至少一條指令為跳轉到固定處理例程首地址的指令序列,實現(xiàn)了一次跳轉就可以禁止已翻譯指令序列的執(zhí)行,提高了禁止已翻譯指令序列執(zhí)行時的處理效率,并且通過在線程控制結構中增加數據域以保存固定處理例程首地址,大大節(jié)省了禁止已翻譯指令序列執(zhí)行時需要的存儲空間。
[0083]圖5為本發(fā)明提供的禁止已翻譯指令序列執(zhí)行的裝置的結構示意圖,如圖5所示,該禁止已翻譯指令序列執(zhí)行的裝置500,包括:監(jiān)測模塊501、獲取模塊502、修改模塊503和存儲模塊504,其中
[0084]監(jiān)測模塊501,用于判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;
[0085]獲取模塊502,用于若假設條件不成立,則從已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址;
[0086]修改模塊503,用于修改已翻譯指令序列首部的至少一條指令為跳轉到固定處理例程的首地址的跳轉指令序列,以執(zhí)行跳轉指令序列禁止已翻譯指令序列的執(zhí)行。
[0087]存儲模塊504,用于在獲取模塊502從已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址之前,在線程控制結構中增加一數據域;以及
[0088]將固定處理例程的首地址存儲在數據域中;
[0089]相應地,獲取模塊502,具體用于:
[0090]從數據域中獲取固定處理例程的首地址。
[0091]進一步地,獲取模塊502,具體用于:
[0092]獲取線程控制結構的首地址;
[0093]將線程控制結構的首地址增加一個固定偏移量得到數據域對應的地址,固定偏移量為數據域在線程控制結構中對應的偏移量;
[0094]根據數據域對應的地址獲取固定處理例程的首地址。
[0095]進一步地,修改模塊503中的跳轉指令序列,包括加載指令和跳轉指令,其中加載指令用于加載固定處理例程的首地址到臨時寄存器,跳轉指令用于跳轉到臨時寄存器中保存的固定處理例程的首地址。
[0096]該裝置實施例,可以用于執(zhí)行上述圖1?圖3所示的方法實施例中提供的技術方案和圖4所示的方法實施例中的相應步驟,其實現(xiàn)原理和技術效果類似,不再贅述。
[0097]本發(fā)明還提供一種虛擬機,該虛擬機,可包括圖5所示的裝置實施例中給提供的禁止已翻譯指令序列執(zhí)行的裝置500,可用于執(zhí)行上述圖1?圖3所示的方法實施例中提供的技術方案和圖4所示的方法實施例中的相應步驟,其實現(xiàn)原理和技術效果類似,不再贅述。
[0098]最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的范圍。
【權利要求】
1.一種禁止已翻譯指令序列執(zhí)行的方法,其特征在于,包括: 判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立; 若所述假設條件不成立,則從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址; 修改所述已翻譯指令序列首部的至少一條指令為跳轉到所述固定處理例程的首地址的跳轉指令序列,以執(zhí)行所述跳轉指令序列禁止所述已翻譯指令序列的執(zhí)行。
2.根據權利要求1所述的方法,其特征在于,所述從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址之前,還包括: 在所述線程控制結構中增加一數據域; 將所述固定處理例程的首地址存儲在所述數據域中; 所述從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址,包括: 從所述數據域中獲取所述固定處理例程的首地址。
3.根據權利要求2所述的方法,其特征在于,所述從所述數據域中獲取所述固定處理例程的首地址,包括: 獲取所述線程控制結構的首地址; 將所述線程控制結構的首地址增加一個固定偏移量得到所述數據域對應的地址,所述固定偏移量為所述數據域在線程控制結構中對應的偏移量; 根據所述數據域對應的地址獲取所述固定處理例程的首地址。
4.根據權利要求1~3任一項所述的方法,其特征在于,所述跳轉指令序列,包括加載指令和跳轉指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時寄存器,所述跳轉指令用于跳轉到所述臨時寄存器中保存的固定處理例程的首地址。
5.一種禁止已翻譯指令序列執(zhí)行的裝置,其特征在于,包括: 監(jiān)測模塊,用于判斷已翻譯指令序列對應的監(jiān)測語句中包括的假設條件是否成立;獲取模塊,用于若所述假設條件不成立,則從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址; 修改模塊,用于修改所述已翻譯指令序列首部的至少一條指令為跳轉到所述固定處理例程的首地址的跳轉指令序列,以執(zhí)行所述跳轉指令序列禁止所述已翻譯指令序列的執(zhí)行。
6.根據權利要求5所述的裝置,其特征在于,還包括: 存儲模塊,用于在所述獲取模塊從所述已翻譯指令序列對應的線程控制結構中獲取固定處理例程的首地址之前,在所述線程控制結構中增加一數據域;以及將所述固定處理例程的首地址存儲在所述數據域中; 所述獲取模塊,具體用于: 從所述數據域中獲取所述固定處理例程的首地址。
7.根 據權利要求6所述的裝置,其特征在于,所述獲取模塊,具體用于: 獲取所述線程控制結構的首地址; 將所述線程控制結構的首地址增加一個固定偏移量得到所述數據域對應的地址,所述固定偏移量為所述數據域在線程控制結構中對應的偏移量;根據所述數據域對應的地址獲取所述固定處理例程的首地址。
8.根據權利要求5~7任一項所述的裝置,其特征在于,所述跳轉指令序列,包括加載指令和跳轉指令,其中所述加載指令用于加載所述固定處理例程的首地址到臨時寄存器,所述跳轉指令用于跳轉到所述臨時寄存器中保存的固定處理例程的首地址。
9.一種虛擬機,其特征在于,包括如權利要求4~6任一項所述的禁止已翻譯指令序列執(zhí)行的裝置 。
【文檔編號】G06F9/30GK103744641SQ201410032331
【公開日】2014年4月23日 申請日期:2014年1月23日 優(yōu)先權日:2014年1月23日
【發(fā)明者】傅杰, 靳國杰, 高翔 申請人:龍芯中科技術有限公司