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

動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法及裝置的制作方法

文檔序號:6386187閱讀:239來源:國知局
專利名稱:動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法及裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機(jī)領(lǐng)域的二進(jìn)制翻譯技術(shù),尤其涉及一種動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法及裝置。
背景技術(shù)
編譯是計算機(jī)自身領(lǐng)域的關(guān)鍵技術(shù),二進(jìn)制翻譯則是編譯的一個重要研究方向。早在1987年HP公司就開發(fā)了第一個商用二進(jìn)制翻譯系統(tǒng)Bergh et al。接下來,許多公司和研究機(jī)構(gòu)也相繼展開了這方面的研究,其中最具有代表性的有HP、IBM、Digital、AT&T、APPLE、Transmeta、澳大利亞Queensland大學(xué)、奧地利維也納技術(shù)大學(xué)等,目前,Intel設(shè)立在中國的軟件中心也加入了這個行列。
二進(jìn)制翻譯目前正在成為解決軟件移植問題的一個研究熱點(diǎn)。眾所周知,新開發(fā)的處理器如果其ISA不向前兼容,則會失去現(xiàn)有軟件的支持,影響其推廣和應(yīng)用。這就迫使設(shè)計者使用寶貴的芯片空間來兼容老處理器,這樣既增加新處理器的復(fù)雜度和功耗,影響其主頻的提高,又阻礙了處理器的發(fā)展。二進(jìn)制翻譯技術(shù)為新舊處理器架起了一座橋梁,將現(xiàn)有的軟件移植到新開發(fā)處理器上執(zhí)行,使得新處理器擺脫向前兼容的約束。
二進(jìn)制翻譯技術(shù)對促進(jìn)國產(chǎn)處理器的發(fā)展也很有意義。近十多年來,中國的信息產(chǎn)業(yè)得以飛速發(fā)展,并正在逐步走向成熟。隨著知識和經(jīng)驗(yàn)的積累,業(yè)界精英們開始向計算機(jī)領(lǐng)域中最為核心的技術(shù)挑戰(zhàn)。以“龍芯”、“星光”、“方舟”、“漢芯”、“神威”、“萬通”、“北大眾志”等為代表的國產(chǎn)通用或嵌入式微處理器不斷涌現(xiàn),打破了中國無“芯”的局面。但由于Intel在X86系列微處理器上各種專利的限制,使得國內(nèi)的許多微處理器設(shè)計者不得不采用與X86系列微處理器不兼容的ISA。眾所周知,X86系列機(jī)器作為主流機(jī)型,已經(jīng)擁有極其豐富的應(yīng)用軟件群。ISA的不兼容導(dǎo)致國產(chǎn)微處理器的應(yīng)用軟件與X86微處理器相比顯得有些匱乏,從某種程度上影響了其推廣和應(yīng)用的步伐。因此開展二進(jìn)制翻譯的研究,同樣可以豐富國產(chǎn)處理器的應(yīng)用軟件,為這些民族產(chǎn)業(yè)擴(kuò)大市場提供支持。
二進(jìn)制翻譯采用的策略有動態(tài)和靜態(tài)之分。所謂動態(tài)二進(jìn)制翻譯是指,代碼的翻譯在程序執(zhí)行的過程中進(jìn)行,邊執(zhí)行邊翻譯。靜態(tài)二進(jìn)制翻譯則是在程序執(zhí)行前,由翻譯器對源二進(jìn)制程序直接分析,并進(jìn)行翻譯形成新的可執(zhí)行程序。由于程序中存在“間接轉(zhuǎn)移”、“間接調(diào)用”、“代碼自修改”等問題,只有采用動態(tài)翻譯才能使這些問題得以解決,并且動態(tài)優(yōu)化的自適應(yīng)性還會帶來靜態(tài)翻譯所不具備的好處。
研究中發(fā)現(xiàn),動態(tài)二進(jìn)制翻譯雖然能夠彌補(bǔ)靜態(tài)翻譯中的不足,但其缺點(diǎn)也十分明顯。動態(tài)翻譯和優(yōu)化都占用運(yùn)行時間,導(dǎo)致不能采用較為深層次的優(yōu)化策略。這些策略在提高性能的同時,其行為本身也會占用總開銷,從而造成系統(tǒng)性能的下降。
在進(jìn)行靜態(tài)翻譯時,由于間接跳轉(zhuǎn)和間接調(diào)用的目標(biāo)的不確定,導(dǎo)致該步驟無法獲得完備的控制流信息,由此而產(chǎn)生了兩個關(guān)鍵性問題(1)無法準(zhǔn)確確定基本塊的邊界,(2)不能夠跨基本塊進(jìn)行代碼優(yōu)化。這兩個問題會迫使靜態(tài)翻譯不得不采取保守策略,從而影響了所產(chǎn)生的代碼質(zhì)量,降低了系統(tǒng)的整體性能。
美國的Digital公司的FX!32系統(tǒng)采用了動靜結(jié)合的二進(jìn)制翻譯手段,預(yù)留入口點(diǎn),它將函數(shù)入口和CALL指令的下一個block留作入口。FX!32在執(zhí)行過程中,當(dāng)從靜態(tài)翻譯所得的代碼中跳轉(zhuǎn)到未知地址時,則轉(zhuǎn)入動態(tài)執(zhí)行階段,該階段完全由解釋器來完成。該系統(tǒng)雖然也解決了上述兩個問題,但是它忽略了一些其它重要的入口(比如動態(tài)部分執(zhí)行過程中,遇到的已經(jīng)翻譯過的部分,此時應(yīng)該盡早進(jìn)入已經(jīng)翻譯過的代碼中執(zhí)行,為此需要靜態(tài)翻譯時留出相應(yīng)的入口)。由于必要的入口預(yù)留的不充分,從而導(dǎo)致控制進(jìn)入解釋器后,長時間無法返回靜態(tài)翻譯所生成的本地碼。眾所周知解釋器的執(zhí)行效率比較低,長時間通過解釋器來執(zhí)行源二進(jìn)制代碼,將會嚴(yán)重影響系統(tǒng)的整體性能(當(dāng)前動靜結(jié)合二進(jìn)制翻譯的弊端)。
另外,F(xiàn)X!32動態(tài)執(zhí)行完全依賴于解釋器。當(dāng)被執(zhí)行的部分是一段較熱的代碼時,解釋器將會成為系統(tǒng)性能不能充分發(fā)揮的瓶頸。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法,克服現(xiàn)有技術(shù)動態(tài)執(zhí)行中長時間無法返回靜態(tài)所生成的本地碼的問題,以及動態(tài)是單純采用解釋執(zhí)行效率低的問題,提高代碼質(zhì)量和系統(tǒng)整體性能。
在介紹本發(fā)明之前,我們先介紹一個在本文檔中使用的一個概念翻譯單元。在翻譯過程中,由于翻譯程序所見到的只是二進(jìn)制代碼,并且這些代碼中可能存在間接的分支跳轉(zhuǎn)指令,另外編譯器為了優(yōu)化,還經(jīng)常對函數(shù)尾部進(jìn)行鏈接,這些都會導(dǎo)致翻譯程序無法準(zhǔn)確地劃分一個函數(shù)的邊界。為此,本系統(tǒng)在處理二進(jìn)制程序時,是以翻譯單元為單位進(jìn)行的。這里稱滿足如下條件的代碼段為翻譯單元a)翻譯單元的起始入口一個翻譯單元以函數(shù)調(diào)用指令的目標(biāo)地址作為起始入口;b)從入口開始,依次按照控制流分析相應(yīng)的指令,當(dāng)遇到靜態(tài)時無法確定的目標(biāo)的間接跳轉(zhuǎn)目標(biāo)的指令、函數(shù)返回指令時,這些指令作為翻譯單元的出口。
為了解決上述技術(shù)問題,本發(fā)明提供一種動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法,包括以下步驟a)從靜態(tài)可翻代碼中選取一些特殊的指令,將這些指令留作為入口,保守處理;b)除了留作入口的指令外,其它的地方無需進(jìn)行保守處理,采用跨基本塊的各種全局優(yōu)化策略對翻譯代碼進(jìn)行深度優(yōu)化。
c)動態(tài)翻譯執(zhí)行模塊啟動后,將靜態(tài)翻譯的代碼和相應(yīng)的入口裝入內(nèi)存,并優(yōu)先運(yùn)行靜態(tài)本地碼。
d)在動態(tài)執(zhí)行過程中,如果遇到尚未翻譯過的代碼時,由動態(tài)翻譯器根據(jù)即將執(zhí)行的地址對這些代碼進(jìn)行即時翻譯執(zhí)行,將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接,即時翻譯直到遇到靜態(tài)翻譯所留出的入口時,再重新轉(zhuǎn)入靜態(tài)翻譯的代碼進(jìn)行執(zhí)行。
在上述方案中,步驟a)中的入口的選擇按照如下原則被翻譯的翻譯單元的入口所在基本塊;函數(shù)調(diào)用指令的下一條指令所在基本塊;入口數(shù)量超過某一個自定義門限的基本塊;動態(tài)輪廓信息搜集到的,其它翻譯單元中的分支跳轉(zhuǎn)指令進(jìn)入的本翻譯單元的目標(biāo)地址。
在上述方案中,步驟a)中,對這些被留作入口的地方進(jìn)行保守處理,不允許全局優(yōu)化策略打亂這些入口處的狀態(tài),保持與源二進(jìn)制代碼相同的屬性、寄存器和其它機(jī)器狀態(tài)的一致。
本發(fā)明還提供一種靜態(tài)翻譯方法,包括以下步驟a)如果存在上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息,讀入這些信息,用這些信息作為后續(xù)步驟地指導(dǎo)信息。如果不存在,則將用于指導(dǎo)的輪廓信息設(shè)為空;b)反匯編源二進(jìn)制代碼;c)設(shè)置入口信息,將這些入口記錄在入口信息表中;d)進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化;e)保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
在上述方案中,步驟a)中,輪廓信息包括block的熱度信息,間接目標(biāo)信息和目標(biāo)不在本翻譯單元的分支跳轉(zhuǎn)指令的地址。
在上述方案中,步驟b)中,當(dāng)遇到間接跳轉(zhuǎn)和間接調(diào)用時,查找間接目標(biāo)信息表,如果已經(jīng)有了相應(yīng)的目標(biāo),則繼續(xù)進(jìn)行;否則,結(jié)束。
在步驟c)中,將那些可能作為其它代碼的目標(biāo)的基本塊留作入口,這些入口包括被翻譯函數(shù)的入口所在基本塊,函數(shù)調(diào)用指令的下一條指令所在基本塊,入口數(shù)量超過某一個自定義門限的基本塊。
本發(fā)明還提供一種動態(tài)翻譯執(zhí)行方法,包括以下步驟a)裝入源二進(jìn)制代碼;b)裝入靜態(tài)本地碼以及相應(yīng)的入口信息表;c)執(zhí)行被翻譯文件;d)導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用。
在上述方案中,步驟c)中包含以下步驟c1)根據(jù)文件系統(tǒng)約定,找到程序入口點(diǎn);c2)啟動被執(zhí)行文件對應(yīng)的本地碼執(zhí)行,本地碼執(zhí)行過程中,遇到尚未翻譯的指令或者程序結(jié)束時,退出本地碼;c3)根據(jù)操作系統(tǒng)的約定判斷被執(zhí)行程序是否結(jié)束,如果已經(jīng)結(jié)束,則結(jié)束步驟c),否則執(zhí)行下一步;c4)獲取即將執(zhí)行的源二進(jìn)制代碼的地址,將以該地址為起始地址的塊(block)進(jìn)行即時翻譯,產(chǎn)生對應(yīng)的本地碼;c5)將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接;c6)將即將執(zhí)行的指令的地址設(shè)置成入口點(diǎn),然后執(zhí)行步驟c2)。
步驟c5)包括以下步驟c51)建立與后繼的鏈接,找出本塊(block)的所有后繼,如果某些后繼是靜態(tài)本地碼的入口,則建立與靜態(tài)本地碼入口的鏈接;對于剩下的后繼,如果某些后繼已經(jīng)被翻譯成本地碼,則與這些本地碼建立連接;如果還剩有后繼尚未鏈接,此時在前驅(qū)信息表中記錄下來后繼所在的塊以及它的前驅(qū);c52)建立與前驅(qū)的鏈接,查詢前驅(qū)信息表,將以本塊為前驅(qū)的塊與本塊建立鏈接。
本發(fā)明還提供一種靜態(tài)翻譯器,其特征在于包括輪廓信息讀入模塊,反匯編模塊,入口設(shè)置模塊、翻譯優(yōu)化模塊和保存模塊,其中輪廓信息讀入模塊用于讀入上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息;反匯編模塊用于反匯編源二進(jìn)制代碼;入口設(shè)置模塊用于設(shè)置入口信息,將這些入口記錄在入口信息表中;翻譯優(yōu)化模塊用于進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化;保存模塊用于保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
本發(fā)明還提供一種動態(tài)執(zhí)行翻譯器,包括第一載入模塊,第二載入模塊,執(zhí)行翻譯模塊,即時翻譯及鏈接模塊,和導(dǎo)出模塊,其中第一載入模塊用于裝入源二進(jìn)制代碼;第二載入模塊用于裝入靜態(tài)本地碼以及相應(yīng)的入口信息表;執(zhí)行翻譯模塊用于執(zhí)行被翻譯文件;導(dǎo)出模塊用于導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用;且在執(zhí)行翻譯模塊中還包含即時翻譯模塊和鏈接模塊,分別用于對執(zhí)行過程中所遇到的尚未翻譯的模塊進(jìn)行即時翻譯和鏈接。
由上可知,本發(fā)明通過預(yù)留必要的入口,由動態(tài)翻譯執(zhí)行器進(jìn)行即時翻譯,并通過和預(yù)留入口相鏈接的方式發(fā)揮系統(tǒng)的性能。增加設(shè)置入口和采用即時翻譯,克服現(xiàn)有技術(shù)動態(tài)執(zhí)行中長時間無法返回靜態(tài)所生成的本地碼的問題,以及動態(tài)是單純采用解釋執(zhí)行效率低的問題,提高代碼質(zhì)量和系統(tǒng)整體性能。


圖1是本發(fā)明實(shí)施例的動靜結(jié)合的二進(jìn)制翻譯系統(tǒng)結(jié)構(gòu)圖;圖2是本發(fā)明實(shí)施例的靜態(tài)翻譯結(jié)果示意圖;圖3是本發(fā)明動靜結(jié)合的工作流程圖;圖4a是本發(fā)明信息不完備的處理方式示意圖;圖4b是本發(fā)明信息不完備的方法流程圖;圖5a是本發(fā)明實(shí)施例中靜態(tài)翻譯器工作流程圖;圖5b是本發(fā)明實(shí)施例中動態(tài)執(zhí)行翻譯器工作流程圖;圖6a是本發(fā)明靜態(tài)翻譯器的結(jié)構(gòu)圖;圖6b是本發(fā)明動態(tài)執(zhí)行翻譯器的結(jié)構(gòu)圖。
具體實(shí)施例方式
本發(fā)明給出了一個動靜結(jié)合的二進(jìn)制翻譯的方案,并著重對其中所遇到的靜態(tài)信息不確定性的問題給出相應(yīng)的解決方法。
為了便于對本發(fā)明的理解,這里先介紹一下本發(fā)明的基本原理,然后給出相應(yīng)的實(shí)施方案。
動靜結(jié)合的二進(jìn)制翻譯系統(tǒng)由兩大部分組成,如圖1所示。分別是“靜態(tài)翻譯器”和“動態(tài)翻譯執(zhí)行器”,二者相互配合完成整個二進(jìn)制翻譯任務(wù)。靜態(tài)翻譯器的作用是在程序未執(zhí)行之前,根據(jù)動態(tài)輪廓信息搜集(profiling)的結(jié)果將源二進(jìn)制代碼進(jìn)行靜態(tài)翻譯,翻譯成靜態(tài)翻譯結(jié)果。該結(jié)果包括翻譯后的目標(biāo)機(jī)代碼(稱之為“靜態(tài)本地碼”)以及一些輔助信息,供動態(tài)翻譯執(zhí)行器使用(如圖2所示)。動態(tài)翻譯執(zhí)行器獲取這些信息后,將源二進(jìn)制代碼和靜態(tài)本地碼裝入,動態(tài)啟動被翻譯的程序執(zhí)行。并在執(zhí)行過程中記錄輪廓信息搜集的結(jié)果,供靜態(tài)翻譯器下一次翻譯時使用,其執(zhí)行流程如圖3所示。該系統(tǒng)中,動靜態(tài)翻譯交替執(zhí)行,經(jīng)過若干次交替后,被翻譯程序達(dá)到穩(wěn)定。
我們知道,在靜態(tài)翻譯時由于間接跳轉(zhuǎn)、間接調(diào)用的出現(xiàn)會導(dǎo)致靜態(tài)信息的不確定性,使得靜態(tài)翻譯器無法準(zhǔn)確地定位間接跳轉(zhuǎn)的目標(biāo),從而無法準(zhǔn)確地判斷基本塊的邊界,以及每個基本塊準(zhǔn)確的前驅(qū)。這將會嚴(yán)重影響跨基本塊的全局優(yōu)化策略的使用,從而影響翻譯所產(chǎn)生的代碼質(zhì)量。
本發(fā)明中,采用如下方法來解決這個問題如圖2所示,靜態(tài)翻譯器將被翻譯的可執(zhí)行代碼分為兩個部分,分別是靜態(tài)可翻譯的代碼和靜態(tài)暫時不可翻譯的代碼,靜態(tài)翻譯器對靜態(tài)可翻的代碼進(jìn)行翻譯。
參見圖4b,步驟10,從靜態(tài)可翻代碼中選取一些特殊的block(塊),將這些block留作為入口,如圖4a所示。在翻譯優(yōu)化過程中對這些被留作入口的地方進(jìn)行保守處理,不允許全局優(yōu)化策略打亂這些入口處的狀態(tài),即保持與源二進(jìn)制代碼相同的屬性、寄存器和其它機(jī)器狀態(tài)的一致。
步驟20,除了留作入口的指令外,其它的地方無需進(jìn)行保守處理,可以采用跨基本塊的各種全局優(yōu)化策略對翻譯代碼進(jìn)行深度優(yōu)化。
步驟30,動態(tài)翻譯執(zhí)行模塊啟動后,將靜態(tài)翻譯的代碼和相應(yīng)的入口裝入內(nèi)存,并優(yōu)先運(yùn)行靜態(tài)本地碼。
步驟40,在動態(tài)執(zhí)行過程中,如果遇到尚未翻譯過的代碼時,由動態(tài)翻譯器根據(jù)即將執(zhí)行的地址對這些代碼進(jìn)行即時翻譯執(zhí)行,將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接,即時翻譯直到遇到靜態(tài)翻譯所留出的入口時,再重新轉(zhuǎn)入靜態(tài)翻譯的代碼進(jìn)行執(zhí)行。
另外,為了盡可能地在靜態(tài)時翻譯更多的代碼,動態(tài)翻譯執(zhí)行器采集輪廓信息,該輪廓信息除了包括編譯中常用的熱度信息外,還包括間接目標(biāo)信息,用以記錄實(shí)際運(yùn)行時的間接目標(biāo),供下一次靜態(tài)翻譯時,跨過間接目標(biāo)指令進(jìn)行翻譯。
上述解決方案可以解決靜態(tài)翻譯時的信息不確定問題,動態(tài)記錄的間接目標(biāo)可以擴(kuò)大靜態(tài)所無法獲得的信息,通過設(shè)置入口信息,限制不可翻譯代碼部分與可翻譯代碼的銜接,使靜態(tài)可以翻譯的部分保持了自封閉性,為靜態(tài)翻譯提供更大的優(yōu)化空間。這些限制由動態(tài)翻譯執(zhí)行器進(jìn)行動態(tài)翻譯進(jìn)行彌補(bǔ),從而使得整個系統(tǒng)能夠有機(jī)且高效地運(yùn)行。
針對上述原理,本方法的具體實(shí)施步驟如下需要說明的是,本發(fā)明的目的是解決靜態(tài)翻譯時信息不確定性的問題,因此實(shí)施步驟中著重對這個問題的解決進(jìn)行描述,那些二進(jìn)制翻譯中常用的方法將不在這里贅述。
參見圖5a和圖5b,步驟100,如果存在上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息,讀入這些信息。如果不存在,則將輪廓信息設(shè)為空。在步驟100中,輪廓信息包括熱度信息、間接目標(biāo)信息表和目標(biāo)不在本翻譯單元的分支跳轉(zhuǎn)指令及其目標(biāo)地址。
步驟110,反匯編源二進(jìn)制代碼。在步驟110中,當(dāng)遇到間接跳轉(zhuǎn)和間接調(diào)用時,查找間接目標(biāo)信息表,如果已經(jīng)有了相應(yīng)的目標(biāo),則繼續(xù)進(jìn)行;否則,結(jié)束本分支路徑的反匯編工作,按照深度優(yōu)先搜索的方法對其它分支路徑進(jìn)行反匯編。
步驟120,設(shè)置入口信息,將這些入口記錄在入口信息表中。在步驟120中,將那些可能作為其它代碼的目標(biāo)的基本塊留作入口。這些入口包括(1)被翻譯的翻譯單元的入口所在基本塊,(2)函數(shù)調(diào)用指令的下一條指令所在基本塊,(3)入口數(shù)量超過某一個自定義門限的基本塊(根據(jù)程序的控制流圖來定義)(4)動態(tài)輪廓信息搜集到的,其它翻譯單元中的分支跳轉(zhuǎn)指令進(jìn)入的本翻譯單元的目標(biāo)地址。
步驟130,進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化在步驟130中,可以根據(jù)需求選用編譯領(lǐng)域中所提供的策略。
步驟140,保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
步驟150,裝入源二進(jìn)制代碼,其裝入規(guī)則按照操作系統(tǒng)的約定進(jìn)行即可。
步驟160,裝入靜態(tài)本地碼以及相應(yīng)的入口信息表。
步驟170,執(zhí)行被翻譯文件。在步驟170中,從程序入口開始執(zhí)行翻譯過的代碼,當(dāng)遇到尚未翻譯的部分,暫停對翻譯過的代碼的執(zhí)行。接下來對即將執(zhí)行的代碼進(jìn)行即時翻譯,并記錄間接目標(biāo),然后執(zhí)行新翻譯所產(chǎn)生的代碼。將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接。這樣繼續(xù)下去,直到遇到靜態(tài)翻譯所留出的程序入口,轉(zhuǎn)入靜態(tài)翻譯代碼中執(zhí)行。通過這種方式,完成對被翻譯文件的執(zhí)行。
也就是說,步驟170包括以下步驟步驟1,根據(jù)文件系統(tǒng)約定,找到程序入口點(diǎn)。
步驟2,根據(jù)入口點(diǎn),找到本地碼中對應(yīng)的指令地址,將控制轉(zhuǎn)交到該指令,啟動被執(zhí)行文件對應(yīng)的本地碼執(zhí)行,本地碼執(zhí)行過程中,當(dāng)遇到尚未翻譯的指令或者程序結(jié)束時,退出本地碼。
步驟3,根據(jù)操作系統(tǒng)的約定判斷被執(zhí)行程序是否結(jié)束,如果已經(jīng)結(jié)束,則結(jié)束步驟170,否則執(zhí)行下一步。
步驟4,獲取即將執(zhí)行的源二進(jìn)制代碼的地址,將以該地址為起始地址的塊(block)進(jìn)行即時翻譯,產(chǎn)生對應(yīng)的本地碼。
步驟5,將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接。
在步驟5中又包含如下步驟步驟5a,建立與后繼的鏈接,找出本block的所有后繼,如果某些后繼是靜態(tài)本地碼的入口,則建立與靜態(tài)本地碼入口的鏈接;對于剩下的后繼,如果某些后繼已經(jīng)被翻譯成本地碼,則與這些本地碼建立連接;如果還剩有后繼尚未鏈接,說明這些后繼所對應(yīng)的block尚未翻譯,此時在前驅(qū)信息表中記錄下來后繼所在的block以及它的前驅(qū)。
步驟5b,建立與前驅(qū)的鏈接,查詢前驅(qū)信息表,將以本block為前驅(qū)的block與本block建立鏈接。
步驟6,將即將執(zhí)行的指令的地址設(shè)置成入口點(diǎn),然后執(zhí)行步驟2。
步驟180,導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用。
下面參見圖6a和6b詳細(xì)說明靜態(tài)翻譯器和動態(tài)翻譯執(zhí)行器。
如圖6a所示,靜態(tài)翻譯器包括輪廓信息讀入模塊,反匯編模塊,入口設(shè)置模塊、翻譯優(yōu)化模塊和保存模塊。該靜態(tài)翻譯器的主要功能是,根據(jù)上一次動態(tài)翻譯執(zhí)行器所獲得的輪廓信息(如果有的話),盡可能地進(jìn)行靜態(tài)翻譯。其中,輪廓信息讀入模塊用于讀入上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息;反匯編模塊用于反匯編源二進(jìn)制代碼;入口設(shè)置模塊用于設(shè)置入口信息,將這些入口記錄在入口信息表中;翻譯優(yōu)化模塊用于進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化;保存模塊用于保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
如圖6b所示,動態(tài)翻譯執(zhí)行器包括第一載入模塊,第二載入模塊,執(zhí)行翻譯模塊和導(dǎo)出模塊。其中,第一載入模塊用于裝入源二進(jìn)制代碼;第二載入模塊用于裝入靜態(tài)本地碼以及相應(yīng)的入口信息表;執(zhí)行翻譯模塊用于執(zhí)行被翻譯文件;導(dǎo)出模塊用于導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用;在執(zhí)行翻譯模塊中還包含即時翻譯模塊(未示出)和鏈接模塊(未示出),分別用于對執(zhí)行過程中所遇到的尚未翻譯的模塊進(jìn)行即時翻譯和鏈接。
最后所應(yīng)說明的是以上實(shí)施例僅用以說明而非限制本發(fā)明的技術(shù)方案,盡管參照上述實(shí)施例對本發(fā)明進(jìn)行了詳細(xì)說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解依然可以對本發(fā)明進(jìn)行修改或者等同替換,而不脫離本發(fā)明的精神和范圍的任何修改或局部替換,其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法包括以下步驟a)從靜態(tài)可翻代碼中選取一些特殊的指令,將這些指令留作為入口,保守處理;b)除了留作入口的指令外,其它的地方無需進(jìn)行保守處理,采用跨基本塊的各種全局優(yōu)化策略對翻譯代碼進(jìn)行深度優(yōu)化。c)動態(tài)翻譯執(zhí)行模塊啟動后,將靜態(tài)翻譯的代碼和相應(yīng)的入口裝入內(nèi)存,并優(yōu)先運(yùn)行靜態(tài)本地碼。d)在動態(tài)執(zhí)行過程中,如果遇到尚未翻譯過的代碼時,由動態(tài)翻譯器根據(jù)即將執(zhí)行的地址對這些代碼進(jìn)行即時翻譯執(zhí)行,將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接,即時翻譯直到遇到靜態(tài)翻譯所留出的入口時,再重新轉(zhuǎn)入靜態(tài)翻譯的代碼進(jìn)行執(zhí)行。
2.如權(quán)利要求1所述的方法,其特征在于,步驟a)中的入口為被翻譯的翻譯單元的入口所在基本塊;函數(shù)調(diào)用指令的下一條指令所在基本塊;入口數(shù)量超過某一個自定義門限的基本塊;及動態(tài)輪廓信息搜集到的,其它翻譯單元中的分支跳轉(zhuǎn)指令進(jìn)入的本翻譯單元的目標(biāo)地址。
3.如權(quán)利要求2所述的方法,其特征在于,所述翻譯單元是一代碼段;所述翻譯單元以函數(shù)調(diào)用指令或分支跳轉(zhuǎn)指令的目標(biāo)地址作為起始入口;從入口開始,依次按照控制流分析相應(yīng)的指令,當(dāng)遇到靜態(tài)時無法確定的目標(biāo)的間接跳轉(zhuǎn)目標(biāo)的指令、函數(shù)返回指令時,這些指令翻譯所述翻譯單元的出口。
4.如權(quán)利要求1所述的方法,其特征在于,步驟a)中,對這些被留作入口的地方進(jìn)行保守處理,不允許全局優(yōu)化策略打亂這些入口處的狀態(tài),保持與源二進(jìn)制代碼相同的屬性、寄存器和其它機(jī)器狀態(tài)的一致。
5.一種靜態(tài)翻譯方法,包括以下步驟a)如果存在上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息,讀入這些信息,用這些信息作為后續(xù)步驟地指導(dǎo)信息。如果不存在,則將用于指導(dǎo)的輪廓信息設(shè)為空;b)反匯編源二進(jìn)制代碼;c)設(shè)置入口信息,將這些入口記錄在入口信息表中;d)進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化;e)保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
6.如權(quán)力要求5所述的方法,其特征在于,步驟a)中,輪廓信息包括塊的熱度信息,間接目標(biāo)信息和目標(biāo)不在本翻譯單元的分支跳轉(zhuǎn)指令及其目標(biāo)地址。
7.如權(quán)利要求5所述的方法,其特征在于,步驟b)中,當(dāng)遇到間接跳轉(zhuǎn)和間接調(diào)用時,查找間接目標(biāo)信息表,如果已經(jīng)有了相應(yīng)的目標(biāo),則繼續(xù)進(jìn)行;否則,結(jié)束。在步驟c)中,將那些可能作為其它代碼的目標(biāo)的基本塊留作入口,這些入口包括被翻譯的翻譯單元的入口所在基本塊,函數(shù)調(diào)用指令的下一條指令所在基本塊,入口數(shù)量超過某一個自定義門限的基本塊,及動態(tài)輪廓信息搜集到的,其它翻譯單元中的分支跳轉(zhuǎn)指令進(jìn)入的本翻譯單元的目標(biāo)地址。
8.一種動態(tài)翻譯執(zhí)行方法,包括以下步驟a)裝入源二進(jìn)制代碼;b)裝入靜態(tài)本地碼以及相應(yīng)的入口信息表;c)執(zhí)行被翻譯文件;d)導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用。
9.如權(quán)利要求8所述的方法,其特征在于,步驟c)中包含以下步驟c1)根據(jù)文件系統(tǒng)約定,找到程序入口點(diǎn);c2)啟動被執(zhí)行文件對應(yīng)的本地碼執(zhí)行,本地碼執(zhí)行過程中,遇到尚未翻譯的指令或者程序結(jié)束時,退出本地碼;c3)根據(jù)操作系統(tǒng)的約定判斷被執(zhí)行程序是否結(jié)束,如果已經(jīng)結(jié)束,則結(jié)束步驟c),否則執(zhí)行下一步;c4)獲取即將執(zhí)行的源二進(jìn)制代碼的地址,將以該地址為起始地址的塊(block)進(jìn)行即時翻譯,產(chǎn)生對應(yīng)的本地碼;c5)將動態(tài)生成的本地碼之間以及靜態(tài)生成的本地碼進(jìn)行鏈接;c6)將即將執(zhí)行的指令的地址設(shè)置成入口點(diǎn),然后執(zhí)行步驟c2)。
10.如權(quán)利要求9所述的方法,其特征在于,步驟c5)包括以下步驟c51)建立與后繼的鏈接,找出本塊(block)的所有后繼,如果某些后繼是靜態(tài)本地碼的入口,則建立與靜態(tài)本地碼入口的鏈接;對于剩下的后繼,如果某些后繼已經(jīng)被翻譯成本地碼,則與這些本地碼建立連接;如果還剩有后繼尚未鏈接,此時在前驅(qū)信息表中記錄下來后繼所在的塊以及它的前驅(qū);c52)建立與前驅(qū)的鏈接,查詢前驅(qū)信息表,將以本塊為前驅(qū)的塊與本塊建立鏈接。
11.一種靜態(tài)翻譯器,其特征在于包括輪廓信息讀入模塊,反匯編模塊,入口設(shè)置模塊、翻譯優(yōu)化模塊和保存模塊,其中輪廓信息讀入模塊用于讀入上一次動態(tài)翻譯執(zhí)行時所獲得的輪廓信息;反匯編模塊用于反匯編源二進(jìn)制代碼;入口設(shè)置模塊用于設(shè)置入口信息,將這些入口記錄在入口信息表中;翻譯優(yōu)化模塊用于進(jìn)行靜態(tài)翻譯,除了留作入口的地方,其它均采用深度優(yōu)化策略進(jìn)行優(yōu)化;保存模塊用于保存翻譯后的代碼和入口信息表,以供動態(tài)翻譯執(zhí)行器使用。
12.一種動態(tài)執(zhí)行翻譯器,其特征在于包括第一載入模塊,第二載入模塊,執(zhí)行翻譯模塊,即時翻譯及鏈接模塊,和導(dǎo)出模塊,其中第一載入模塊用于裝入源二進(jìn)制代碼;第二載入模塊用于裝入靜態(tài)本地碼以及相應(yīng)的入口信息表;執(zhí)行翻譯模塊用于執(zhí)行被翻譯文件;導(dǎo)出模塊用于導(dǎo)出輪廓信息和間接目標(biāo)信息表供靜態(tài)翻譯時使用;且在執(zhí)行翻譯模塊中還包含即時翻譯模塊和鏈接模塊,分別用于對執(zhí)行過程中所遇到的尚未翻譯的模塊進(jìn)行即時翻譯和鏈接。
全文摘要
本發(fā)明公開了動靜結(jié)合二進(jìn)制翻譯中靜態(tài)信息不完備的處理方法及裝置,通過預(yù)留必要的入口,由動態(tài)翻譯執(zhí)行器進(jìn)行即時翻譯,并通過和預(yù)留入口相鏈接的方式發(fā)揮系統(tǒng)的性能。增加設(shè)置入口和采用即時翻譯,克服現(xiàn)有技術(shù)動態(tài)執(zhí)行中長時間無法返回靜態(tài)所生成的本地碼的問題,以及動態(tài)是單純采用解釋執(zhí)行效率低的問題,提高代碼質(zhì)量和系統(tǒng)整體性能。
文檔編號G06F9/45GK1716202SQ20041000928
公開日2006年1月4日 申請日期2004年6月30日 優(yōu)先權(quán)日2004年6月30日
發(fā)明者武成崗, 張兆慶, 馮曉兵, 崔慧敏, 謝海斌, 唐鋒, 楊浩 申請人:中國科學(xué)院計算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
昌宁县| 南投县| 惠州市| 闽清县| 辽源市| 陇川县| 南华县| 公主岭市| 崇左市| 星座| 镇坪县| 通江县| 兰坪| 旬邑县| 沙坪坝区| 康乐县| 冕宁县| 大石桥市| 溧阳市| 沅陵县| 克拉玛依市| 同德县| 海口市| 文山县| 武定县| 雅江县| 秦安县| 华坪县| 三门县| 渝北区| 东乌珠穆沁旗| 莱阳市| 邢台县| 黄大仙区| 巧家县| 香格里拉县| 陆丰市| 兴国县| 农安县| 怀化市| 宜兴市|