專利名稱::用于受限系統(tǒng)的分布式動態(tài)二進制翻譯方法
技術領域:
:本發(fā)明涉及一種用于受限系統(tǒng)的分布式的動態(tài)二進制翻譯方法,具體涉及一種采用分布式架構,適用于在瘦客戶端等受限系統(tǒng)上使用的動態(tài)二進制翻譯方法。本發(fā)明屬于動態(tài)二進制翻譯
技術領域:
。
背景技術:
:動態(tài)二進制翻譯技術可以在不重新編譯源代碼的情況下,自動翻譯異構平臺的二進制代碼,達到運行異構平臺的二進制代碼的目的。動態(tài)二進制翻譯技術可以使硬件生產商在構建新系統(tǒng)結構時,不用更多考慮兼容之前的體系結構。同時使用動態(tài)二進制翻譯技術也能更好地維護之前遺留的二進制代碼,特別是那些硬件已經不再生產的平臺上的二進制代碼,又可以加強單個體系架構的應用范圍,使單個體系結構(如Intel平臺)運行多個體系結構(如MIPS,SPARC,PowerPC平臺)的二進制代碼。一般動態(tài)二進制翻譯器必定包括翻譯模塊,執(zhí)行模塊。翻譯模塊將源平臺的二進制代碼直接翻譯到目標平臺可執(zhí)行代碼,對于翻譯復雜的源平臺的二進制代碼,如IntelIA32平臺的二進制代碼,其對應的翻譯模塊必定是復雜而龐大的,在進行指令翻譯過程中,翻譯模塊會消耗比較多的計算資源以及內存資源,對于一個動態(tài)二進制翻譯器是一個不小的負擔。執(zhí)行模塊主要功能是執(zhí)行經過翻譯模塊翻譯后的目標平臺可執(zhí)行代碼。目前已經開發(fā)出一些商用的動態(tài)二進制翻譯器,如Intel的IA32EL、Hp的Dynamo等,但所有這些動態(tài)二進制翻譯器都并非針對于一個受限系統(tǒng)(如手機,ARM平臺等計算能力、內存容量都相對比較弱的系統(tǒng))。對于瘦客戶端等受限系統(tǒng)來說,直接移植傳統(tǒng)動態(tài)二進制翻譯器會帶來非常大的開銷,并且效果也會非常低效。原因就是受限系統(tǒng)的運算能力,內存都相對較弱,而翻譯器中的復雜模塊,如翻譯模塊等在受限系統(tǒng)中的運行,將消耗巨大的系統(tǒng)資源,帶來額外開銷,使本來資源就有限的受限系統(tǒng)更難承受。
發(fā)明內容本發(fā)明的目的在于針對現(xiàn)有技術的不足,提供一種用于受限系統(tǒng)的分布式動態(tài)二進制翻譯方法,適用于處理器、內存資源都有限的受限系統(tǒng),加強受限系統(tǒng)執(zhí)行異構平臺程序的能力。為實現(xiàn)上述目的,本發(fā)明對傳統(tǒng)動態(tài)二進制翻譯器做改進,將翻譯器的翻譯和執(zhí)行模塊做劃分,分別安置于服務端和受限客戶端,服務端完成翻譯功能,客戶端完成執(zhí)行功能??蛻舳嗽趫?zhí)行異構平臺代碼時,向服務端發(fā)送翻譯請求,服務端翻譯完成后,將翻譯后代碼返回給客戶端,由客戶端執(zhí)行此代碼,直至遇到未翻譯的代碼,重新開始一輪請求,翻譯,執(zhí)行的過程。通過這種模塊劃分,減輕動態(tài)二進制翻譯器在受限系統(tǒng)的負擔,加快動態(tài)二進制翻譯器在受限系統(tǒng)運行速度。本發(fā)明用于受限系統(tǒng)的分布式動態(tài)二進制翻譯方法的步驟如下1.客戶端加載異構平臺的二進制代碼,與服務端建立連接,完成各自初始化。受限系統(tǒng)動態(tài)二進制翻譯器的客戶端加載異構平臺的二進制代碼,完成初始化,并通過網絡連接與受限系統(tǒng)動態(tài)二進制翻譯器的服務端連接,發(fā)送二進制代碼和同步信息。服務端根據此二進制行代碼所屬指令集平臺,初始化翻譯器服務端對應的翻譯模塊,完成服務端的初始化。2.服務端接收客戶端翻譯請求,翻譯指定的源二進制代碼塊至客戶端的目標代碼塊。受限系統(tǒng)動態(tài)二進制翻譯的客戶端在執(zhí)行一個未翻譯過的基本塊時,發(fā)送翻譯請求至動態(tài)二進制翻譯器服務端。服務端接收到客戶端的翻譯請求后,先在已翻譯代碼緩存中查找是否存在已經翻譯過的代碼塊,如果存在,則對代碼塊做修改后,將代碼塊發(fā)送回客戶端;否則開始一個翻譯過程,翻譯完成后將起始地址和翻譯好的代碼塊存入服務端的已翻譯代碼緩存區(qū)中,并將翻譯后代碼4塊傳送給客戶端。3.客戶端等待服務端的回應,接收翻譯后的代碼塊。在服務端完成翻譯前,客戶端一直處于等待狀態(tài),直到服務端翻譯過程完成,通知客戶端后,客戶端開始接收翻譯后的代碼塊,將其存入客戶端本地代碼緩存區(qū)中。4.客戶端執(zhí)行翻譯后代碼塊??蛻舳嗽诮邮盏椒g后的代碼塊后,開始對其做基本塊連接,保存機器運行狀態(tài),然后開始執(zhí)行連接后的基本塊;如果遇到未翻譯的代碼塊,則開始新一輪的請求、翻譯、執(zhí)行過程。5.程序運行結束,退出程序,客戶端和服務端釋放各自的內存資源等。本發(fā)明的所涉及的方法的優(yōu)點在于采用分布式架構,分離一個動態(tài)二進制翻譯器的翻譯模塊和執(zhí)行模塊,翻譯模塊放在服務端,執(zhí)行模塊放在客戶端,使得對系統(tǒng)資源有較高要求的翻譯模塊與受限系統(tǒng)分離,大大減輕了作為客戶端的受限系統(tǒng)的負擔。本發(fā)明這種分布式動態(tài)二進制翻譯方法更加合適于受限系統(tǒng),加強了受限系統(tǒng)執(zhí)行異構平臺程序的能力。圖1是分布式動態(tài)二進制翻譯器的框架圖。具體實施例方式為了更好的理解本發(fā)明的技術方案,以下通過具體的實施例作進一步描述。以下實施例不構成對本發(fā)明的限定,該方法適合一切受限系統(tǒng)分布式動態(tài)二進制翻譯器的設計。實施例以一個分布式的動態(tài)二進制翻譯器DVEE為例。DVEE分為服務端和客戶端兩個部分,如圖1所示。服務端主要負責代碼的翻譯,客戶端負責源程序的加載,和執(zhí)行翻譯后的代碼塊。服務端的目標代碼緩存區(qū),即服務端的已翻譯代碼緩存區(qū),用于存放服務端每次翻譯后的代碼塊;客戶端的目標緩存區(qū),即客戶端本地緩存區(qū),用于接收服務端發(fā)送來的翻譯后的代碼塊。服務端接收到客戶端的翻譯請求,完成翻譯,并將翻譯后的代碼塊傳送給客戶端,客戶端5在接收到翻譯后的代碼塊后,開始對其做基本塊連接,然后開始執(zhí)行連接后的基本塊。服務端和客戶端通過網絡連接通信,通信協(xié)議用SOCKET編程接口構建于TCP/IP協(xié)議之上。通信時消息采用的數據包格式如表1所示,一共包括五個部分,消息頭,消息類型,消息長度,消息內容,消息尾。表1傳輸協(xié)議數據包格式<table>tableseeoriginaldocumentpage6</column></row><table>本發(fā)明分布式的動態(tài)二進制翻譯方法的具體步驟如下1、客戶端加載異構平臺的二進制代碼,與服務端建立連接,完成各自初始化。受限系統(tǒng)動態(tài)二進制翻譯器客戶端加載異構平臺的二進制代碼,獲得程序入口地址,將此地址賦值給某一全局變量SPC(源程序初始基本塊入口地址),同時創(chuàng)建一個空的目標代碼緩存區(qū),將此緩存區(qū)的起始地址賦值給全局變量TPC(目標平臺基本塊入口地址)。之后客戶端通過網絡連接與動態(tài)二進制翻譯器服務端連接,發(fā)送二進制代碼和同步信息??蛻舳藢⒍M制代碼和同步信息(客戶端所屬平臺,仿真寄存器組在客戶端的內存地址)構建成一個初始化類型消息,將此消息發(fā)送給服務端。服務端接收到此消息后,讀取消息內容,保存在服務端。服務端根據此二進制行代碼所屬指令集平臺,初始化翻譯器服務端對應的翻譯模塊,同時開辟一個足夠大的目標代碼緩存區(qū),完成服務端的初始化。2、服務端接收客戶端翻譯請求,翻譯指定的源二進制代碼塊至客戶端的目標代碼塊。受限系統(tǒng)動態(tài)二進制翻譯的客戶端在執(zhí)行一個未翻譯過的基本塊時,發(fā)送翻譯請求至動態(tài)二進制翻譯器服務端??蛻舳艘匀肿兞縎PC作為關鍵字在本地目標代碼緩存區(qū)中查找對應的翻譯后的目標代碼塊。如果查找命中,則本地目標代碼緩存區(qū)已保留翻譯后的代碼塊,將代碼塊起始地址賦值給TPC,轉步驟4;如果査找沒有命中,則首先檢查客戶端翻譯代碼緩存區(qū)是否己經滿,滿的話全部將緩存區(qū)全部清空,將TPC設置為緩存區(qū)的首地址,否則將TPC設置為緩存區(qū)空閑區(qū)域起始地址。將此時的SPC和TPC構建一個翻譯請求類型的消息發(fā)送個服務端。服務端接收到客戶端的翻譯請求后,讀取SPC和TPC,先在目標代碼緩存區(qū)中査找是否存在己經翻譯過的代碼塊,査找的關鍵字就是SPC,如果存在,根據TPC的值對翻譯過的代碼塊中的地址偏移指令做修改,構建翻譯應答類消息,將代碼塊發(fā)送回客戶端;否則開始一個翻譯過程,從初始化時得到的源平臺二進制代碼中逐一取出指令,對指令解碼,生成中間指令,直到遇到的指令滿足基本塊結束條件,如遇到跳轉指令等。再將這些中間指令序列翻譯成目標代碼塊,翻譯完成后將起始地址(SPC)和翻譯好的代碼存入服務端的目標代碼緩存區(qū)中,并構建翻譯應答消息,將翻譯后代碼塊傳送給客戶端,完成此次請求,轉步驟3。3、客戶端等待服務端的回應,接收翻譯后的代碼塊。當服務端完成翻譯前,客戶端一直處于等待狀態(tài),直到服務端翻譯過程完成,通知客戶端。客戶端開始接收翻譯后代碼,將其放置在TPC所指向的目標代碼緩存區(qū)中,這樣在本地就保存了與SPC所指向的源平臺基本塊所對應的翻譯后的目標平臺代碼塊,同時將TPC的值加上目標代碼塊大小后的值作為緩存區(qū)空閑區(qū)起始地址,可以作為下一次翻譯后代碼放置位置的起始地址,轉步驟4。4、客戶端執(zhí)行翻譯后代碼塊??蛻舳嗽诮邮盏椒g后代碼塊后,開始對其做基本塊連接(連接指將上個目標代碼塊末端跳轉的目的地址修改為這個基本塊的入口地址),保存機器運行狀態(tài),即將目標平臺中通用寄存器保存到棧中,然后開始執(zhí)行連接后的基本塊。如果遇到未翻譯的代碼塊,則將下次要執(zhí)行的基本塊的首地址賦給SPC,轉步驟2,則開始新一輪的請求、翻譯、執(zhí)行過程。直到任務結束,轉步驟5。5、程序運行結束,退出程序,客戶端和服務端釋放各自的內存資源等。當程序正常結束,返回翻譯器后,客戶端釋放本地翻譯代碼緩存區(qū),向服務端發(fā)送結束類型消息,并且結束客戶端進程。服務端在接收到結束消息后,釋放服務端翻譯代碼緩存區(qū),刪除源程序二進制代碼。至此一次完整的受限系統(tǒng)運行異構平臺二進制代碼過程全部完成。權利要求1、一種用于受限系統(tǒng)的分布式動態(tài)二進制翻譯方法,其特征在于包括如下步驟1)受限系統(tǒng)動態(tài)二進制翻譯器的客戶端加載異構平臺的二進制代碼,完成初始化,并通過網絡連接與受限系統(tǒng)動態(tài)二進制翻譯器的服務端連接,發(fā)送二進制代碼和同步信息;服務端根據此二進制代碼所屬指令集平臺,初始化翻譯器服務端對應的翻譯模塊,完成服務端的初始化;2)客戶端在執(zhí)行一個未翻譯過的基本塊時,發(fā)送翻譯請求至服務端;服務端接收到客戶端的翻譯請求后,先在已翻譯代碼緩存中查找是否存在已經翻譯過的代碼塊,如果存在,則對代碼塊做修改后,將代碼塊發(fā)送回客戶端;否則開始一個翻譯過程,翻譯完成后將起始地址和翻譯后的代碼塊存入服務端的已翻譯代碼緩存區(qū)中,并將翻譯后的代碼塊傳送給客戶端;3)在服務端完成翻譯前,客戶端一直處于等待狀態(tài),直到服務端翻譯過程完成,通知客戶端后,客戶端開始接收翻譯后的代碼塊,將其存入客戶端本地代碼緩存區(qū)中;4)客戶端在接收到翻譯后的代碼塊后,開始對其做基本塊連接,保存機器運行狀態(tài),然后開始執(zhí)行連接后的基本塊;如果遇到未翻譯的代碼塊,則開始新一輪的請求、翻譯、執(zhí)行過程;5)程序運行結束,退出程序,客戶端和服務端釋放各自的內存資源。全文摘要本發(fā)明涉及一種用于受限系統(tǒng)的分布式動態(tài)二進制翻譯方法,對傳統(tǒng)動態(tài)二進制翻譯器做改進,將翻譯器的翻譯和執(zhí)行模塊做劃分,分別安置于服務端和受限客戶端,服務端完成翻譯功能,客戶端完成執(zhí)行功能。客戶端在執(zhí)行異構平臺代碼時,向服務端發(fā)送翻譯請求,服務端翻譯完成后,將翻譯后代碼返回給客戶端,由客戶端執(zhí)行此代碼,直至遇到未翻譯的代碼,重新開始一輪請求,翻譯,執(zhí)行的過程。本發(fā)明通過劃分翻譯模塊和執(zhí)行模塊,大大減輕了瘦客戶端執(zhí)行異構代碼的負擔,使動態(tài)二進制翻譯同樣使用于瘦客戶端。本發(fā)明不受限于任何特定的硬件平臺,適用于一切受限系統(tǒng)的分布式二進制翻譯器,并能取得理想的效果。文檔編號G06F9/45GK101504613SQ20091004747公開日2009年8月12日申請日期2009年3月12日優(yōu)先權日2009年3月12日發(fā)明者孫廷韜,凌林,梁阿磊,管海兵,超褚申請人:上海交通大學