專利名稱:用于程序代碼轉換期間的本機代碼和目標代碼的組合執行的方法及裝置的制作方法
用于程序代碼轉換期間的本機代碼和目標代碼的組合執行的方法及裝置
本發明總體上涉及計算機和計算機軟件的領域,更具體地講,涉及用于 例如轉換程序代碼的代碼翻譯器、仿真器和加速器的程序代碼轉換方法及裝置。
在嵌入式和非嵌入式的CPU中,存在占優勢的指令集架構(ISA),有許 多軟件存于其中,假設它們可容易地存取相關軟件,其可被性能"加速"或 "翻譯"至許多可用的處理器而表現較佳的成本/性能優勢。還發現這樣的占 優勢的CPU架構,其被及時鎖住至其ISA,且無法表現性能或符合市場需求。 這樣的CPU將得益于面向軟件的處理器共架構。
例如,在公布的申請WO00/22521中公開了能夠促進這種加速、翻譯和 共架構能力的程序代碼轉換方法和裝置,WO00/22521的公開通過引用包含于 此。
庫函數是由另一程序調用以執行特定函數的代碼區段。許多計算環境提 供一種標準庫函數集,例如,操作系統的一部分("系統庫")。在其它情況中, 提供一個或多個專有庫。當主題程序在主題計算環境中運行時,由于函數調 用針對這些外部主題庫而建構,所以控制流通過不同單元的主題代碼之間。 在一些情況下,某些主題庫的本機(即,目標架構)版本在該目標架構上是可獲 得的。因此,期望利用這些本機庫函數,其適于替代將主題庫翻譯為目標代 碼。在程序代碼轉換中本機庫的使用在共同待審查申請US10/748,317(見 WO2005/008478)已加以討"i侖,其乂^開通過引用包含于此。
發明人已確認此種本機綁定還造成不利。例如,#丸行控制從主題程序被 移除且轉到本機代碼。接著,控制后續的執行(例如,相關子庫的使用)是更為 困難的。再者,可能失去實現最優化的機會。此外,仿真的主題狀態可能變 得不準確。
根據本發明,提供一種在權利要求中闡述的裝置和方法。本發明的優選 特征從權利要求以及說明來看是清楚的。
下面是可根據本發明實施例實行的各個方面和優點的概要。提供本發明 作為一種導引,以幫助本領域技術人員能夠更快速地理解詳細的設計討論, 這些設計討論在各方面確保,并且意圖不是以任何方式限制權利要求的范圍。
在本發明的一方面中,提供一種執行程序代碼的方法,該方法在從可由 主題處理器執行的主題代碼轉換為可由目標處理器執行的目標代碼期間執行 程序代碼,其中,該目標代碼結合可由該目標處理器本地執行的本機代碼可
被執行,該方法包括在該目標處理器上執行第一主題代碼部分,作為已翻 譯的目標代碼;從該第一主題代碼部分調用,以在該目標處理器上本地執行 本機代碼部分;從該本機代碼部分調用,以執行第二主題代碼部分作為已翻 譯的目標代碼;從該第二主題代碼部分的執行返回到該本機代碼部分的執行; 以及從該本機代碼部分的執行返回到該第 一主題代碼部分的執行。
在本發明的另一方面中,提供一種執行程序代碼的方法,該方法在從可 由主題處理器執行的主題代碼轉換為可由目標處理器執行的目標代碼之后執 行程序代碼。在該方法中,該目標代碼結合可由該目標處理器本地執行的本 機代碼可被執行。該方法包括至少提供第一、第二和第三主題代碼部分, 并至少提供第一本機代碼部分;從該第一主題代碼部分的執行進行調用以執 行該第一本機代碼部分,使得該第一本機代碼部分被執行以替代該第二主題 代碼部分的已翻譯目標代碼版本的執行;從該第 一本機代碼部分的執行進行 調用以執行該第三主題代碼部分的目標代碼已翻譯版本;從該第三主題代碼 部分的目標代碼已翻譯版本的執行返回到該第一本機代碼部分的執行;以及 從該第 一 本機代碼部分的執行返回到該第 一主題代碼部分的執行。
在本發明的另一方面中,提供一種程序代碼執行的方法,該方法適用于 從可由主題處理器執行的主題代碼轉換為可由目標處理器執行的目標代碼。 在該方法中,該目標代碼結合可由該目標處理器本地執行的本機代碼可被執 行。該方法包括至少提供第一和第二主題代碼部分,其具有相應的第一和 第二本機代碼部分,其中,該第一本機代碼部分包括到該第二本機代碼部分 的鏈接;將該第一主題代碼部分綁定到該第一本機代碼部分,使得該第一本 機代碼部分被執行以替代該第一主題代碼部分的目標代碼已翻譯版本的執
行;以及,以到該第二主題代碼部分的鏈接替代該第一本機代碼部分中的該
本機代碼部分的執行。
在示例的實施例中,發明人已研發出有關加速程序代碼轉換的方法,這 些方法對于有關實時翻譯器是特別有用的,該實時翻譯器提供主題程序代碼 到目標代碼的動態二進制翻譯。
本發明的示例實施例改進了進行程序代碼轉換時的性能。特別地,示例
本發明的實施例使得翻譯器執行從主題代碼到目標代碼的程序代碼轉換,并 結合本機代碼的一些部分有效地執行目標代碼。
本發明還延伸到翻譯器裝置,其具有被配置為執行在此限定的任何一種 方法的翻譯器單元。另外,本發明延伸到計算機可讀存儲介質,其上記錄可 由計算機執行以實現在此限定的任何一種方法的指令。
包括在說明書中并組成說明書的一部分的附圖示出了當前的優選實施方
式,這些附圖如下
圖1是示出應用了本發明實施例的裝置的框圖2是示出在程序代碼轉換期間執行控制的示例方法的示意性流程圖; 圖3是示例翻譯器中的示例主題程序的示意性表示; 圖4是顯示使用本機綁定的示例實施例的操作流程的示意性框圖; 圖5是示例的反向綁定函數的示意性表示;
圖6是包括本機綁定函數和反向綁定主題函數的程序代碼的示例;
圖7是目標處理器中的存儲器的示例布置;
圖8顯示本機綁定和反向綁定的第一示例機制;
圖9顯示本機綁定和反向綁定的另一示例機制;以及
圖10顯示用于在程序代碼轉換的翻譯器中的上下文再使用的示例機制。
提供以下描述以使本領域技術人員能夠實現并使用本發明,并且該描述 提出由發明人實施其發明所建立的最佳方式。然而,由于本發明的一般原理
在此已明確地限定以提供一種改善程序代碼轉換的方法與裝置,因此對于本 領域技術人員來說,各種修改仍是明顯可見。
以下的技術用語中,主題程序在包括主題處理器的主題計算平臺上執行。
執行主題程序。翻譯器執行從主題代碼至目標代碼的代碼轉換,使得目標代 碼在目標計算平臺上可執行。
圖1示出了示例的目標計算平臺14,其包括目標處理器13,目標處理器 13包括目標寄存器15和存儲多個軟件組件17、 19、 20、 21、 22、 27和28 的存儲器18。這些軟件組件包括將被翻譯的主題代碼17、操作系統20、翻 譯器代碼19、已翻譯代碼(目標代碼)21、抽象寄存器組(bank)27、本機綁定機 制22,以及本機代碼28。
由主題代碼17的運行時翻譯所產生的"目標代碼"21以及直接針對目 標架構所編譯的"本機代碼"28之間存在區別。由目標操作系統20所提供 的系統目標庫是本機代碼28的一個示例。相反,主題系統庫的翻譯是目標碼 21的一個示例。本機代碼28是產生于翻譯器19外部。這意味著翻譯器19 并不產生本機代碼28。而且,翻譯器19并不具有最優化本機代碼28的機會。
在一個實施例中,翻譯器代碼19是仿真器,該仿真器以最優化或非最優 化方式將主題指令集架構(ISA)的主題代碼翻譯為另一 ISA的已翻譯目標代 碼。在另一實施例中,翻譯器19用作加速器,該加速器通過執行程序代碼最 優化以將主題代碼翻譯為每個相同ISA的目標代碼。
一般而言,目標計算平臺14是一種翻譯器裝置,其包括(特別是)翻譯器 單元19。在示例的實施例中,翻譯器19是實施該翻譯器的源代碼的編譯版
常為微處理器或其它合適的計算機)上的操作系統20而運行。應理解的是, 圖1中所述的結構僅為示例,例如,本發明的實施例可以在駐留在操作系統 之內或之下的代碼中實施。主題代碼17、編i奪器代碼19、操作系統20以及 存儲器18的存儲結構可以是本領域技術人員所知悉的廣泛種類的任何類型。 在根據圖1的裝置中,當運行目標代碼21時,程序代碼轉換最好在運行 時動態地執行。翻譯器19與已翻譯程序21內聯運行。翻譯器19最好用作針 對目標架構編譯的應用程序。主題程序17在運行時由翻譯器19翻譯,以在 目標架構14上執行。翻譯器19還轉換由主題程序17進行的主題操作系統(OS)
調用,從而當轉到目標OS 20時,使得它們正確地運行。
通過翻譯器19運行主題程序17包括二種不同類型且以交錯方式執行的 代碼翻譯器代碼19以及目標代碼21。翻譯器代碼19在運行時之前基于翻 譯器19的高級源代碼實施而由例如編譯器產生。相反,目標代碼21在整個 運行時基于正被翻譯的程序的已存儲的主題代碼17由翻譯器代碼19產生。
主題程序17意圖在主題處理器(未示出)上運行。在一個實施例中,翻譯 器19用作仿真器。換言之,翻譯器19仿真該主題處理器,而實際上在目標 處理器13上執行主題程序17作為目標代碼21 。
在示例的實施例中,提供至少一個全局寄存器存儲27(也稱為主題寄存 器組27或抽象寄存器組27)。在多處理器的環境中,根據主題處理器的架構, 可選地提供多于一個的抽象寄存器組27。主題處理器狀態的表示由主題代碼 21和翻譯器19的組件所提供。換言之,翻譯器19將主題處理器狀態(例如 變量和/或對象)存儲在各種顯式編程語言裝置中。用于編譯翻譯器19的編譯 器確定該狀態和操作如何在翻譯器代碼中實施。比較而言,目標代碼21隱式 地提供目標寄存器15和存儲器位置18(由目標代碼21的目標指令所控制)中 的主題處理器狀態。例如,全局寄存器存儲27的低級別表示僅僅是已分配的 存儲器的區域。然而,在翻譯器19的源代碼中,全局寄存器存儲27是可被 較高級地存取和控制的數據數組或對象。
圖2是示出在程序代碼轉換期間執行控制的示例方法的示意性流程圖。
如圖2所示,控制初始存在于翻譯器控制循環190中。在步驟201,控 制循環190調用翻譯器19的代碼產生函數192,該代碼產生函數192將主題 代碼17的區塊(block)翻譯為已翻譯代碼21的相應區塊。接著,在步驟202, 已翻譯目標代碼21的區塊在目標處理器13上執行。方便地,已翻譯目標代 碼21的每個區塊的末端含有指令,以將控制返回至控制循環201。換言之, 翻譯和執行主題代碼的步驟是交錯的,使得部分主題程序17被翻譯且接著依 次被執行。
這里,術語"基本區塊"對于本領域技術人員是熟知的。基本區塊是具 有精確的一個入口點和精確的一個出口點(其將代碼的區塊限制為單一控制 路徑)的代碼區段。為此,基本區塊是有用的控制流的基本單元。翻譯器19 將主題代碼17適當地分為多個基本區塊,其中每個基本區塊是單個入口點處 的第一指令以及單個出口點處的最后指令(例如,跳躍、調用或分支指令)之間
的序次的一組指令。翻譯器可僅選擇這些基本區塊中的一個區塊(區塊模式), 或選擇一組基本區塊(群組區塊模式)。 一組區塊適當地包括兩個或多個基本區 塊(被一起處理為單個單元)。此外,翻譯器可形成表示主題代碼的相同基本區
塊但在不同入口條件下的等區塊(iso-block)。
在示例的實施例中,中間表示(IR)樹基于主題指令序列而產生,作為從 原始主題程序17產生目標代碼21的部分過程。IR樹是由主題程序所計算的 表達式和所執行的操作的抽象表示。之后,目標代碼21基于IR樹而產生。 IR節點的集合實際上是有向無環圖(DAG),但俗稱為"樹"。
如本領域技術人員可理解的,在一個實施例中,翻譯器19使用面向對象 的編程語言(例如C+十)來實現。例如,IR節點^^實現為C十+對象,對于其 它節點的參照被實現為對應于這些其它節點的c+十對象的C十+引用。因此,
IR樹被實現為含有各種彼此引用的IR節點對象的集合。
此外,在討論中的實施例中,IR產生使用與主題架構(主題程序17將在 其上運行)的指定特性相應的一組抽象寄存器定義。例如,針對主題架構上的 各個物理寄存器("主題寄存器"),有獨特的抽象寄存器定義。這樣,翻譯器 中的抽象寄存器定義可以被實現為0++對象,其含有對于IR節點對象(即, IR樹)的引用。由該組抽象寄存器定義所引用的所有IR樹的集合體被稱為工 作IR森林(forest)(稱為"森林"是因為它含有多個抽象寄存器根,每個根指 的是IR樹)。這些IR樹及其它過程適當地形成翻譯器代碼產生函數192的一 部分。
本機綁定
圖3是示意性實施例,其顯示將通過翻譯器19執行的主題程序17的多 個編譯單元171、 172和173。在該示例中,可執行的主要主題171調用第一 庫170a中的函數SFuncA 172。該第一主題函數SFuncA的執行依次調用第二 庫170b中的第二主題函數SF皿cB 173。圖3中的箭頭表示主題程序的這些 不同單元之間的控制流。例如,第一庫170a是專有庫,而第二庫170b是系 統庫,反之亦然。
盡管在圖3中已經顯示了庫以供說明,但是主題代碼單元171、 172和 173可以是任何主題代碼的合適部分。當未使用本機綁定時,主題程序17的 單元171、172和173各自被翻譯為目標代碼21并在翻譯器19的控制下執行。
圖4示出了在本發明的示例的實施例中使用的本機綁定機制。這里,翻
譯器19使用本機綁定,以本機系統庫280a中對等效函數的調用來替代主題 程序17中對主題系統庫函數172的調用。換言之,主題程序171實際上反而 調用本機綁定代碼28的區段。主題程序171的已翻譯目標代碼版本含有對本 機綁定代碼28的調用。在這種情況下,該調用被綁定到第一本機庫280a中 的第 一本機函數NFuncA 282。
亦如圖4所示,在該示意性的示例中,第一本機函數NFuncA 282依次 調用第二本機庫(即子庫)中的第二本機函數NFuncB 283。換言之, 一般預期 的執行順序用于本機綁定代碼的第二區段283的執行,以緊隨本機綁定代碼 的第一區段282的執行。
在示例的MIPS-x86翻i,中,x86系統目標庫"libc,,可定義高級 memcpy()(存儲器復制)例程,其利用SSE2矢量操作來執行相當快速的字節復 制。通過使用本機綁定機制22,對MIPS主題代碼中的memcpy的所有調用 被綁定到本機的memcpy()。這消除了翻譯memcpy()函數的主題(MIPS)版本 的成本。此外,memcpy()函數的本機(x86)版本具有較好的目標硬件的復雜的 感知力,因此以最具效率的方式提供來實現函數的期望效果。
當檢測到主題程序的控制流進入主題代碼17(例如主題庫,其中存在主
效本才幾碼28,而不是翻i奪主題代碼17。
除了目標系統庫調用外,本機綁定可用于更多的任意碼取代,例如,取 代非庫函數的本機編譯版本。此外,通過以替代的本機函數(其實現與對主題
系統函數的調用相同的功能,或作為在目標系統調用周圍的調用存根(stub)) 取代對主題系統函數的調用,本機綁定可用于在目標架構上實施主題系統調 用。本機綁定也可在超出函數調用點以外的任意主題代碼位置上應用,以允 許任意碼序列(目標代碼或本機代碼)和/或函數調用在主題程序中的任何限定 明確的點上被插入或取代。
本機綁定機制22允許翻譯器19將特定主題代碼17函數與其本機代碼 28對應物彼此關聯,使得翻譯器19獲知哪個主題函數進行綁定以及哪個本 機函數將其綁定。翻譯器19可依據本機綁定機制22的實施方式而以不同方 式來獲得該函數映射信息。如共同待審查申請US10/748,317和 WO2005/008478中所討論的,執行本機綁定的特定機制包括綁定點、運行時 符號修補以及S調用。
譯器19實現本機綁定。翻譯器19執行等
本機綁定使已翻譯主題代碼直接地執行代碼單元的本機(即,目標架構) 版本,而不是翻譯和執行等效主題代碼,例如,庫的本機版本。這避免了翻
譯這些庫的主題版本的開銷。此外,因為本機版本可利用目標架構的架構特 性(其是主題版本未察覺的),所以本機版本可以是相同功能的更有效實施。
盡管本機綁定帶來一些優點,但是也存在限制。特別地,本機代碼28
并非在翻譯器19的直接控制之下。
執行本機代碼28不更新由翻譯器19所保持的主題狀態。例如,本機代 碼28不更新抽象寄存器組27。此外,本機代碼不考慮由翻譯器19控制的仿 真的主題存儲器分配,例如,棧和堆存儲器分配。
本機代碼可調用至一個或多個級別中的一個或多個子庫。翻譯器19不能 通過本機代碼282控制子庫的使用。實際上,通過執行控制遠離翻譯器19的 多個級別,子庫有時是一百個級別深的等級。
翻譯器19不能執行針對本機代碼28的最優化。例如,翻譯器19能夠最 優化本機代碼庫中的代碼,但該機會由于不在翻譯器19控制之下執行本機代 碼28而喪失。
還存在關于參數變換的限制。例如,存在一些限制,諸如有關浮點精度, 其中主題程序17、翻譯器19和本機代碼28并非都共享相等的浮點精度。
本發明的示例實施例提供用于本機綁定的上下文的改進機制,其解決這 些和其它在夾點。
反向綁定
圖5示出在本發明示例實施例中使用的反向綁定技術。 如圖5所示,翻譯器19通過本機代碼28的執行而,皮部分地調用,并且 主題代碼17的一部分被執行。控制流接著返回至已綁定的本機代碼28。圖5 的反向綁定技術為混合型。換言之,主題代碼17的一部分(通過翻譯器19) 被執行并在部分本機代碼28之間交錯。特別地,翻譯器19被調用以執行主 題代碼17的一部分,以替代執行本機代碼28的預期下一個部分,或是除了 執行本機代碼28的預期下一個部分以外,還執行主題代碼17的一部分。
在圖5示出的示例中,在步驟①,主要的主題程序171對第一本機函數
碼。接著,在步驟②,主題代碼函數SFuncB 173通過翻譯器19被執行為目 標代碼,以取代第二本機函數NFuncB 283。在步驟③,控制返回至本機代碼
28,以完成NFuncA282的執行。最后,在步驟@,控制返回至主要的可執行 主題171。
圖6顯示程序代碼的示例區段,以說明反向綁定是特別有幫助的實際情況。
在該示例中,functionA 171是被翻if和執行為目標代碼的主題代碼。翻 譯器19本機綁定至函數"getSomelnfo" 282的本機代碼版本,其被執行為本 機代碼。該本機函數"getSomelnfo"包括對 "malloc"函數的調用,"malloc" 函數分配存儲器區域,以便"getSomelnfo"函數運行。然而,該存儲器分配 恰好由該主題代碼中的functionA釋放。執行malloc函數的本機版本導致存 儲器泄漏和潛在缺陷。換言之,在主題代碼和本機代碼的執行之間發生了保 持存儲器分配一致性的問題。
如圖6所示,在此示例中,存在從本機代碼函數"getSomelnfo" 282到 "malloc"函數173的主題代碼版本的反向綁定。在本才幾函數"getSomelnfo" 282的執行期間,對"malloc"函數的調用導致翻譯器19被調用。翻譯器19 將主題"malloc"函數173翻譯為目標代碼。在由翻譯器19所保持的仿真主 題狀態中,"malloc"和"free"此時被正確地酉己對。才丸4亍主題"ma〗loc"函數 173的結果返回至本機"getSomelnfo"函數282,以分配表示aBuffer的存儲 器。
為了說明起見,圖6的示例已被簡化。反向綁定最好發生在本機綁定碼 中的多個不同點上,并且可發生在多個不同子級別上。
在特定的示例實施例中,通過由對主題代碼17的反向綁定部分的鏈接替 代綁定本機代碼28中的鏈接來應用反向綁定。
圖7示出用于執行反向綁定的示例存儲器再尋址機制。圖7是目標處理 器13的存儲器18的示意性表示,該存儲器18存儲本機代碼區段282、 283 以及主題代碼區段173等。在這種情況下,如同圖5 ,在第 一本機庫NLibA 280a 和第二本機庫NLibB 280b中分別提供本機函數NFuncA 282和NFuncB 283。 因此,第 一本機庫NLibA 280a依賴于第二本機庫NLibB 280b,并且NLibB 是NLibA的從屬。在另一實施例中,在單個庫中設置第一函數NFuncA 282 和第二函數NFuncB 283,但NFuncB仍是NFuncA的從屬。
此外,圖7顯示了已由翻譯器19從主題代碼173產生的目標代碼213。 目標代碼213可在目標處理器13上執行,以替代主題代碼173。
當需要時,目標架構通常將通過例如動態鏈接程序將本機庫280a以及任 何從屬(例如,庫280b)加載到存儲器18。但是,在本發明的示例實施例中, 當初始化翻譯器19時,將本機庫280a(及其從屬280b)加載到存儲器18。盡 管這消耗較多存儲器,但好處在于本機庫280a、 280b能被翻譯器19立即運用。
在一個示例中,第一本機庫(NLibA 280a)中的依賴性和符號被解析,并 且第一本機庫280a中的鏈接被替代為主題庫173中的函數的鏈接,以成為反 向綁定主題函數。在圖7中,用對—reverse—NFuncB的調用來替代從NFuncA 282中對NF皿cB的調用。此替代調用以本機函數庫282中的調用存根來適當 地插入。反向調用存根此時通向主題函數SFuncB 173,其由翻譯器19翻譯 并以TFuncB 213被執行為目標代碼。
現在將詳細描述用于實施本^U綁定和反向綁定的示例^4'J 。
反向綁定點
在一個實施例中,使用專用的"反向綁定點"描述語言來識別將被綁定 的本機函數。反向綁定點描述包括(a)將被反向綁定的本機函數;以及(b)相 應的反向綁定主題函數。在執行的開始,翻譯器19讀取反向綁定點描述以識 別反向綁定點(從本機代碼調用主題函數的位置)。
在本機庫的初始化期間,當翻譯器19遇到這些反向綁定點時,翻譯器 19在本機代碼28中插入對適當的主題函數的調用存根。
在一個實施例中,特定的反向綁定點描述嵌入到翻譯器19中。在另一實 施例中,反向綁定點描述存儲在翻譯器19運行時讀取的單獨文件中,因此允 許終端用戶通過添加特定的本機對主題函數的映射來控制反向綁定機制22。 修改的本才幾庫
在另一實施例中,本機庫的特定翻譯器版本被預先創建,當編譯時該版 本具有反向綁定點,例如,嵌入到其中的反向調用存根。
當調用本機函數時,翻譯器19遵守目標架構的本機調用協定。通過比較, 在整個目標代碼21中,只要翻譯器19遵從一些一致性調用協定,目標代碼 21就不必要遵從目標架構調用協定。因此,當執行本機代碼28時,可應用 第一調用協定,并且當執行目標代碼21時,可應用第二調用協定。在這種情 況下,當在本機代碼28和目標代碼21之間移動時,可實施調用協定切換,
或反之亦然。
此外,翻譯器19可能需要執行目標機器狀態(如本機代碼28所表示)和 主題機器狀態(如目標代碼21所表示)之間的數據變換,上述兩種狀態都用于 反向綁定主題函數173的輸入參數和返回值(如果有的話)。這種數據變換的示 例可包括(i)字節序(endian)轉換(即,字節交換);(ii)數據結構對準;(iii)主題 地址和目標地址之間的轉換;以及(iv)值變換(例如,常數轉換或值縮放)。
例如,在MIPS架構上,函數參數被傳送到寄存器中,而在x86架構上, 參數被傳送到棧上。為了使MIPS-x86翻譯器調用本機函數,x86調用協定需 要將函數參數從主題寄存器組27移動到該棧。相反,對主題MIPS函數的反 向綁定需要將函數參數從該棧移動到主題寄存器組27。
調用存根
調用反向綁定主題函數173包含幾個步驟,包括參數設置、輸入參數 變換、函數調用以及結果變換。
參數設置指的是用于計算函數調用參數的值的代碼。本機代碼28方便地 計算參數值而不考慮函數是被調用作為本機函數283還是作為反向綁定主題
函數173。
輸入參數變換將函數調用參數值從其本機代碼28表示組織化為主題函 數173預期的格式和位置。
函數調用是以遵守應用于翻譯器19中的調用協定的方式對反向綁定主 題函數173的實際函數調用,并且包括(已重新格式化的)參數組織化為函數原 型所需的順序。函數原型指示函數的參數的順序和類型以及函數的返回值的 類型。例如,如果由翻譯器應用的調用協定需要將自變量傳送到棧上,則調 用反向綁定主題函數的代碼以正確順序將自變量放置到主題棧上,并使主題 棧指針相應移動。
結果變換對主題函數的返回值(如果有的話)進行轉換。反向綁定主題函 數173將以與主題架構一致的格式返回值,翻譯器19將該值轉換為由本機代 碼28所使用的表示。
"參數變換"指的是不同數據格式之間的所有各種轉換以及目標代碼21 和本機代碼28的調用轉換。執行參數變換的代碼稱為"調用存根",其包括 基本函數調用周圍的最小包裝(wrapper),其目的在于允許本機代碼調用者282 和主題代碼被調用者173相互作用。因此,單個"調用存根"可以被分為本
機代碼28和目標代碼21成份。參數變換是否整體地發生在目標代碼21中或 本機代碼28中依賴于反向綁定的實施。 本機代碼反向調用存根
圖8顯示使用在本機代碼中實行的調用存根281、 285的示例實施方式。 當進行從主題代碼171到本機綁定函數282的調用時,使用本機代碼調用存 根281。相反,當進行從綁定本機函數A到反向綁定主題函數B 173的調用 時,使用本機代碼反向調用存根285。在綁定本機代碼282內,翻譯器19用
屬庫283)。這里,反向調用存根285(預先)寫入到本機代碼中。每個反向調用 存根285執行上述參數變換,并且調用反向綁定主題函數173。
在一個實施例中,通過限定均勻反向調用存根函數接口而便于進行參數 變換。均勻調用存根函數接口限定所有反向調用存根的固定函數簽名和相應 的數據類型,這允許翻譯器19配置反向調用存根281而不需參照基本主題函 數173的函數簽名(原型)。這允許反向調用存根285可使用高級編程語言(例 如C或C十+)而實施,其使得本機綁定和反向綁定機制更容易被翻譯器19的 終端用戶理解。
在另 一實施例中,參數變換通過限定雙向均勻調用存根函數接口而便于 進行。該調用存根函數接口限定所有本機綁定函數調用211以及所有反向綁 定函數調用282的固定函數簽名。因此,本機綁定和反向綁定機制更容易被 翻譯器19的終端用戶理解。
目標代碼調用存根
圖9顯示使用目標代碼調用存根211和目標代碼反向調用存根215的另 一示例實施方式。這里,本機綁定和反向綁定的參數變換在目標代碼21中整 體地執行。在該實施例中,翻譯器19在譯碼時檢測來自主題代碼171的本機 綁定調用,并且將參數變換編碼為IR樹(其被最終產生為目標代碼)。通過表 示參數變換和IR中的本機函數原型的細節,調用存根代碼211變為合并到主 題代碼(即,調用存根的IR和主題代碼的IR是可區別的)。這允許翻譯器將最 優化(例如,群組區塊)應用于參數變換代碼。相比之下,在本機代碼中執行的 參數變換,例如,在本機代碼調用存根211中所執行的主題寄存器到函數參 數的映射(如上所述),存在于翻譯器19外部,并且不能被容易地最優化。類 似地,在目標代碼中也提供反向調用存根215,并且最優化在翻譯器19內實現。
本機代碼調用存才艮281、 285以及目標代碼調用存才艮和211、 215按照相 似的成對方式被適當地執行,然而,也可按照混合的成對方式執行。換言之, 本機代碼調用存根281與目標代碼反向調用存根285 —起使用,或反之亦然。
如上所述,本發明的示例實施例主要涉及以本機函數來替代主題函數(本 機綁定),反之亦然(反向綁定)。然而,本發明的實施例還擴展至任意替代和 添加。特別地,通過將額外反向綁定主題函數調用配置到本機代碼例程來適
當地實施反向綁定。這里,額外主題函數調用將執行控制臨時地返回到翻譯 器19。舉一示例而言,翻譯器可接著執行代碼,以便于在將控制返回到本機 代碼之前更新仿真的主題狀態。舉另一示例而言,翻譯器可應用特性描述 (profiling),以在主題程序中的特定點上在調用本機綁定代碼或已翻譯主題代 碼之間動態地進行選擇。 上下文再使用
圖10示出本發明示例實施例的另一方面。
圖10是上下文線程(thread)214的示意性表示。上下文線程214是一種數
據結構,其容納不同集合的數據,并允許翻譯器19在多線程的程序上操作。 該示例的數據結構容納(尤其是)抽象寄存器組27的當前值、仿真主題棧的位 置、仿真主題棧的尺寸、線程標識符以及與主題線程的翻譯有關的特定翻譯
器信息。
針對多線程程序中的每個線程,產生新的上下文線程。此外,上下文線 程用于每個反向綁定主題函數173。換言之,每當遇到反向綁定函數173時, 翻譯器19提供上下文線程214作為執行該線程的環境。
不幸地,存在與每個上下文線程的產生有關的開銷。特別地,需要保留 用于上下文線程的空間并接著以適當值來構成該數據結構的工作。新的上下 文線程的產生是相當昂貴的。
在本發明的示例實施例中,單個上下文線程在多個反向綁定主題函數之 間被共享。最好是,創建單個上下文線程數據結構214a,并接著用于第一反 向綁定主題函數173a,如圖10所示。當主題函數173a完成時,上下文線程 214a被存儲并不被丟棄。該數據結構保留在存儲器18中。
如圖10所示,當遇到第二反向綁定主題函數173b時,所存儲的主題上 下文被取回并被再使用。這里,所存儲的上下文線程214a被取回并成為用于
第二反向綁定主題函數173b的上下文線程214b。該過程隨著上下文線程214b 被存儲并被再使用作為用于第三反向綁定主題函數173c的上下文線程214c
而重復。
每當上下文線程被再使用時,用對于相應主題函數173b、 173c合適的值 來重新構成上下文線程。然而,該重新構成相比于產生全新的上下文線程而 言是不太昂貴的。因此,翻譯器19中的開銷顯著地減低。
以上所述的示例實施例具有許多優點。例如,即使當^l行本機代碼28 時,翻譯器也能夠通過將本機代碼的區段反向綁定回至翻譯器中的主題代碼, 來保留執行控制的量度。此外,執行反向綁定主題代碼更新由翻譯器19所保 持的主題狀態,例如,抽象寄存器組27。另外,執行反向綁定主題代碼允許 翻譯器更新仿真主題存儲器分配,例如棧和堆存儲器分配。翻譯器能夠通過 適當地布置反向綁定,來控制綁定本機代碼中的子庫的使用。級別控制被啟 用,并且翻譯器能夠執行最優化。例如,通過避免未與主題代碼共享相等的 浮點數精度的本機代碼函數,來改善參數顯示。
雖然已示出并描述了一些優選實施例,但本領域的技術人員應理解,在 不脫離權利要求限定的本發明的范圍的情況下,可進行各種變化和修改。
應注意與本申請相關的與本說明書共同提交或在本說明書之前提交以及 與本說明書公布于公開審查的所有文章和文檔,并且所有這些文章和文檔的
本說明書(包括任何權利要求、摘要和附圖)所公開的所有特征和/或所公 開的任何方法或過程中的所有步驟都可以按照任何組合方式組合,除了至少 某些特征和/或步驟是相互排斥的組合以外。
本說明書(包括任何權利要求、摘要和附圖)所公開的各個特征可由提供 相同、等效或相似目的的可選特征取代,除非明確地表明其不適用。因此, 除非明確地表明其不適用,所公開的各個特性僅僅是一系列等效或相似特征 中的一個示例。
本發明并不限于前述實施例的細節,本發明可延伸至本說明書(包括任何 權利要求、摘要和附圖)所公開的特征中的任一新穎部分或任何新穎的組合, 或是延伸至所公開的任何方法或過程中的步驟的任一新穎部分或任何新穎的組合。
權利要求
1、一種執行程序代碼的方法,該方法在從可由主題處理器執行的主題代碼(17)轉換為可由目標處理器(13)執行的目標代碼(21)期間執行程序代碼,該目標代碼(21)結合可由該目標處理器(13)本地執行的本機代碼(28)可由該目標處理器(13)執行,該方法包括以下步驟在該目標處理器上(13)執行第一主題代碼部分(171),作為已翻譯的目標代碼(21);從該第一主題代碼部分(171)調用,以在該目標處理器(13)上本地執行本機代碼部分(282);其中,從該本機代碼部分(282)調用,以執行第二主題代碼部分(173)作為已翻譯的目標代碼(21);從該第二主題代碼部分(173)的執行返回到該本機代碼部分(282)的執行;以及從該本機代碼部分(282)的執行返回到該第一主題代碼部分(171)的執行。
2、 根據權利要求1所述的方法,其中,該本機代碼部分(282)具有等效 主題代碼部分(172),使得執行該本機代碼部分(282)替代執行該等效主題代碼 部分(172)。
3、 根據權利要求1所述的方法,其中,該第二主題代碼部分(173)取代 等效本機代碼部分(283),使得執行該第二主題代碼部分(173)替代執行該等效 本機代碼部分(283)。
4、 根據權利要求1所述的方法,其中,該第二主題代碼部分(173)不具 有等效本機代碼部分(283)。
5、 根據權利要求1所述的方法,其中,執行該第二主題代碼部分(173) 更新該目標處理器(13)上所保持的仿真主題狀態,以表示在該主題處理器中執 行該主題代碼(17)。
6、 根據權利要求1所述的方法,還包括以下步驟 確定是執行該第二主題代碼部分(173)還是執行第二本機代碼部分(283);以及提供從該本機代碼部分(282)到該第二本機代碼部分(283)的鏈接,或者提 供從該本機代碼部分(282)到該第二主題代碼部分(173)的鏈接。
7、 根據權利要求1所述的方法,其中,該第二主題代碼部分(173)提供用于執行的主題庫函數,以替代等效本機庫函數。
8、 根據權利要求1所述的方法,其中,該本機代碼部分(282)是包括對 從屬第二本機庫函數(NFuncB)的調用的第一本機庫函數(NFuncA),并且該方 法包括以對該第二主題代碼部分(173)的調用取代該調用。
9、 根據權利要求1所述的方法,還包括以下步驟 將本機庫(280)加載到該目標處理器(13)的存儲器,該本機庫(280)至少包括第 一本機函數(NFuncA)和第二本機函數(NFuncB),其中,該第二本機函數 (NFuncB)是該第一本機函數(NFuncA)的從屬;以及以對與該第二主題代碼部分(173)相關的存儲器位置的調用來取代該本 機庫(280)中對與該第二本機函數(NFuncB)相關的存儲器位置的調用。
10、 根據權利要求9所述的方法,還包括以下步驟 至少加載第一本機庫(280);解析該第一本機庫(280)中的依賴性,并為一個或多個從屬函數(NFuncB) 分配存儲器位置;以及以對與該第二主題代碼部分(173)相關的存儲器位置的調用來選擇性地 取代該第 一本機庫(280)中對為該 一個或多個從屬函數(NFuncB)中的至少一 個函數分配的存儲器位置的調用。
11、 根據權利要求6所述的方法,其中,該確定步驟包括提供反向綁 定點描述,該反向綁定點描述包括(a)本機函數(NFuncB)的識別,作為將被 反向綁定的該第二本機代碼部分(283),以及(b)將被調用的主題函數(SFuncB) 的識別,作為用于替代該本機函數(NF皿cB)的該第二主題代碼部分(173)。
12、 根據權利要求11所述的方法,還包括當遇到包含在該反向綁定點 描述中的該本機函數(NFuncB)時,在該本機代碼部分(282)中插入對該主題函 數(SFuncB)的反向調用存根(215, 285)。
13、 根據權利要求12所述的方法,還包括在本機函數調用之前、之后 或替代該本機函數調用,在該本機代碼(28)中插入該反向調用存根(215,285)。
14、 4艮據權利要求11所述的方法,還包括將該反向綁定點描述嵌入到 執行從主題代碼(17)到目標代碼(21)的轉換的翻譯器(19)內。
15、 根據權利要求11所述的方法,還包括在進行從主題代碼(17)到目 標代碼(21)的轉換的翻譯器(19)的執行開始時,從存儲的反向綁定點描述文件讀取該反向綁定點描述。
16、 根據權利要求6所述的方法,其中,該確定步驟還包括提供修改 的本機庫(280)作為該本機代碼部分(282),其中,該修改的本機庫(280)適用于 執行從主題代碼(17)到目標代碼(21)的轉換的翻譯器(19),并且其中,該修改 的本機庫(280)包括從該本機庫(280)到該第二主題代碼部分(173)的鏈接。
17、 根據權利要求1所述的方法,其中,該本機代碼部分(282)提供用于 執行的第一本機庫函數(NFuncA)以替代等效主題庫函數,并且該第二主題代 碼部分(173)提供用于執行的主題庫函數以替代等效本機庫函數,并且該方法 還包括以下步驟將零個或更多個第 一函數參數從目標代碼表示變換為本機代碼表示,并 根據該第 一本機庫函數(NFuncA)的原型利用該零個或更多個已變換的第 一函 數參數調用該第 一本機庫函數(NFuncA);將零個或更多個第二函數參數從本機代碼表示變換為主題代碼表示,并 根據該主題庫函數的原型利用該零個或更多個已變換的第二函數參數調用該 主題庫函數;將已調用的主題庫函數的零個或更多個第二返回值從主題代碼表示變換 為本機代碼表示,并返回到該第一本機庫函數(NFuncA);以及將已調用的本機函數的零個或更多個第一返回值從本機代碼表示變換為 主題代碼表示,并返回到該第一主題代碼部分(171)。
18、 根據權利要求1所述的方法,還包括插入進行從該本機代碼部分
19、 根據權利要求18所述的方法,其中,在本機代碼(28)中提供該反向 調用存根(215,285)。
20、 根據權利要求18所述的方法,其中,該反向調用存根(215, 285)包 括由執行從主題代碼(17)到目標代碼(21)的轉換的翻譯器(19)所產生的目標代 碼(21)。
21、 根據權利要求20所述的方法,還包括將該反向調用存根(215, 285)的中間表示整合為用于主題代碼(17)的區塊 的中間表示森林;以及產生用于該中間表示森林的目標代碼(21)。
22、 根據權利要求1所述的方法,還包括以下步驟提供上下文線程數據結構(214),其用于從主題代碼(17)到目標代碼(21) 的轉換;使用該上下文線程數據結構(214),將第二主題代碼部分(173)轉換為該已 翻譯的目標代碼(21)版本;將該上下文線程數據結構(214)存儲在該目標處理器(13)的存儲器中;以及當第二次或之后遇到該第二主題代碼部分(173)時,再使用該存儲的上下 文線程數據結構(214)。
23、 根據權利要求22所述的方法,還包括以下步驟部分(173b);以及上下文線程數據結構(214)以供使用。
24、 根據權利要求22所述的方法,其中,該上下文線程數據結構(214) 至少提供抽象寄存器組(27)的表示、仿真主題棧的位置、該仿真主題棧的尺寸、 線程標識符以及與該主題代碼部分的翻譯相關的特定翻譯器信息。
25、 一種翻譯器裝置,該翻譯器裝置執行從可由主題處理器執行的主題 代碼(17)到可由目標處理器(13)執行的目標代碼(21)的程序代碼轉換,該目標 代碼(21)結合可由該目標處理器(13)本地執行的本機代碼(28)可由該目標處理 器(13)執行,該翻譯器裝置包括翻譯器單元(19),用于將第一主題代碼部分(171)翻譯為用于在該目標處 理器(13)上執行的已翻譯目標代碼(21),其中,已翻譯的第一主題代碼部分(171) 包括用于在該目標處理器(13)上本地執行本機代碼部分(282)的調用,其中,翻譯器單元(19)提供該本機代碼部分(282),以包括用于執行第二碼部分(l73)的執行返回到該本機代碼部分(282)的執行,并使得該本機代碼部 分(282)的執行返回到該第一主題代碼部分(171)的執行。
26、 根據權利要求25所述的翻譯器裝置,其中,該本機代碼部分(282) 具有等效主題代碼部分(172),使得執行該本機代碼部分(282)替代執行該等效 主題代碼部分(172)。
27、 根據權利要求25所述的翻譯器裝置,其中,該第二主題代碼部分(173) 取代等效本機代碼部分(283),使得執行該第二主題代碼部分(173)替代執行該 等效本機代碼部分(283)。
28、 根據權利要求25所述的翻譯器裝置,其中,該第二主題代碼部分(173) 不具有等效本才幾代碼部分(283)。
29、 根據權利要求25所述的翻譯器裝置,其中,執行該第二主題代碼部 分(173)更新該目標處理器(13)上所保持的仿真主題狀態,以表示在該主題處 理器中執行該主題代碼(17)。
30、 根據權利要求25所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為確定是執行該第二主題代碼部分(173)還是執行第二本機代碼部分(283), 并且提供從該本機代碼部分(282)到該第二本機代碼部分(283)的鏈接,或者提 供從該本機代碼部分(282)到該第二主題代碼部分(173)的鏈接。
31、 根據權利要求25所述的翻譯器裝置,其中,該第二主題代碼部分(173) 提供用于執行的主題庫函數,以替代等效本機庫函數。
32、 根據權利要求25所述的翻譯器裝置,其中,該本機代碼部分(282) 是包括對從屬第二本機庫函數(NFuncB)的調用的第 一本機庫函數(NFuncA), 并且該翻譯器單元(19)被配置為以對該第二主題代碼部分(173)的調用取代該 調用。
33、 根據權利要求25所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為將本機庫(280)加載到該目標處理器(13)的存儲器,該本機庫(280)至少包 括第 一本機函數(NFuncA)和第二本機函數(NFuncB),其中,該第二本機函數 (NFimcB)是該第 一本機函數(NFuncA)的從屬,并且該翻譯器單元(19)以對與 該第二主題代碼部分(173)相關的存儲器位置的調用來取代該本機庫(280)中 對與該第二本機函數(NFuncB)相關的存儲器位置的調用。
34、 根據權利要求33所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為至少加載第一本才幾庫(280a),解析該第一本才幾庫(280)中的依賴性,為一 個或多個從屬庫(280b)中的一個或多個從屬函數(NFimcB)分配存儲器位置, 并且以對與該第二主題代碼部分(173)相關的存儲器位置的調用來選擇性地取 代該第一本機庫(280a)中對從屬函數(NFuncB)的分配的存儲器位置的調用。
35、 根據權利要求30所述的翻譯器裝置,其中,該翻譯器單元(19)參照 反向綁定點描述,該反向綁定點描述包括(a)本機函數的識別,作為將被反 向綁定的該第二本機代碼部分(283),以及(b)將被調用的主題函數的識別,作 為用于替代該本機函數的該第二主題代碼部分(173)。
36、 根據權利要求35所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為當遇到包含在該反向綁定點描述中的該本機函數時,在該本機代碼部分 (282)中插入對該主題函數的反向調用存根(215, 285)。
37、 根據權利要求36所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為在本機函數調用之前、之后或替代該本機函數調用,在該本機代碼(28) 中插入該反向調用存根(215, 285)。
38、 根據權利要求35所述的翻譯器裝置,其中,該反向綁定點描述被嵌 入到該翻"^器裝置內。
39、 根據權利要求35所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為在該翻譯器裝置的執行開始時,從存儲的反向綁定點描述文件讀取該反 向綁定點描述。
40、 根據權利要求30所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為提供修改的本機庫(280),其中,該修改的本機庫(280)適用于包含本機代 碼部分(282)的該翻譯器裝置,并且其中,該修改的本機庫(280)包括從該本機 庫(280)到該第二主題代碼部分(173)的鏈接。
41、 根據權利要求25所述的翻譯器裝置,其中,該本機代碼部分(282) 包括用于執行的第 一本機庫函數(NFuncA)以替代等效主題庫函數(SFuncA), 并且該第二主題代碼部分(l73)包括用于執行的主題庫函數(SFuncB)以替代等 效本機庫函數(NFuncB),并且其中,該翻譯器單元(19)被配置為執行以下步 驟將零個或更多個第一函數參數從目標代碼表示變換為本機代碼表示,并 根據該第一本機庫函數(NF皿cA)的原型利用該零個或更多個已變換的第 一函 數參數調用該第一本機庫函數(NFuncA);將零個或更多個第二函數參數從本機代碼表示變換為主題代碼表示,并 根據該主題庫函數(SFuncB)的原型利用該零個或更多個已變換的第二函數參 數調用該主題庫函數(SFuncB);將已調用的主題庫函數(SFuncB)的零個或更多個第二返回值從主題代碼 表示變換為本機代碼表示,并返回到該第 一本機庫函數(NFuncA);以及將已調用的本機函數(NFuncA)的零個或更多個第一返回值從本機代碼 表示變換為主題代碼表示,并返回到該第一主題代碼部分(171)。
42、 根據權利要求25所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為插入進行/人該本機代碼部分(282)到該第二主題代碼部分(173)的調用的 反向調用存根(215,285)。
43、 根據權利要求42所述的翻譯器裝置,其中,在本機代碼(28)中提供 該反向調用存根(215,285)。
44、 根據權利要求42所述的翻譯器裝置,其中,該反向調用存根(215, 285)碼(21)。
45、 根據權利要求44所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為將該反向調用存根(215, 285)的中間表示整合為用于主題代碼(17)的區塊 的中間表示森林;以及產生用于該中間表示森林的目標代碼(21)。
46、 根據權利要求25所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為提供上下文線程數據結構(214),其用于從主題代碼(17)到目標代碼(21) 的轉換;使用該上下文線程數據結構(214),將第二主題代碼部分(173)轉換為該已 翻譯的目標代碼(21)版本;將該上下文線程數據結構(214)存儲在該目標處理器(13)的存儲器中;以及當第二次或之后遇到該第二主題代碼部分(173)時,再使用該存儲的上下 文線程數據結構(214)。
47、 根據權利要求46所述的翻譯器裝置,其中,該翻譯器單元(19)被配 置為部分(173b);以及該存儲的上下文線程數據結構(214)以供使用。
48、 根據權利要求46所述的翻譯器裝置,其中,該上下文線程數據結構 (214)至少提供抽象寄存器組的表示、仿真主題棧的位置、該仿真主題棧的尺寸、線程標識符以及與該主題代碼部分的翻譯相關的特定翻譯器信息。
49、 一種計算機可讀介質,其上記錄可由計算機執行以實現一種程序代 碼轉換的方法的指令,該方法執行從可由主題處理器執行的主題代碼(l7)到可可由該目標處理器(13)本地執行的本機代碼(28)可由該目標處理器(13)執行, 該方法包括以下步驟在該目標處理器上(13)執行第一主題代碼部分(171),作為已翻譯的目標 代碼(21);從該第一主題代碼部分(171)調用,以在該目標處理器(13)上本地執行本 機代碼部分(282);其中,從該本機代碼部分(282)調用,以執行第二主題代碼部分(173)作為 已翻譯的目標代碼(21);從該第二主題代碼部分(173)的執行返回到該本機代碼部分(282)的執行;以及從該本機代碼部分(282)的執行返回到該第 一主題代碼部分(171 )的執行。
全文摘要
在程序代碼轉換(特別是動態二進制翻譯)中,主題代碼(17)通過翻譯器(19)被翻譯為目標代碼(21),以在目標處理器(13)上執行。目標代碼的選定部分(例如,庫函數SFuncA(172))被執行本機代碼的一部分(例如本機函數NFuncA(282))所替代。本機函數對于目標處理器是本機特有的。該方法還包括執行主題代碼部分(例如,主題函數SFuncB(173))以替代本機代碼部分(例如,庫函數NFuncB(283))。反向綁定技術以本機代碼的選定部分(特別是本機庫函數)替代主題代碼,以在該翻譯器(19)內保持控制。這有助于維持該翻譯器(19)中的準確主題狀態,還具有其它優點。
文檔編號G06F9/455GK101189578SQ200680019817
公開日2008年5月28日 申請日期2006年5月26日 優先權日2005年6月4日
發明者喬納森·杰·安德魯斯, 杰拉恩特·諾森 申請人:特蘭斯蒂有限公司