驗證動態(tài)二進(jìn)制轉(zhuǎn)換器中轉(zhuǎn)換的來賓代碼的方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001 ]本公開內(nèi)容一般涉及二進(jìn)制轉(zhuǎn)換,并且更具體地說,涉及驗證動態(tài)二進(jìn)制轉(zhuǎn)換器中轉(zhuǎn)換的來賓代碼的方法和設(shè)備。
【背景技術(shù)】
[0002]二進(jìn)制轉(zhuǎn)換器分析來賓代碼塊,生成用于主機指令集體系結(jié)構(gòu)的功能上等效的代碼塊(有時在本文中稱為“代碼轉(zhuǎn)換”,這產(chǎn)生轉(zhuǎn)換的代碼塊),執(zhí)行有關(guān)代碼轉(zhuǎn)換的優(yōu)化,以及調(diào)度轉(zhuǎn)換的代碼塊以便在主機上執(zhí)行。成功時,在主機上執(zhí)行代碼轉(zhuǎn)換的結(jié)果與在來賓指令集體系結(jié)構(gòu)機器上執(zhí)行來賓代碼時的結(jié)果是相同的。
【附圖說明】
[0003]圖1是根據(jù)本公開內(nèi)容的教導(dǎo),包括示例動態(tài)二進(jìn)制轉(zhuǎn)換器的示例系統(tǒng)的示意圖。
[0004]圖2是圖1的示例動態(tài)二進(jìn)制轉(zhuǎn)換器的示例轉(zhuǎn)換檢驗器的框圖。
[0005]圖3-6是表示可執(zhí)行以驗證動態(tài)二進(jìn)制轉(zhuǎn)換器中轉(zhuǎn)換的來賓代碼的示例機器可讀指令的流程圖。
[0006]圖7是可執(zhí)行圖3-6的指令以實現(xiàn)圖1和/或2的示例系統(tǒng)和設(shè)備的示例處理器平臺的示意圖。
【具體實施方式】
[0007]二進(jìn)制轉(zhuǎn)換是允許在主機系統(tǒng)上運行的虛擬機有效地執(zhí)行不屬于主機本身的指令集體系結(jié)構(gòu)的來賓代碼的虛擬化技術(shù)。二進(jìn)制轉(zhuǎn)換允許虛擬機以符合來賓指令集體系結(jié)構(gòu)性(ISA)的方式執(zhí)行來賓二進(jìn)制指令,其中,來賓二進(jìn)制指令在得到適當(dāng)轉(zhuǎn)換時,以與本機主機二進(jìn)制指令一致的方式在主機指令集體系結(jié)構(gòu)上執(zhí)行。在一些情況下,二進(jìn)制轉(zhuǎn)換器可解釋來賓二進(jìn)制指令,其中,一次一個來賓二進(jìn)制指令,讀取,解碼(例如,將來賓二進(jìn)制指令轉(zhuǎn)化成主機二進(jìn)制指令)并且隨后執(zhí)行來賓二進(jìn)制指令。相反,在一些示例中,二進(jìn)制轉(zhuǎn)換器可識別來賓二進(jìn)制指令塊(例如,一個或更多個來賓二進(jìn)制指令),將來賓二進(jìn)制指令塊解碼,優(yōu)化解碼的塊,并且隨后存儲(例如,緩存)轉(zhuǎn)換的塊以便在以后再使用(有時稱為“動態(tài)編譯”、“即時(JIT)編譯”或“動態(tài)二進(jìn)制轉(zhuǎn)換”)。優(yōu)化解碼的塊可包括例如基于用戶配置(例如,用戶選擇的特征等)、主機運行時環(huán)境(例如,操作系統(tǒng)版本、安裝(且可用)的硬件和/或驅(qū)動程序等),修改轉(zhuǎn)換的來賓二進(jìn)制指令,將解碼的塊的來賓二進(jìn)制指令的執(zhí)行序、重新排序(例如,基于來賓二進(jìn)制指令的配置文件信息),識別比來賓二進(jìn)制指令更有效執(zhí)行的主機二進(jìn)制指令(例如,識別一次加載不止一個值而不是加載一個值的主機二進(jìn)制指令)等。來賓二進(jìn)制指令(有時在本文中稱為“來賓二進(jìn)制”、“來賓代碼”或“源代碼”)可被轉(zhuǎn)換成(例如,轉(zhuǎn)化成)主機二進(jìn)制指令(有時在本文中稱為“主機二進(jìn)制”、“主機代碼”或“目標(biāo)代碼”)以實現(xiàn)可移植性,改進(jìn)性能和/或降低功耗。
[0008]二進(jìn)制轉(zhuǎn)換通常由靜態(tài)二進(jìn)制轉(zhuǎn)換器或動態(tài)二進(jìn)制轉(zhuǎn)換器執(zhí)行。靜態(tài)二進(jìn)制轉(zhuǎn)換器在執(zhí)行來賓代碼前執(zhí)行來賓代碼轉(zhuǎn)換(例如,脫機)。相反,動態(tài)二進(jìn)制轉(zhuǎn)換器在來賓代碼的執(zhí)行期間(例如,在運行時)執(zhí)行來賓代碼轉(zhuǎn)換。
[0009]通常,執(zhí)行轉(zhuǎn)換的代碼的結(jié)果與執(zhí)行來賓代碼相同。在一些示例中,二進(jìn)制轉(zhuǎn)換器可通過主機的硬件和/或軟件組件,仿真來賓系統(tǒng)的硬件和/或軟件組件的行為。在一些此類示例中,在來賓程序(例如,在具有來賓代碼/指令的來賓操作系統(tǒng)上的來賓程序)請求硬件或軟件資源時,二進(jìn)制轉(zhuǎn)換器為符合主機的來賓程序提供功能上等效的資源。也就是說,在來賓程序如它將在實際(例如,“真實”)來賓ISA機器上一樣請求硬件或軟件資源時,二進(jìn)制轉(zhuǎn)換器(或來賓硬件支持仿真器)使用主機的等效資源完成請求,同時來賓程序繼續(xù)執(zhí)行,好像返回的資源是請求的資源一樣。因此,在一些示例中,來賓程序可不知道它在不同系統(tǒng)(例如,主機)上執(zhí)行。在一些此類示例中,二進(jìn)制轉(zhuǎn)換器可啟動自我檢驗以確定轉(zhuǎn)換的正確性。例如,二進(jìn)制轉(zhuǎn)換器可執(zhí)行來賓程序(或來賓程序的來賓代碼),執(zhí)行轉(zhuǎn)換的來賓程序(或轉(zhuǎn)換來賓程序的主機代碼),并且比較結(jié)果。為確定新轉(zhuǎn)換的正確性,二進(jìn)制轉(zhuǎn)換器可在執(zhí)行相應(yīng)程序后,比較主機的系統(tǒng)狀態(tài)。視是否檢測到狀態(tài)發(fā)散而定(例如,確定執(zhí)行后狀態(tài)是否相同),可驗證并在高速緩存中存儲,或者可丟棄轉(zhuǎn)換的來賓代碼。在一些示例中,可保留并且在以后訪問轉(zhuǎn)換的來賓代碼,而不是將其丟棄。
[0010]通常,在主機開始仿真來賓程序時動態(tài)二進(jìn)制轉(zhuǎn)換器解釋來賓程序。也就是說,動態(tài)二進(jìn)制轉(zhuǎn)換器一次從來賓程序獲取一個來賓指令,將指令解碼成符合主機標(biāo)準(zhǔn)的指令,以及隨后執(zhí)行解碼的來賓指令。視在仿真的來賓程序而定,此過程可以是資源密集型過程。因此,一些動態(tài)二進(jìn)制轉(zhuǎn)換器可監(jiān)視執(zhí)行的來賓指令,并且識別頻繁執(zhí)行的來賓指令。在識別頻繁執(zhí)行的來賓指令(或“熱指令”或“熱代碼”)時,動態(tài)二進(jìn)制轉(zhuǎn)換器可轉(zhuǎn)換包括一個或更多個熱來賓指令的來賓指令塊。指令塊(或“基本塊”)是按順序執(zhí)行的一個或更多個指令?;诮邮軄碜粤硪稽c的控制的指令(例如,諸如分支指令的目的地等進(jìn)入指令)或?qū)⒖刂妻D(zhuǎn)換到另一點的指令(例如,諸如分支指令等退出指令),可識別塊邊界。因此,在執(zhí)行塊中的第一指令時,按順序執(zhí)行塊中的剩余指令。動態(tài)二進(jìn)制轉(zhuǎn)換器隨后在轉(zhuǎn)換高速緩存中存儲轉(zhuǎn)換的塊(例如,由進(jìn)入指令和退出指令定義,并且包括一個或更多個熱來賓指令的轉(zhuǎn)換的指令塊)。因此,在動態(tài)二進(jìn)制轉(zhuǎn)換器獲取對應(yīng)于轉(zhuǎn)換高速緩存中存儲的進(jìn)入指令的來賓指令以便執(zhí)行時,動態(tài)二進(jìn)制轉(zhuǎn)換器執(zhí)行進(jìn)入指令和對應(yīng)轉(zhuǎn)換的塊中包括的任何另外的轉(zhuǎn)換的來賓指令,而不是解釋(例如,解碼和執(zhí)行)來賓指令。由于轉(zhuǎn)換的塊一般被優(yōu)化,因此,相對于解釋和執(zhí)行來賓指令的序列,執(zhí)行轉(zhuǎn)換的來賓指令塊更有效(例如,更快、更具功率效率、更具空間(存儲器)效率等)。
[0011]在最初形成(例如,生成)轉(zhuǎn)換時,轉(zhuǎn)換的塊一般是“輕量”轉(zhuǎn)換,性能優(yōu)化極小。相反,與第一轉(zhuǎn)換有關(guān)的重點一般是在形成轉(zhuǎn)換的速度上。隨著轉(zhuǎn)換的塊的執(zhí)行頻率增大,時間可用于優(yōu)化轉(zhuǎn)換(例如,進(jìn)展到一個或更多個更高程度的優(yōu)化),這改進(jìn)了轉(zhuǎn)換的代碼性會K。
[0012]在一些示例中,可將轉(zhuǎn)換的塊轉(zhuǎn)換不止一次。例如,可比其它轉(zhuǎn)換的塊更頻繁地執(zhí)行來自轉(zhuǎn)換高速緩存的轉(zhuǎn)換的塊。在一些此類示例中,動態(tài)二進(jìn)制轉(zhuǎn)換器可進(jìn)一步優(yōu)化更頻繁執(zhí)行的轉(zhuǎn)換的塊(例如,“熱塊”),并且在轉(zhuǎn)換高速緩存中存儲此新的且更優(yōu)化的轉(zhuǎn)換。
[0013]雖然本文中公開的示例討論了將來賓指令轉(zhuǎn)換成主機指令,但來賓指令和主機指令可符合相同的ISA,或者對應(yīng)于不同的ISA。例如,在相同來賓與主機ISA之間轉(zhuǎn)換操作的焦點可針對改進(jìn)性能和/或功耗。相反,可為跨ISA的可移植性實現(xiàn)從來賓ISA到不同主機ISA的轉(zhuǎn)換操作。任何數(shù)量的隨后轉(zhuǎn)換可應(yīng)用到一個或更多個指令,以便改進(jìn)在執(zhí)行期間指令的一個或更多個方面。如上所述,可進(jìn)行轉(zhuǎn)換操作以便改進(jìn)執(zhí)行速度、執(zhí)行效率和/或執(zhí)行功耗。
[0014]為確保轉(zhuǎn)換的主機程序在功能上與來賓程序相同,在轉(zhuǎn)換來賓指令塊(例如,形成,生成轉(zhuǎn)換的塊等)時,可驗證或檢驗轉(zhuǎn)換的塊的正確性。在一些已知系統(tǒng)中,可比較執(zhí)行轉(zhuǎn)換的塊的結(jié)果和解釋(例如,獲取,解碼和執(zhí)行)對應(yīng)來賓指令的結(jié)果。如果結(jié)果相同(例如,計算裝置的寄存器狀態(tài)在執(zhí)行轉(zhuǎn)換的塊和對應(yīng)來賓指令后相同),則認(rèn)為新轉(zhuǎn)換的塊已驗證,動態(tài)二進(jìn)制轉(zhuǎn)換器更新主機程序指令序列(或執(zhí)行鏈)以包括新轉(zhuǎn)換的塊,并且任何更舊的轉(zhuǎn)換版本(例如,具有不同程度的優(yōu)化的轉(zhuǎn)換)被丟棄。
[0015]不同于以前的系統(tǒng),本文中公開的示例保留更舊的轉(zhuǎn)換版本(例如,以前驗證的轉(zhuǎn)換)以供進(jìn)一步使用。由于未驗證(例如,包括狀態(tài)發(fā)散)的轉(zhuǎn)換被丟棄,因此,更舊的轉(zhuǎn)換版本一定是已驗證的轉(zhuǎn)換。因此,在確定新轉(zhuǎn)換的有效性時,本文中公開的示例可比較新轉(zhuǎn)換的執(zhí)行狀態(tài)(例如,包括寄存器值的狀態(tài)信息等)和已驗證的轉(zhuǎn)換的執(zhí)行狀態(tài)。因此,比較執(zhí)行兩個不同轉(zhuǎn)換版本的結(jié)果而不是比較執(zhí)行轉(zhuǎn)換和解釋對應(yīng)來賓指令的結(jié)果(有時在本文中稱為“自我驗證”)的此過程提高了新轉(zhuǎn)換的驗證速度。此外,比較兩個不同轉(zhuǎn)換版本(例如,兩個不同程度的優(yōu)化轉(zhuǎn)換),其中轉(zhuǎn)換之一是已驗證的轉(zhuǎn)換,這可改進(jìn)識別在兩個轉(zhuǎn)換版本之間狀態(tài)發(fā)散的原因。也就是說,通過保留而不是丟棄更舊的轉(zhuǎn)換版本(例如,已驗證的轉(zhuǎn)換),本文中公開的示例有利于未驗證的轉(zhuǎn)換的細(xì)粒度差分測試。
[0016]圖1是有利于轉(zhuǎn)換的細(xì)粒度差分測試的示例動態(tài)二進(jìn)制轉(zhuǎn)換器100的框圖。圖1的示例動態(tài)二進(jìn)制轉(zhuǎn)換器100允許主機102執(zhí)行來賓程序104的來賓代碼(或來賓指令)。在一些示例中,動態(tài)二進(jìn)制轉(zhuǎn)換器100—次解釋來賓程序104的一個來賓指令。在來賓指令以前由動態(tài)二進(jìn)制轉(zhuǎn)換器100轉(zhuǎn)換(例如,分析,優(yōu)化和緩存)時的一些其它示例中,動態(tài)二進(jìn)制轉(zhuǎn)換器100執(zhí)行轉(zhuǎn)換的塊,轉(zhuǎn)換的塊包括轉(zhuǎn)換的來賓指令(例如,符合主機ISA的指令),并且在語義上等效于在主機102上來賓程序104的來賓指令塊。動態(tài)二進(jìn)制轉(zhuǎn)換器100包括示例解釋器106、示例熱代碼鑒別器108、示例剖析器(profiler) 110、示例轉(zhuǎn)換器112、示例代碼轉(zhuǎn)換器114、示例塊轉(zhuǎn)換器116、示例轉(zhuǎn)換高速緩存120、示例流程控制器124、示例鏈圖126及示例轉(zhuǎn)換檢驗器128。在一些示例中,動態(tài)二進(jìn)制轉(zhuǎn)換器100的一個或更多個組件可總稱為運行時管理器。例如,運行時管理器可包括熱代碼鑒別器108、剖析器110、流程控制器124和/或轉(zhuǎn)換檢驗器128。
[0017]在圖1的所示示例中,動態(tài)二進(jìn)制轉(zhuǎn)換器100包括執(zhí)行來自來賓程序104的來賓指令的解釋器106。解釋器106—次獲取一個來賓指令,將它解碼,并且隨后在主機102上仿真來賓指令的執(zhí)行。在解釋來賓指令后,解釋器106從來賓程序104獲取要執(zhí)行的下一來賓指令。
[0018]示例熱代碼鑒別器108和示例剖析器110監(jiān)視來賓程序104的執(zhí)行。示例熱代碼鑒別器108識別頻繁執(zhí)行的來賓指令和/或轉(zhuǎn)換(例如,轉(zhuǎn)換的塊)。例如,熱代碼鑒別器108可包括對應(yīng)于來賓指令,并且每次執(zhí)行對應(yīng)來賓指令時增大的一個或更多個計數(shù)器。計數(shù)器達(dá)到熱代碼閾值時,示例熱代碼鑒別器108可識別和/或以其它方式將來賓指令標(biāo)記為熱代碼。通常,示例熱代碼鑒別器108可將來賓代碼104識別為熱代碼或者將轉(zhuǎn)換的塊識別為熱塊。示例剖析器110可監(jiān)視來賓指令的執(zhí)行以生成剖析數(shù)據(jù)。例如,剖析器110可確定用于來賓指令的分支方向統(tǒng)計。在一些示例中,剖析器110可將剖析數(shù)據(jù)輸出到轉(zhuǎn)換器112以便在優(yōu)化期間使用。
[0019]在圖1的所示示例中,轉(zhuǎn)換器112的代碼轉(zhuǎn)換器114識別指令塊,來賓指令塊包括由熱代碼鑒別器108識別的熱代碼。例如,代碼轉(zhuǎn)換器114可掃描來賓指令的序列,并且標(biāo)記基本塊的塊邊界。在圖1的所示示例中,代碼轉(zhuǎn)換器114在識別的塊的結(jié)尾處插入commit(提交)指令。如下結(jié)合示例轉(zhuǎn)換檢驗器128所述,提交指令可由轉(zhuǎn)換檢驗器128用于檢驗兩個不同轉(zhuǎn)換的塊在語義上是等效的(例如,驗證轉(zhuǎn)換)。示例代碼轉(zhuǎn)換器114隨后將來賓指令塊解碼成符合主機的指令塊,并且優(yōu)化來賓指令的轉(zhuǎn)換的塊以便在主機102上執(zhí)行。例如,代碼轉(zhuǎn)換器114可識別來賓代碼塊,將來賓代碼解碼成符合主機的轉(zhuǎn)換的來賓指令塊,并且隨后在主機102上將轉(zhuǎn)換的來賓指令的執(zhí)