一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法
【專利摘要】本發(fā)明提供了一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,所述方法包括步驟:將整個(gè)翻譯緩存劃分兩級(jí)緩存;當(dāng)有新的基本塊需要翻譯時(shí),根據(jù)所述基本塊的地址在所述熱代碼緩存查找代碼塊;根據(jù)所述基本塊的地址在所述子代碼緩存查找代碼塊;計(jì)算緩存所述代碼塊需要的空間大??;清空所述子代碼緩存;翻譯所述基本塊,并將翻譯后的代碼塊存入所述子代碼緩存;執(zhí)行所述代碼塊;統(tǒng)計(jì)所述代碼塊的執(zhí)行次數(shù),如果所述執(zhí)行次數(shù)大于所述閾值,則將所述代碼塊緩存入所述熱代碼緩存;將所述基本塊加入慢哈希表,將結(jié)果加入快哈希表。
【專利說(shuō)明】
一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域的動(dòng)態(tài)二進(jìn)制翻譯緩存管理技術(shù),特別涉及一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存(TransCache)管理方法。
【背景技術(shù)】
[0002]近年來(lái),二進(jìn)制翻譯技術(shù)已成為一種用軟件方法實(shí)現(xiàn)代碼移植的重要手段。由于二進(jìn)制翻譯及其相關(guān)優(yōu)化技術(shù)的研究在代碼移植、虛擬機(jī)、網(wǎng)絡(luò)應(yīng)用、計(jì)算機(jī)安全和硬件開(kāi)發(fā)等方面都具有重要意義,已經(jīng)成為現(xiàn)代計(jì)算機(jī)研究的熱點(diǎn)之一。
[0003]動(dòng)態(tài)二進(jìn)制翻譯技術(shù)是二進(jìn)制翻譯技術(shù)今后發(fā)展的一個(gè)主要方向。它將源目標(biāo)機(jī)器的二進(jìn)制程序動(dòng)態(tài)的翻譯為目標(biāo)機(jī)器的二進(jìn)制程序。動(dòng)態(tài)二進(jìn)制翻譯的基本工作原理是這樣的:以基本塊為單位翻譯源體系結(jié)構(gòu)二進(jìn)制代碼,通過(guò)翻譯生成相應(yīng)的目標(biāo)體系結(jié)構(gòu)支持的代碼塊,并緩存在翻譯緩存(TransCache)中,這樣當(dāng)程序再次運(yùn)行到這個(gè)基本塊時(shí),就直接從TransCache中得到相應(yīng)的目標(biāo)體系結(jié)構(gòu)代碼并執(zhí)行,從而提高程序執(zhí)行速度。由此可見(jiàn),使用TransCache可以使動(dòng)態(tài)二進(jìn)制翻譯器的性能得到極大提升。和硬件緩存一樣,TransCache需要選擇存儲(chǔ)對(duì)象,安排其存放位置并對(duì)其進(jìn)行替換管理等。由于TransCache是一片軟件管理的緩存,管理開(kāi)銷會(huì)直接影響動(dòng)態(tài)二進(jìn)制翻譯器的性能,因此對(duì)動(dòng)態(tài)二進(jìn)制翻譯器的TransCache的管理方法的研究和改進(jìn)具有重要意義。
[0004]目前,動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)中常用的TransCache管理方法主要有以下幾種:
I)全清空策略
全清空策略就是整個(gè)TransCache按地址依次存放代碼塊,當(dāng)TransCache的剩余空間不足就將所有的代碼塊替換出去以清空整個(gè)TransCache。全清空策略算法簡(jiǎn)單,實(shí)現(xiàn)方便,同時(shí)管理開(kāi)銷也較小,并且不會(huì)產(chǎn)生碎片。但這種方法的替換粒度太大,會(huì)導(dǎo)致整個(gè)TransCache的miss rate(缺失率)過(guò)高,同時(shí)它沒(méi)有考慮到程序的時(shí)間空間局部性,會(huì)把很多熱代碼塊也替換出去,導(dǎo)致熱代碼塊的反復(fù)替換,降低TransCache的性能。
[0005]2) LRU 策略
LRU (Least Recently Used)策略的基本原來(lái)是當(dāng)TransCache空間不足時(shí)將最久最少使用的塊替換出去,如果替換后的TransCache空間任然不足則將剛提出去的塊相鄰的物理塊也替換出去,重復(fù)此過(guò)程直到TransCache具有足夠的空間來(lái)存放新的代碼塊。這種算法考慮到了程序的時(shí)間局部性,以程序最近的執(zhí)行特性來(lái)預(yù)測(cè)其將來(lái)的執(zhí)行特性。但它的實(shí)現(xiàn)算法比較復(fù)雜,付出的管理開(kāi)銷較大,有時(shí)它的性能還不如全清空策略,所以使用LRU策略的二進(jìn)制翻譯系統(tǒng)較少。
[0006]3)FIF0 策略
FIFO策略是將TransCache看成一個(gè)FIFCKFirst In First Out)緩沖區(qū),當(dāng)TransCache空間不足時(shí),將最先進(jìn)入TransCache的代碼塊替換出去,如果TransCache空間任然不足,貝Ij將次先進(jìn)如的代碼塊替換出去,直到TransCache有足夠的空間分配給新的代碼塊。FIFO策略在一定程度上考慮程序的時(shí)間局部性,但FIFO算法的開(kāi)銷較大,二進(jìn)制翻譯系統(tǒng)一般很少直接使用它,而是和其他算法結(jié)合起來(lái)使用。
[0007]出了以上幾種TransCache管理方法外,還有一些其他的管理策略,如基于工作集的全清空策略、不替換策略、最大塊優(yōu)先替換策略等。基于工作集的全清空策略實(shí)現(xiàn)的基礎(chǔ)是程序的執(zhí)行需要明顯的階段區(qū)分,不替換策略要求TransCache的空間足夠大,最大塊優(yōu)先替換策略只考慮程序的空間局部性,而沒(méi)有考慮程序的時(shí)間局部性和執(zhí)行特性。
[0008]TransCache管理策略對(duì)于提高動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)的翻譯速度具有重要作用,它需要綜合考慮代碼時(shí)間空間局部性、管理開(kāi)銷、代碼缺失率等問(wèn)題,而現(xiàn)有的TransCache管理策略依然存在各種不足。因此,需要發(fā)明一種新的TransCache管理方法,用于在動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)中對(duì)TransCache進(jìn)行高效的管理。
【發(fā)明內(nèi)容】
[0009]本發(fā)明要解決的技術(shù)問(wèn)題是提供一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,以便提尚動(dòng)態(tài)一■進(jìn)制翻譯系統(tǒng)中TransCache的命中率和提尚熱代碼在TransCache中的留存時(shí)間,減少代碼塊替換次數(shù)和重復(fù)翻譯次數(shù)。
[0010]本發(fā)明的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,包括以下步驟:
1)將整個(gè)翻譯緩存劃分兩級(jí)緩存,所述兩級(jí)緩存包括第一級(jí)子代碼緩存和第二級(jí)熱代碼緩存,所述子代碼緩存用于存放普通代碼塊,所述熱代碼緩存用于存放熱代碼塊,其中,所述普通代碼塊為新翻譯的代碼塊和從熱代碼緩存中替換出來(lái)的代碼塊,所述熱代碼塊為熱度達(dá)到閾值的代碼塊;
2)當(dāng)有新的基本塊需要翻譯時(shí),根據(jù)所述基本塊的地址在所述熱代碼緩存查找,如果找到所述代碼塊,則執(zhí)行步驟7;
3)根據(jù)所述基本塊的地址在所述子代碼緩存查找,如果找到所述代碼塊,則執(zhí)行步驟
7;
4)計(jì)算緩存所述代碼塊需要的空間大小,如果所述子代碼緩存剩余空間大于所述代碼塊則執(zhí)行步驟6;
5)清空所述子代碼緩存,執(zhí)行步驟6;
6)翻譯所述基本塊,并將翻譯后的代碼塊存入所述子代碼緩存;
7)執(zhí)行所述代碼塊;
8)統(tǒng)計(jì)所述代碼塊的執(zhí)行次數(shù),如果所述執(zhí)行次數(shù)大于所述閾值,則將所述代碼塊緩存入所述熱代碼緩存;
9)將所述基本塊加入慢哈希表,將結(jié)果加入快哈希表。
[0011]所述步驟8中的熱代碼緩存包括如下步驟:
8-1)將所述熱代碼緩存空間劃分為相同大小的N個(gè)子塊;
8-2)根據(jù)所述熱代碼緩存空間的初始位置和子塊容量確定所有子塊的起始位置和終止位置,所述子塊容量為總?cè)萘康腘分之一;
8-3)設(shè)置一個(gè)當(dāng)前位置,表示所述熱代碼緩存區(qū)域中代碼存放的位置。當(dāng)程序開(kāi)始運(yùn)行時(shí),當(dāng)前位置即為第一子塊的初始位置。
[0012]所述步驟8中的熱代碼緩存也可以包括如下步驟:
8-1)計(jì)算緩存所述代碼塊需要的空間大小,判斷所述熱代碼緩存中當(dāng)前緩存子塊是否有足夠剩余空間存放新的代碼塊,如果所述緩存子塊剩余空間足夠存放所述代碼塊,則執(zhí)行步驟8-4;
8-2)若相鄰子塊已經(jīng)存放了代碼塊,則將該子塊已經(jīng)存儲(chǔ)的代碼塊緩存入子代碼緩存中,否則執(zhí)行步驟8-3;
8-3)將所述代碼塊存放在相鄰子塊中,執(zhí)行步驟9;
8-4)將所述的代碼塊存放在該緩存子塊中。
[0013]本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn):
1)本發(fā)明的管理方法將熱度達(dá)到一定閾值的代碼塊放入單獨(dú)的HotCache中,而HotCache中的代碼塊需要替換時(shí)并不直接替換出去,而是緩存入SubCache中,這種策略盡可能的提高了熱代碼在TransCache中的留存時(shí)間,提高了TransCache的命中率,這一點(diǎn)是全清空策略的缺陷所在;
2)本發(fā)明的管理方法在每次替換時(shí)不需要遍歷整個(gè)TransCache,較之LRU算法來(lái)說(shuō)節(jié)省了遍歷時(shí)間,同時(shí)也不如LRU復(fù)雜,這對(duì)提高翻譯效率至關(guān)重要;
3)對(duì)于嚴(yán)格的FIFO算法,由于沒(méi)有考慮程序的執(zhí)行特性,只是單純的按照FirstInFirst Out來(lái)替換代碼塊,這很可能把最熱的代碼給替換出去,本算法可以很好的避免這一問(wèn)題,在性能上較FIFO算法有了一定的提高。
[0014]4)本發(fā)明將整個(gè)TransCache劃分兩級(jí)緩存,兩級(jí)緩存包括level I級(jí)SubCache和level2級(jí)HotCache,其中SubCache用于存放普通代碼塊,HotCache用于存放熱代碼塊,兩級(jí)緩存各自所占比例可調(diào),從而可以根據(jù)源代碼大小、源體系結(jié)構(gòu)和目標(biāo)體系結(jié)構(gòu)等因素來(lái)定,提高TransCache管理效率。
【附圖說(shuō)明】
[0015]圖1為本發(fā)明中的QEMU動(dòng)態(tài)二進(jìn)制翻譯流程示意圖;
圖2為本發(fā)明的原理不意圖;
圖3為本發(fā)明中的SubCache處理流程示意圖;
圖4為本發(fā)明中的HotCache處理流程示意圖。
【具體實(shí)施方式】
[0016]下面結(jié)合本發(fā)明附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案,翻譯緩存TransCache管理方法進(jìn)行清楚、完整的描述。本實(shí)施例采用的動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)為QEMU系統(tǒng),顯然,所描述的實(shí)施例僅是本發(fā)明的一部分具體實(shí)施例,本方法也可以推廣到其他動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)中?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0017]本發(fā)明的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,將TransCache中的代碼塊按照他們的執(zhí)行次數(shù),即熱度來(lái)分,然后將熱代碼和普通代碼分開(kāi)緩存,在邏輯上形成一個(gè)多層次的TransCache,同時(shí),針對(duì)兩種代碼的特性選擇不同的管理策略。其實(shí)現(xiàn)的原理就是將TransCache劃分為L(zhǎng)I級(jí)子代碼緩存SubCache和L2級(jí)熱代碼緩存HotCache,在程序執(zhí)行過(guò)程中將新翻譯的代碼塊存儲(chǔ)在SubCache中,同時(shí)搜集代碼的Prof ile信息,當(dāng)代碼塊的熱度達(dá)到一定的閾值Limen時(shí),就將該代碼塊從SubCache中轉(zhuǎn)存至HotCache中。當(dāng)SubCache中發(fā)生替換時(shí)直接將代碼塊替換出TransCache,而HotCache發(fā)生替換時(shí)則將代碼塊替換到SubCache,這樣可以盡量讓熱代碼長(zhǎng)時(shí)間的保留在TransCache中。SubCache由于存放的是普通代碼,采用全清空這種簡(jiǎn)潔且不會(huì)產(chǎn)生碎片的代碼替換算法。而HotCache中存放的都是熱代碼,為了盡可能降低熱代碼替換頻次,將采用粗粒度FIFO替換算法。
[0018]本發(fā)明的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的TransCache管理方法,包括以下步驟:
I)將整個(gè)TransCache劃分兩級(jí)緩存,所述兩級(jí)緩存包括level I級(jí)SubCache和Ieve 12級(jí)HotCache,所述SubCache用于存放普通代碼塊,所述HotCache用于存放熱代碼塊,其中,所述普通代碼塊為新翻譯的代碼塊和從HotCache中替換出來(lái)的代碼塊,所述熱代碼塊為熱度達(dá)到閾值Limen的代碼塊。
[0019]2)當(dāng)有新的基本塊需要翻譯時(shí),根據(jù)所述基本塊的地址在所述HotCache查找,如果找到所述代碼塊,則執(zhí)行步驟7;
3)根據(jù)所述基本塊的地址在所述SubCache查找,如果找到所述代碼塊,則執(zhí)行步驟7;
4)計(jì)算緩存所述代碼塊需要的空間大小,如果所述SubCache剩余空間大于所述代碼塊則執(zhí)行步驟6;
5)清空所述SubCache,執(zhí)行步驟6;
6)翻譯所述基本塊,并將翻譯后的代碼塊存入所述SubCache;
7)執(zhí)行所述代碼塊;
8)統(tǒng)計(jì)所述代碼塊的執(zhí)行次數(shù),如果所述執(zhí)行次數(shù)大于所述閾值Limen,則將所述代碼塊緩存入所述HotCache;
9)將所述基本塊加入慢哈希表,將結(jié)果加入快哈希表。
[0020]上述步驟8中的熱代碼緩存HotCache包括如下步驟:
8-1)將所述HotCache空間劃分為相同大小的N個(gè)子塊;
8-2)根據(jù)所述HotCache空間的初始位置和子塊容量(總?cè)萘康腘分之一),確定所有子塊的起始位置和終止位置;
8-3)設(shè)置一個(gè)當(dāng)前位置,表示所述HotCache區(qū)域中代碼存放的位置。當(dāng)程序開(kāi)始運(yùn)行時(shí),當(dāng)前位置即為第一子塊的初始位置。
[0021 ] 上述步驟8中的熱代碼緩存HotCache也可以包括如下步驟:
8-1)計(jì)算緩存所述代碼塊需要的空間大小,判斷所述HotCache中當(dāng)前緩存子塊是否有足夠剩余空間存放新的代碼塊,如果所述緩存子塊剩余空間足夠存放所述代碼塊,則執(zhí)行步驟8-4
8-2)若相鄰子塊已經(jīng)存放了代碼塊,則將該子塊已經(jīng)存儲(chǔ)的代碼塊緩存入SubCache中,舍棄上一子塊的剩余空間,否則執(zhí)行步驟8-3;
8-3)將所述代碼塊存放在相鄰子塊中,執(zhí)行步驟9;
8-4)將所述的代碼塊存放在該緩存子塊中。
[0022]圖1為本發(fā)明中的QEMU動(dòng)態(tài)二進(jìn)制翻譯流程示意圖。圖2為本發(fā)明的原理示意圖。圖3為本發(fā)明中的SubCache處理流程示意圖。圖4為本發(fā)明中的HotCache處理流程示意圖。
[0023]從圖1?圖4可以看出,QEMU系統(tǒng)是由Fabrice Bellard開(kāi)發(fā)的一套開(kāi)源跨平臺(tái)模擬器,是當(dāng)前比較先進(jìn)的多元多目標(biāo)的動(dòng)態(tài)二進(jìn)制翻譯系統(tǒng)。QEMU系統(tǒng)首先將源平臺(tái)(如X86、AMD64、MIPS等)的可執(zhí)行二進(jìn)制代碼翻譯成中間代碼(TCG,tiny code generator),然后將TCG代碼翻譯成目標(biāo)平臺(tái)(如X86,PowerPC,ARM,Spare,Alpha,MIPS)的機(jī)器代碼。
[0024]QEMU平臺(tái)將基本塊組成一張哈希表,并且將塊內(nèi)指令的首個(gè)地址作為索引值。為了對(duì)基本塊進(jìn)行查找匹配,QEMU設(shè)計(jì)了兩張哈希表:快表和慢表。需要執(zhí)行一段代碼時(shí),QEMU系統(tǒng)首先依據(jù)虛擬的pc值在快表中查找。假如在快表中未查找到目標(biāo)基本塊,有兩種情況:(1)該基本塊尚未翻譯;(2)虛擬pc值匹配,但代碼段機(jī)制或相關(guān)寄存器值不匹配。此時(shí)會(huì)進(jìn)入慢速哈希表進(jìn)行查找,慢表中存儲(chǔ)所有已翻譯過(guò)的基本塊。對(duì)于第一種情況,QEMU系統(tǒng)在慢表中也不會(huì)找到目標(biāo)基本塊,此時(shí)會(huì)調(diào)用翻譯函數(shù)對(duì)該基本塊進(jìn)行二進(jìn)制翻譯,生成目標(biāo)代碼塊,并且執(zhí)行,同時(shí)將翻譯結(jié)果加入到慢表和快表中。而對(duì)于第二種情況,表明之前產(chǎn)生了哈希沖突,此時(shí),若代碼緩存區(qū)尚未改變即未進(jìn)行清空或者替換,則該基本塊還在代碼緩存之中,可以根據(jù)慢表中的哈希沖突鏈表進(jìn)行遍歷查找,得到所需基本塊,同時(shí)把它加入快表中。QEMU的動(dòng)態(tài)二進(jìn)制翻譯流程如圖1所示。
[0025]具體的,本發(fā)明的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的TransCache管理方法,如圖2所示,所述TransCache劃分兩級(jí)緩存,兩級(jí)緩存包括level I級(jí)SubCache和I eve 12級(jí)HotCache,其中SubCache用于存放普通代碼塊,HotCache用于存放熱代碼塊,SubCache米用全清空管理策略,HotCache采用粗粒度FIFO管理策略,SubCache中的代碼塊發(fā)生替換時(shí)直接從TransCache清除舊的的代碼塊,HotCache中的代碼塊發(fā)生替換時(shí)是替換到SubCache中,其具體包括以下步驟:
I)根據(jù)配置文件分配兩級(jí)緩存的大小,確定熱代碼塊閾值。所述兩級(jí)緩存包括Ievell級(jí)SubCache和level2級(jí)HotCache,所述閾值為閾值Limen。
[0026]2)翻譯第一個(gè)基本塊直到所述代碼塊翻譯結(jié)束,將翻譯后的代碼塊存入所述SubCache,執(zhí)行步驟5。
[0027]3)當(dāng)有新的基本塊需要翻譯時(shí),先根據(jù)所述基本塊的地址在所述HotCache中查找,若找到則執(zhí)行步驟5,若沒(méi)找到,則執(zhí)行步驟4
4)根據(jù)所述基本塊的地址在所述SubCache中查找中查找,若找到則執(zhí)行步驟5,若沒(méi)找到,則執(zhí)行SubCache管理流程,具體流程如圖3所示:
4-1)計(jì)算緩存所述代碼塊需要的空間大小,如果所述SubCache剩余空間大于所述代碼塊則執(zhí)行步驟4-6;
4-2)清空快速哈希表;
4-3)清空慢速哈希表;
4-4)將當(dāng)前目標(biāo)代碼區(qū)指針指向緩存區(qū)起始地址;
4-5)清空表頁(yè)內(nèi)容,將SubCache代碼塊個(gè)數(shù)清零;
4-6)翻譯所述代碼塊并給所述代碼塊分配存儲(chǔ)空間;
5)執(zhí)行所述代碼塊;
6)統(tǒng)計(jì)所述代碼塊的執(zhí)行次數(shù),如果所述執(zhí)行次數(shù)大于所述閾值Limen,則執(zhí)行HotCache管理流程,具體流程如圖4所示:
6-1)判斷所述HotCache中當(dāng)前緩存子塊是否有足夠剩余空間存放新的代碼塊,若有,則執(zhí)行步驟6-4
6-2)若相鄰子塊已經(jīng)存放了代碼塊,則將該子塊已經(jīng)存儲(chǔ)的代碼塊緩存入SubCache中,舍棄上一子塊的剩余空間,否則執(zhí)行步驟6-3;
6-3)將翻譯的代碼塊存放在相鄰子塊中,執(zhí)行步驟7;
6-4)將翻譯的代碼塊存放在該緩存子塊中;
7)將所述基本塊加入慢哈希表,將結(jié)果加入快哈希表。
[0028]以上所述的【具體實(shí)施方式】,對(duì)于本發(fā)明的技術(shù)路線,TransCache管理方法進(jìn)行清楚、完整的描述,應(yīng)理解的是,以上所述僅為本發(fā)明的【具體實(shí)施方式】而已,并不用于限定本發(fā)明的保護(hù)范圍,凡是在本發(fā)明的精神和原則之內(nèi),所做的任何修改,等同替換,改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項(xiàng)】
1.一種動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,其特征在于,所述的方法包括以下步驟: 將整個(gè)翻譯緩存劃分兩級(jí)緩存,所述兩級(jí)緩存包括第一級(jí)子代碼緩存和第二級(jí)熱代碼緩存,所述子代碼緩存用于存放普通代碼塊,所述熱代碼緩存用于存放熱代碼塊,其中,所述普通代碼塊為新翻譯的代碼塊和從熱代碼緩存中替換出來(lái)的代碼塊,所述熱代碼塊為熱度達(dá)到閾值的代碼塊; 當(dāng)有新的基本塊需要翻譯時(shí),根據(jù)所述基本塊的地址在所述熱代碼緩存查找,如果找到所述代碼塊,則執(zhí)行步驟7; 根據(jù)所述基本塊的地址在所述子代碼緩存查找,如果找到所述代碼塊,則執(zhí)行步驟7; 計(jì)算緩存所述代碼塊需要的空間大小,如果所述子代碼緩存剩余空間大于所述代碼塊則執(zhí)行步驟6; 清空所述子代碼緩存,執(zhí)行步驟6; 翻譯所述基本塊,并將翻譯后的代碼塊存入所述子代碼緩存; 執(zhí)行所述代碼塊; 統(tǒng)計(jì)所述代碼塊的執(zhí)行次數(shù),如果所述執(zhí)行次數(shù)大于所述閾值,則將所述代碼塊緩存入所述熱代碼緩存; 將所述基本塊加入慢哈希表,將結(jié)果加入快哈希表。2.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,其特征在于,所述步驟8中的熱代碼緩存包括步驟: 8-1)將所述熱代碼緩存空間劃分為相同大小的N個(gè)子塊; 8-2)根據(jù)所述熱代碼緩存空間的初始位置和子塊容量確定所有子塊的起始位置和終止位置,所述子塊容量為總?cè)萘康腘分之一; 8-3)設(shè)置一個(gè)當(dāng)前位置,表示所述熱代碼緩存區(qū)域中代碼存放的位置; 當(dāng)程序開(kāi)始運(yùn)行時(shí),當(dāng)前位置即為第一子塊的初始位置。3.根據(jù)權(quán)利要求1所述的動(dòng)態(tài)二進(jìn)制翻譯中基于代碼熱度的翻譯緩存管理方法,其特征在于,所述步驟8中的熱代碼緩存包括步驟: 8-1)計(jì)算緩存所述代碼塊需要的空間大小,判斷所述熱代碼緩存中當(dāng)前緩存子塊是否有足夠剩余空間存放新的代碼塊,如果所述緩存子塊剩余空間足夠存放所述代碼塊,則執(zhí)行步驟8-4; 8-2)若相鄰子塊已經(jīng)存放了代碼塊,則將該子塊已經(jīng)存儲(chǔ)的代碼塊緩存入子代碼緩存中,否則執(zhí)行步驟8-3; 8-3 )將所述代碼塊存放在相鄰子塊中,執(zhí)行步驟9; 8-4)將所述的代碼塊存放在該緩存子塊中。
【文檔編號(hào)】G06F9/45GK105843664SQ201610245988
【公開(kāi)日】2016年8月10日
【申請(qǐng)日】2016年4月20日
【發(fā)明人】鄧霏, 高峰
【申請(qǐng)人】中國(guó)工程物理研究院計(jì)算機(jī)應(yīng)用研究所