專(zhuān)利名稱(chēng):帶多重優(yōu)化的函數(shù)級(jí)即時(shí)翻譯引擎的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于通過(guò)將舊版本計(jì)算機(jī)系統(tǒng)(legacy computer system)所使用的代碼轉(zhuǎn)換成由主機(jī)計(jì)算機(jī)系統(tǒng)執(zhí)行的代碼而在主機(jī)硬件環(huán)境中虛擬化舊版本硬件環(huán)境的系統(tǒng)和方法,并且本發(fā)明尤其涉及在函數(shù)級(jí)而不是在指令級(jí)執(zhí)
行代碼翻譯的即時(shí)(just-in-time)翻譯引擎,并且該即時(shí)翻譯引擎通過(guò)將舊版本代碼指令的序列翻譯成相應(yīng)的主機(jī)代碼指令序列來(lái)優(yōu)化所得的代碼。
背景技術(shù):
在更新像游戲控制臺(tái)那樣的計(jì)算機(jī)系統(tǒng)硬件體系結(jié)構(gòu)以實(shí)現(xiàn)更快、具備更多功能的硬件時(shí),開(kāi)發(fā)者面臨由為舊版本計(jì)算機(jī)系統(tǒng)平臺(tái)開(kāi)發(fā)的應(yīng)用程序或游戲帶來(lái)的對(duì)舊版本計(jì)算機(jī)系統(tǒng)的向后兼容性問(wèn)題。尤其,商業(yè)上希望最新的硬件體系結(jié)構(gòu)支持為舊版本硬件體系結(jié)構(gòu)開(kāi)發(fā)的應(yīng)用程序或游戲。然而,如果最新的硬件體系結(jié)構(gòu)實(shí)質(zhì)上或根本上不同于舊版本硬件體系結(jié)構(gòu),兩個(gè)系統(tǒng)之間的體系結(jié)構(gòu)差異會(huì)使得舊版本應(yīng)用程序或游戲沒(méi)有真實(shí)硬件修改和/或軟件補(bǔ)丁就在新硬件體系結(jié)構(gòu)工作變得非常困難甚至不可能。由于用戶(hù)通常期待這樣的向后兼容性,這些問(wèn)題的解決對(duì)最新的硬件體系結(jié)構(gòu)的成功至關(guān)重要。
個(gè)人計(jì)算機(jī)體系結(jié)構(gòu)和軟件仿真的最近進(jìn)展已經(jīng)為計(jì)算機(jī)甚至游戲控制
臺(tái)提供足夠強(qiáng)大的硬件體系結(jié)構(gòu)來(lái)允許以軟件而不是硬件來(lái)仿真舊版本應(yīng)用程序或游戲。這類(lèi)軟件仿真器將用于應(yīng)用程序或游戲的標(biāo)題指令(titleinstruction)即時(shí)地翻譯成新硬件體系結(jié)構(gòu)可以理解的設(shè)備指令。這一軟件仿真方式對(duì)游戲控制臺(tái)的向后兼容性特別有用,因?yàn)橛螒蚩刂婆_(tái)的開(kāi)發(fā)者保持對(duì)硬件和軟件平臺(tái)的控制,而且對(duì)舊版本游戲相當(dāng)熟悉。
大多數(shù)這類(lèi)軟件仿真器每次一個(gè)處理器指令地翻譯代碼。例如,軟件仿真器可以把單個(gè)x86指令從源流提出來(lái),即時(shí)地將其翻譯成目標(biāo)處理器(例如,PowerPC (PPC))指令集的一個(gè)或多個(gè)預(yù)定義等效(指令),在目標(biāo)處理器上運(yùn)行那些PPC指令,然后返回到源流處理下一個(gè)指令。這一方式在概念上很簡(jiǎn)單,但是它有缺點(diǎn)。例如,這一方式涉及在軟件仿真器和實(shí)現(xiàn)使用X86指令
集寫(xiě)成的舊版本應(yīng)用程序或游戲系統(tǒng)的虛擬機(jī)(VM)之間的許多慢速上下文來(lái)回切換。當(dāng)翻譯指令時(shí),這一方式也從軟件仿真器強(qiáng)占任何上下文,強(qiáng)迫仿真器依賴(lài)于簡(jiǎn)單的映射指令表。這是顯著的性能缺點(diǎn),因?yàn)槿绻浖抡嫫髂軌蚩紤]上下文的指令,那么軟件仿真器將能夠翻譯代碼塊而非一個(gè)指令接著一個(gè)指令地翻譯,由此顯著地改進(jìn)翻譯性能。
因此,需要通過(guò)為待翻譯的指令提供一種在上下文中考慮的機(jī)制來(lái)改進(jìn)指令翻譯性能的技術(shù)。本發(fā)明解決本領(lǐng)域中的這一需求。
發(fā)明概述
通過(guò)在源代碼的函數(shù)級(jí)而不是在操作碼級(jí)翻譯代碼,本發(fā)明解決本領(lǐng)域中的上述需求。本發(fā)明的軟件仿真器從源流抓取完整的x86函數(shù),將整個(gè)函數(shù)翻譯成目標(biāo)處理器的一個(gè)等效函數(shù),并在返回到源流之前一次性地運(yùn)行該函數(shù)。這一技術(shù)不但減少上下文切換,而且由于一次性見(jiàn)到完整的x86函數(shù)上下文,軟件仿真器可以?xún)?yōu)化代碼翻譯。例如,軟件仿真器可以決定將一個(gè)x86指令序
列翻譯成一個(gè)高效的PPC等效序列。許多這樣的優(yōu)化產(chǎn)生更緊密的已仿真二進(jìn)制,這是任何軟件仿真器尤其期望的,特別是必須很快地運(yùn)行代碼的游戲仿真器。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)該認(rèn)識(shí)到,盡管本發(fā)明的一個(gè)示例性實(shí)施例在可從微軟公司獲得的Xbox計(jì)算機(jī)游戲系統(tǒng)中被實(shí)現(xiàn),但在其中使用代碼翻譯的任何計(jì)算機(jī)游戲控制臺(tái)或其他類(lèi)型計(jì)算機(jī)系統(tǒng)均可受益于本發(fā)明的函數(shù)級(jí)代碼翻譯技術(shù)?;谝韵略敿?xì)描述,本領(lǐng)域中的技術(shù)人員將會(huì)明顯看出本發(fā)明的其他特性。
附圖簡(jiǎn)述
參照附圖,進(jìn)一步描述用于依照本發(fā)明提供具有多重優(yōu)化的函數(shù)級(jí)即時(shí)代
碼翻譯的系統(tǒng)和方法,在附圖中
圖1A是一個(gè)表示用于計(jì)算機(jī)系統(tǒng)的仿真操作環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯分層的框圖1B是一個(gè)表示虛擬化計(jì)算系統(tǒng)的框圖,其中仿真由主機(jī)操作系統(tǒng)執(zhí)行(直接執(zhí)行或經(jīng)由管理程序執(zhí)行);
7圖ic是一個(gè)表示備選虛擬化計(jì)算系統(tǒng)的框圖,在該計(jì)算系統(tǒng)中仿真由與 主機(jī)操作系統(tǒng)并列運(yùn)行的虛擬機(jī)監(jiān)視器執(zhí)行;
圖2示出了虛擬機(jī)中實(shí)現(xiàn)的舊版本游戲系統(tǒng)的虛擬存儲(chǔ)器和主機(jī)游戲系統(tǒng) 的虛擬存儲(chǔ)器之間的關(guān)系。
圖3示出了使用本發(fā)明的技術(shù)把來(lái)自虛擬機(jī)中實(shí)現(xiàn)的舊版本游戲系統(tǒng)的 X 8 6代碼轉(zhuǎn)換成主機(jī)游戲系統(tǒng)的P P C代碼的系統(tǒng)。
圖4示出了本發(fā)明的JIT 二進(jìn)制翻譯器的操作的流程圖。
圖5A是一個(gè)表示可以在其中實(shí)現(xiàn)本發(fā)明的、具有多種計(jì)算設(shè)備的示例性
網(wǎng)絡(luò)環(huán)境的框圖;以及
圖5B是一個(gè)表示在其中可以實(shí)現(xiàn)本發(fā)明的示例性無(wú)限制主機(jī)計(jì)算設(shè)備的框圖。
示例性實(shí)施例的詳細(xì)描述
概述
本發(fā)明提供一種用于在源代碼的函數(shù)級(jí)而非操作碼(opcode)級(jí)處翻譯代 碼的系統(tǒng)和方法。本發(fā)明的軟件仿真器從源流中抓取完整的x86函數(shù)而非一個(gè) 指令,將整個(gè)函數(shù)翻譯成目標(biāo)處理器的等效函數(shù),而且在返回源流之前一次性 執(zhí)行該函數(shù),籍此減少上下文轉(zhuǎn)換。同時(shí),由于軟件仿真器一次見(jiàn)到完整的源 代碼函數(shù)上下文,因此該軟件仿真器可以?xún)?yōu)化代碼翻譯。例如,軟件仿真器可 以決定將一個(gè)x86指令序列翻譯成一個(gè)高效的PPC等效序列。許多這樣的優(yōu)化 產(chǎn)生更緊密的已仿真二進(jìn)制。
如下將描述本發(fā)明其他更詳細(xì)的各方面,但首先,以下描述提供有關(guān)虛擬 機(jī)、仿真器的總的概述和部分普通詞匯以及相關(guān)聯(lián)的術(shù)語(yǔ),因?yàn)樾枰琅c操 作系統(tǒng)和主機(jī)處理器("CPU")虛擬化技術(shù)有關(guān)的這些術(shù)語(yǔ)。在這種情況下, 為本描述闡述一組詞匯,本領(lǐng)域中普通技術(shù)人員會(huì)發(fā)現(xiàn)這些詞匯對(duì)隨后描述依 照本發(fā)明的技術(shù)在源代碼的函數(shù)級(jí)別翻譯代碼的裝置、系統(tǒng)和方法是有用的。
虛擬機(jī)概述
計(jì)算機(jī)包括被設(shè)計(jì)用以執(zhí)行特定系統(tǒng)指令集的通用中央處理單元(CPU), 即"處理器"。 一組具有類(lèi)似體系結(jié)構(gòu)或設(shè)計(jì)規(guī)格的處理器可以被認(rèn)為是相同 處理器系列的成員。目前處理器家族的例子包括由亞歷桑那州鳳凰城的摩托羅 拉公司制造的摩托羅拉680X0處理器系列;由加利福尼亞州桑尼維爾市的英特爾公司制造的英特爾80X86處理器系列;以及由國(guó)際商用機(jī)器(IBM)或摩托
羅拉公司制造并且被用于加利福尼亞州庫(kù)珀蒂諾市的蘋(píng)果計(jì)算機(jī)公司制造的
計(jì)算機(jī)的PowerPC處理器系列。盡管一組處理器由于其類(lèi)似體系結(jié)構(gòu)和設(shè)計(jì)考 慮而位于同一系列中,但是根據(jù)其時(shí)鐘速度和其他性能參數(shù), 一個(gè)系列中的處 理器可能相差很大。
每個(gè)微處理器系列執(zhí)行該處理器系列獨(dú)有的指令。處理器或處理器系列能 執(zhí)行的共同指令集被稱(chēng)為處理器指令集。例如,英特爾80X86處理器系列所用 的指令集與PowerPC處理器系列所用的指令集不兼容。英特爾80X86指令集 基于復(fù)雜指令集計(jì)算機(jī)(CISC)格式,而摩托羅拉PowerPC指令集則基于精 簡(jiǎn)指令集計(jì)算機(jī)(RISC)格式。CISC處理器使用大量指令, 一些指令能執(zhí)行 相當(dāng)復(fù)雜的功能,但是通常需要許多時(shí)鐘周期來(lái)執(zhí)行。另一方面,RISC處理器
使用少量的可用指令來(lái)以高得多的速率執(zhí)行較為簡(jiǎn)單的一組函數(shù)。
計(jì)算機(jī)系統(tǒng)之間處理器系列的獨(dú)特性也通常導(dǎo)致各計(jì)算機(jī)系統(tǒng)的硬件體 系結(jié)構(gòu)的其他元件之間的不兼容。用英特爾80X86處理器系列的處理器制造的 計(jì)算機(jī)系統(tǒng)具有與用PowerPC處理器系列的處理器制造的計(jì)算機(jī)系統(tǒng)不同的 硬件體系結(jié)構(gòu)。因?yàn)樘幚砥髦噶罴约坝?jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的獨(dú)特性, 應(yīng)用軟件程序通常被寫(xiě)成能夠在在運(yùn)行特定操作系統(tǒng)的特定計(jì)算機(jī)系統(tǒng)上運(yùn) 行。
一般而言,計(jì)算機(jī)制造商通過(guò)使得更多而不是更少的應(yīng)用程序在與該計(jì)算 機(jī)制造商產(chǎn)品線(xiàn)關(guān)聯(lián)的微處理器系列上運(yùn)行來(lái)爭(zhēng)取最大的市場(chǎng)份額。為了擴(kuò)大 能在計(jì)算機(jī)系統(tǒng)上運(yùn)行的操作系統(tǒng)和應(yīng)用程序的數(shù)目,已經(jīng)開(kāi)發(fā)一個(gè)技術(shù)領(lǐng) 域,在其中具有一種CPU類(lèi)型的給定計(jì)算機(jī)(被稱(chēng)為主機(jī))包括虛擬器程序, 該虛擬器程序允許主機(jī)計(jì)算機(jī)仿真不相關(guān)CPU類(lèi)型(被稱(chēng)為客機(jī))的指令。于 是,主機(jī)計(jì)算機(jī)響應(yīng)于給定客機(jī)指令執(zhí)行將引起一個(gè)或多個(gè)主機(jī)指令被調(diào)用的 應(yīng)用程序,由此該主機(jī)計(jì)算機(jī)既可以運(yùn)行為它自己的硬件體系結(jié)構(gòu)設(shè)計(jì)的軟 件,也可以運(yùn)行為具有不相關(guān)硬件結(jié)構(gòu)的計(jì)算機(jī)寫(xiě)成的軟件。
作為一個(gè)更具體的例子,例如由蘋(píng)果計(jì)算機(jī)公司制造的計(jì)算機(jī)系統(tǒng)可以執(zhí) 行為基于PC計(jì)算機(jī)系統(tǒng)寫(xiě)成的操作系統(tǒng)和程序。它也可以使用虛擬器程序在 單個(gè)處理器多個(gè)不兼容的操作系統(tǒng)上并發(fā)執(zhí)行。在后一種配置中,盡管每個(gè)操 作系統(tǒng)與另一操作系統(tǒng)不兼容,但是虛擬器程序能主存若干操作系統(tǒng)中的每一 個(gè),籍此允許其他不兼容的操作系統(tǒng)在相同的主機(jī)計(jì)算機(jī)系統(tǒng)上并發(fā)運(yùn)行。當(dāng)客機(jī)計(jì)算機(jī)系統(tǒng)在主機(jī)計(jì)算機(jī)系統(tǒng)上被仿真時(shí),該客機(jī)計(jì)算機(jī)系統(tǒng)就被 稱(chēng)為"虛擬機(jī)",因?yàn)樵摽蜋C(jī)計(jì)算機(jī)系統(tǒng)只作為一個(gè)特定硬件體系結(jié)構(gòu)的操作
的純軟件表示而存在于主機(jī)計(jì)算機(jī)系統(tǒng)中。于是在諸如微軟公司的Virtual PC
的虛擬機(jī)軟件中運(yùn)行的操作系統(tǒng)可以被稱(chēng)為"客機(jī)"和/或"虛擬機(jī)",而運(yùn)行 虛擬機(jī)軟件的操作系統(tǒng)可以被稱(chēng)為"主機(jī)"。類(lèi)似地,在新游戲系統(tǒng)里的虛擬 機(jī)或仿真軟件中運(yùn)行的舊版本游戲系統(tǒng)內(nèi)的操作系統(tǒng)可以被稱(chēng)為"客機(jī)",而 運(yùn)行該虛擬機(jī)或仿真軟件的新游戲系統(tǒng)的操作系統(tǒng)可以被稱(chēng)為"主機(jī)"。術(shù)語(yǔ) 虛擬器、仿真器、直接執(zhí)行器、虛擬機(jī)和處理器仿真有時(shí)可互相交換地被用于 指示使用本領(lǐng)域中的技術(shù)人員所知道并理解的一種或數(shù)種方法來(lái)模仿或仿真 完整的計(jì)算機(jī)系統(tǒng)的硬件體系結(jié)構(gòu)的能力。而且,任何形式的術(shù)語(yǔ)"仿真"的 所有使用被規(guī)定為覆蓋這一廣義,而并非旨在要區(qū)分仿真的指令執(zhí)行概念和虛
擬機(jī)中的操作系統(tǒng)指令的直接執(zhí)行。因此,例如可從微軟公司獲得的Virtual PC 軟件"仿真"(通過(guò)指令執(zhí)行仿真或直接執(zhí)行)包含英特爾80X86 Pentium處 理器和各種主板組件和板卡的完整計(jì)算機(jī),而且這些組件的操作是在正運(yùn)行在 主機(jī)上的虛擬機(jī)中被"仿真"。在主機(jī)計(jì)算機(jī)的操作系統(tǒng)軟件和硬件體系結(jié)構(gòu) (諸如,具有PowerPC處理器的計(jì)算機(jī)系統(tǒng))上執(zhí)行的虛擬器程序模仿完整的 客機(jī)計(jì)算機(jī)系統(tǒng)的操作。
虛擬化的一般情況允許一個(gè)處理器體系結(jié)構(gòu)執(zhí)行來(lái)自其他處理器體系結(jié) 構(gòu)的操作系統(tǒng)和軟件(例如,在x86 Windows上執(zhí)行PowerPC Mac程序,反之 亦然),但一個(gè)重要的特定情況是當(dāng)下層處理器體系結(jié)構(gòu)相同的情況(在x86 上運(yùn)行各種版本的x86 Linux或不同版本的x86 Windows)。在后一情況中, 存在更有效率地執(zhí)行客機(jī)OS及其應(yīng)用程序的潛力,因?yàn)榛局噶罴窍嗤摹?在此情況下,客機(jī)指令被允許直接在處理器上執(zhí)行而不會(huì)失去控制或使得系統(tǒng) 開(kāi)放而受到攻擊(也就是說(shuō),客機(jī)OS被放入沙箱(sandbox))。這就是特許 和非特許的分隔以及用于控制對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)的技術(shù)開(kāi)始起作用的所在。對(duì)于 存在體系結(jié)構(gòu)不匹配(PowerPC<-〉x86)的虛擬化,傳統(tǒng)上使用兩種方法一 個(gè)指令接著一個(gè)指令的仿真(相對(duì)較慢),或者從客機(jī)指令集翻譯成本地指令 集指令(更有效率,但要使用翻譯步驟)。如果使用指令仿真,那么使得環(huán)境 穩(wěn)健相對(duì)容易;然而,如果使用翻譯,則隨后向后映射到處理器體系結(jié)構(gòu)相同 的特殊情況。
依照本發(fā)明,客機(jī)操作系統(tǒng)被虛擬化,并因此依照本發(fā)明的一個(gè)示例性情形是在可以從微軟公司獲得的Virtual Server或者Xbox游戲控制臺(tái)上的Xbox 操作系統(tǒng)上仿真Windows95 、 Windows98 、 Windows 3.1或Windows NT 4.0
操作系統(tǒng)。在各實(shí)施例中,本發(fā)明因而描述用于控制客機(jī)對(duì)主機(jī)計(jì)算機(jī)的基本 物理資源(存儲(chǔ)器、設(shè)備等等)中的部分或全部的訪(fǎng)問(wèn)的系統(tǒng)和方法。
虛擬器程序用作在主機(jī)硬件體系結(jié)構(gòu)和由運(yùn)行在所仿真的環(huán)境中的軟件 (例如,操作系統(tǒng)、應(yīng)用程序等等)傳輸?shù)闹噶钪g的互換。這一虛擬器程序 可以是主機(jī)操作系統(tǒng)(HOS),該HOS是在物理計(jì)算機(jī)硬件上直接地運(yùn)行的操 作系統(tǒng)(并且可以包含管理程序)。作為其他選擇,所仿真的環(huán)境也可以是虛 擬機(jī)監(jiān)視器(VMM),該VMM是在硬件上直接運(yùn)行的軟件層,也許并列地運(yùn) 行并和主機(jī)操作系統(tǒng)一起工作,并能通過(guò)暴露與該VMM正在虛擬化的硬件相 同的接口來(lái)虛擬化主機(jī)的所有資源(以及特定的虛擬資源)。這一虛擬化使得 虛擬器(以及主機(jī)計(jì)算機(jī)系統(tǒng)本身)能夠運(yùn)行而不被運(yùn)行在其上的操作系統(tǒng)層 注意。
處理器仿真于是能夠讓客機(jī)操作系統(tǒng)在由虛擬器創(chuàng)建的虛擬機(jī)上運(yùn)行,其 中該虛擬器運(yùn)行在包括物理硬件和主機(jī)操作系統(tǒng)的主機(jī)計(jì)算機(jī)系統(tǒng)上。
從概念性角度來(lái)看,計(jì)算機(jī)系統(tǒng)通常包含運(yùn)行在基礎(chǔ)硬件層上的一個(gè)或多 個(gè)軟件層。這一分層是為了抽象而作出的。通過(guò)定義用于給定軟件層的接口, 該層能由在其上的其他層不同地實(shí)現(xiàn)。在一個(gè)設(shè)計(jì)良好的計(jì)算機(jī)系統(tǒng)中,每個(gè) 層只知道(也只依賴(lài)于)直接在它之下的層。這允許替換一個(gè)層或一個(gè)"堆棧"
(多個(gè)毗鄰的層),而不會(huì)給在上述層或堆棧之上的層帶來(lái)負(fù)面影響。例如, 軟件應(yīng)用程序(較高的層)通常依賴(lài)于操作系統(tǒng)的較低級(jí)別(較低的層)來(lái)將 文件寫(xiě)到一些形式的永久存儲(chǔ)器,而且這些應(yīng)用程序不需要理解將數(shù)據(jù)寫(xiě)到軟 盤(pán)、硬盤(pán)或網(wǎng)絡(luò)文件夾之間的不同。如果這一較低的層被用于寫(xiě)入文件的新操 作系統(tǒng)組件所替換,較高層的軟件應(yīng)用程序的操作保持不受影響。
分層軟件的靈活性允許虛擬機(jī)(VM)呈現(xiàn)事實(shí)上是另一軟件層的虛擬硬 件層。這樣,VM能為在其上的軟件層創(chuàng)建這樣的假象軟件層正運(yùn)行在它們 自己的私有計(jì)算機(jī)系統(tǒng)上,因此諸VM能允許多個(gè)"客機(jī)系統(tǒng)"在單個(gè)"主機(jī) 系統(tǒng)"上并發(fā)運(yùn)行。這一級(jí)別的抽象由圖IA的示例表示。
圖1A表示用于計(jì)算機(jī)系統(tǒng)中所仿真的操作環(huán)境的硬件和軟件體系結(jié)構(gòu)的 邏輯分層。在該圖中,仿真程序54在物理硬件體系結(jié)構(gòu)52上直接地或間接地 運(yùn)行。仿真程序54可以是(a)在主機(jī)操作系統(tǒng)旁邊運(yùn)行的虛擬機(jī)監(jiān)視器,(b)
11具有本地仿真能力的專(zhuān)用主機(jī)操作系統(tǒng),或(C)具有管理程序組件的主機(jī)操作
系統(tǒng),其中該管理程序組件執(zhí)行該仿真。仿真程序54仿真客機(jī)硬件體系結(jié)構(gòu) 56 (示出為虛線(xiàn)以舉例說(shuō)明該組件是"虛擬機(jī)"的事實(shí),也就是說(shuō),硬件并不 實(shí)際存在,而是由上述仿真程序的硬件54仿真)??蜋C(jī)操作系統(tǒng)58在客機(jī)硬 件體系結(jié)構(gòu)56上執(zhí)行,軟件應(yīng)用程序60在客機(jī)操作系統(tǒng)58上運(yùn)行。在圖1A 的仿真操作環(huán)境中一一而且因?yàn)榉抡娉绦?4的操作一一即使軟件應(yīng)用程序60 被設(shè)計(jì)成運(yùn)行在通常與主機(jī)操作系統(tǒng)和硬件體系結(jié)構(gòu)52不兼容的操作系統(tǒng)上, 該軟件應(yīng)用程序60也可以在計(jì)算機(jī)系統(tǒng)50中運(yùn)行。
圖1B示出了包括直接在物理計(jì)算機(jī)硬件62上運(yùn)行的主機(jī)操作系統(tǒng)軟件層 64的虛擬化計(jì)算系統(tǒng),在這一系統(tǒng)中,主機(jī)操作系統(tǒng)(主機(jī)OS) 64通過(guò)暴露 與該主機(jī)OS正在仿真(或虛擬)的硬件相同的接口來(lái)提供對(duì)物理計(jì)算機(jī)硬件 62的資源的訪(fǎng)問(wèn),而這又使得主機(jī)操作系統(tǒng)64能夠運(yùn)行而不被運(yùn)行在其上的 操作系統(tǒng)層注意。同樣為執(zhí)行仿真,主機(jī)OS64可以是具有本地仿真能力的特 別設(shè)計(jì)的操作系統(tǒng),或者可以可選地具有用于執(zhí)行仿真的整合管理程序組件的 標(biāo)準(zhǔn)操作系統(tǒng)(未示出)。
如圖1B所示出,在主機(jī)OS64上面是兩個(gè)虛擬機(jī)(VM)實(shí)現(xiàn),VMA66, 它例如可以是虛擬化的英特爾386處理器,以及VMB68,它例如可以是摩托 羅拉680 X0處理器系列的其中之一的虛擬化版本。上述的VM 66和68分別是 客機(jī)操作系統(tǒng)(客機(jī)OS) A70和B72。運(yùn)行在客機(jī)OS70上的是兩個(gè)應(yīng)用程 序,應(yīng)用程序Al 74和應(yīng)用程序A2 76,運(yùn)行在客機(jī)OS B 72上面是應(yīng)用程序 Bl 78。
關(guān)于圖1B, VM A 66和VM B 68 (被示出為在虛線(xiàn)中)是虛擬化計(jì)算機(jī) 硬件表示,該虛擬化計(jì)算機(jī)硬件表示只作為軟件構(gòu)造存在,并且由于(一個(gè)或 多個(gè))專(zhuān)用仿真軟件的仿真使得這一虛擬化計(jì)算機(jī)硬件表示成為可能,其中(一 個(gè)或多個(gè))專(zhuān)用仿真軟件不僅分別向客機(jī)OS A 70和客機(jī)OS B 72呈現(xiàn)VM A 66 和VM B 68,而且也執(zhí)行客機(jī)OS A 70和客機(jī)OS B 72間接地與真實(shí)的物理計(jì) 算機(jī)硬件62交互所必需的所有軟件步驟,而認(rèn)識(shí)到上述幾點(diǎn)非常重要。
圖1C示出了備選的虛擬化計(jì)算系統(tǒng),其中仿真由在主機(jī)操作系統(tǒng)64"旁邊 運(yùn)行的虛擬機(jī)監(jiān)視器(VMM) 64'來(lái)執(zhí)行。對(duì)于特定實(shí)施例而言,VMM 64'可 以是運(yùn)行在主機(jī)操作系統(tǒng)64"上并只通過(guò)主機(jī)操作系統(tǒng)64"與物理計(jì)算機(jī)硬件 交互62的應(yīng)用程序。在其他實(shí)施例中,如圖1C所示,VMM64'可以改為包含一個(gè)部分獨(dú)立的軟件系統(tǒng),它在某些級(jí)別上經(jīng)由主機(jī)操作系統(tǒng)64"間接地與計(jì)
算機(jī)硬件62交互,但在其他級(jí)別上VMM64,直接地與計(jì)算機(jī)硬件62交互(類(lèi) 似于主機(jī)操作系統(tǒng)直接地與計(jì)算機(jī)硬件交互的方式)。而在另外一些實(shí)施例中, VMM64'可以包含完全獨(dú)立的軟件系統(tǒng),它在所有級(jí)別上直接地與計(jì)算機(jī)硬件 62交互(類(lèi)似于主機(jī)操作系統(tǒng)64"直接地與計(jì)算機(jī)硬件62交互的方式),而不 需要利用主機(jī)操作系統(tǒng)64"(盡管為協(xié)調(diào)計(jì)算機(jī)硬件62的使用并避免沖突的范 圍內(nèi)仍然與上述主機(jī)操作系統(tǒng)64"交互)。
預(yù)期用于實(shí)現(xiàn)虛擬機(jī)的所有這些改變來(lái)實(shí)現(xiàn)在此所述的本發(fā)明的各個(gè)備 選實(shí)施例,而且在此不應(yīng)該被解釋為將本發(fā)明限制在任何的特定仿真實(shí)施例。 另外,對(duì)分別經(jīng)由VMA66禾口/或VMB68在應(yīng)用程序74、 76和78之間的交 互的任何引用(可能在硬件仿真的情形中)應(yīng)該被解釋為事實(shí)上是在應(yīng)用程序 74、 76和78與已經(jīng)創(chuàng)建虛擬化的虛擬器之間的交互。同樣地,對(duì)用主機(jī)操作 系統(tǒng)64和/或計(jì)算機(jī)硬件62而在應(yīng)用程序VM A 66和/或VM B 68之間的交互 的任何引用(可能是為了直接地或間接地在計(jì)算機(jī)硬件62上執(zhí)行計(jì)算機(jī)指令)
應(yīng)該被解釋為事實(shí)上是視情況而定在已經(jīng)創(chuàng)建虛擬化的虛擬器與主機(jī)操作系 統(tǒng)64和/或計(jì)算機(jī)硬件62之間的交互。 帶多重優(yōu)化的函數(shù)級(jí)即時(shí)版本引擎
本發(fā)明涉及使用軟件仿真器來(lái)在主機(jī)游戲系統(tǒng)平臺(tái)上虛擬化諸如Xbox的 舊版本游戲系統(tǒng)平臺(tái)的系統(tǒng)的各特征,其中主機(jī)游戲系統(tǒng)平臺(tái)是舊版本游戲系 統(tǒng)平臺(tái)的升級(jí)。軟件仿真器使得主機(jī)游戲系統(tǒng)平臺(tái)能夠以無(wú)縫方式運(yùn)行舊版本 游戲。如上所述,本發(fā)明提供具有即時(shí)翻譯引擎的軟件仿真器,其中即時(shí)翻譯 引擎在函數(shù)級(jí)翻譯代碼并優(yōu)化代碼以改進(jìn)代碼翻譯效率。本發(fā)明的技術(shù)將會(huì)在 下面參照?qǐng)D2-4描述。
依照本發(fā)明,當(dāng)主機(jī)游戲系統(tǒng)控制臺(tái)的介質(zhì)載入器接收到含有舊版本計(jì)算 機(jī)游戲的介質(zhì)并被主機(jī)游戲系統(tǒng)的操作系統(tǒng)要求啟動(dòng)該舊版本計(jì)算機(jī)游戲時(shí), 介質(zhì)載入器改為調(diào)用本發(fā)明的軟件仿真器來(lái)為舊版本計(jì)算機(jī)游戲的操作提供 向后兼容性。軟件仿真器把舊版本計(jì)算機(jī)游戲當(dāng)作與任何主機(jī)游戲系統(tǒng)的本地 計(jì)算機(jī)游戲相同的權(quán)限和限制的標(biāo)準(zhǔn)游戲來(lái)載入并運(yùn)行。在啟動(dòng)時(shí),軟件仿真 器請(qǐng)求保留兩個(gè)物理存儲(chǔ)塊(memory chunk):用于主存虛擬化舊版本計(jì)算機(jī) 游戲的64MB段,以及用于在實(shí)現(xiàn)舊版本計(jì)算機(jī)游戲的虛擬機(jī)和主機(jī)計(jì)算機(jī)游 戲系統(tǒng)之間提供管道(conduit)的64MB段。
13圖2示出了在虛擬機(jī)中所實(shí)現(xiàn)的舊版本游戲系統(tǒng)的虛擬存儲(chǔ)器和主機(jī)游戲 系統(tǒng)的虛擬存儲(chǔ)器之間的關(guān)系。在這個(gè)例子中,假定舊版本游戲系統(tǒng)是可以從
微軟公司獲得的Xbox。作為例示,舊版本Xbox游戲系統(tǒng)在虛擬機(jī)環(huán)境中被實(shí) 現(xiàn),并且假定可以使用4GB的虛擬地址空間80。作為例示,舊版本Xbox游戲 系統(tǒng)假定舊版本4GB虛擬地址空間,以擁有分專(zhuān)用于所插入的舊版本游戲的虛 擬標(biāo)題(virtual title)的存儲(chǔ)器82的一部分、專(zhuān)用于虛擬的舊版本Xbox內(nèi)核 的存儲(chǔ)器84、直接映射到主機(jī)游戲系統(tǒng)的物理RAM 88的64MB共享存儲(chǔ)器的 64MB共享存儲(chǔ)器86、以及在4GB虛擬地址空間中的以上區(qū)域中的虛擬MMIO 地址空間90。本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到,舊版本Xbox游戲系統(tǒng)中的 MMIO地址空間90含有指向被Xbox游戲系統(tǒng)控制臺(tái)的操作系統(tǒng)的驅(qū)動(dòng)器調(diào)用 的實(shí)際硬件設(shè)備的指針。被虛擬機(jī)環(huán)境所實(shí)現(xiàn)的舊版本Xbox游戲訪(fǎng)問(wèn)的虛擬 地址空間被配置為與本地舊版本Xbox游戲系統(tǒng)環(huán)境中的虛擬地址空間一樣, 因此欺騙舊版本Xbox游戲使它認(rèn)為是在本地舊版本Xbox游戲系統(tǒng)環(huán)境中工 作。
另一方面,本地主機(jī)Xbox游戲系統(tǒng)的虛擬地址空間92以仿真器二進(jìn)制存 儲(chǔ)器94、本地主機(jī)Xbox內(nèi)核96以及主存舊版本Xbox虛擬機(jī)的64MB物理存 儲(chǔ)器段98為特征。也提供64MB共享存儲(chǔ)器100,它直接映射到本地主機(jī)Xbox 游戲系統(tǒng)的物理RAM 88中的64MB共享存儲(chǔ)器。正如下面將參照?qǐng)D3更詳細(xì) 地解釋的那樣,x86 Xbox內(nèi)核84被重復(fù)創(chuàng)建的副本以及最初被傳遞到游戲載 入器的x86標(biāo)題二進(jìn)制(title binary)被載入到保留給虛擬Xbox游戲系統(tǒng)的 64MB空間98。另一方面,在64MB共享存儲(chǔ)空間100中,本地主機(jī)Xbox游 戲系統(tǒng)載入其調(diào)度器程序,載入特定的手動(dòng)優(yōu)化的"glue (聯(lián)結(jié))"函數(shù),并 創(chuàng)建用于虛擬機(jī)(VM)狀態(tài)和已翻譯代碼高速緩存的結(jié)構(gòu)(圖3)。這些函數(shù) 經(jīng)由共享存儲(chǔ)器88,與運(yùn)行在虛擬機(jī)上的舊版本Xbox游戲一起共享,這實(shí)際 上是可由虛擬機(jī)實(shí)現(xiàn)舊版本Xbox和本地主機(jī)Xbox操作系統(tǒng)的仿真引擎訪(fǎng)問(wèn)的 RAM的物理共享扇區(qū)。
圖3示出了使用本發(fā)明的技術(shù)將來(lái)自虛擬機(jī)中所實(shí)現(xiàn)的舊版本游戲系統(tǒng)的 x86代碼轉(zhuǎn)換成主機(jī)游戲系統(tǒng)的PPC代碼的軟件仿真系統(tǒng)。作為例示,本發(fā)明
的軟件仿真系統(tǒng)包含四個(gè)主要組件
即時(shí)(JIT) 二進(jìn)制翻譯器102,它將舊版本Xbox游戲系統(tǒng)的x86代碼 即時(shí)二進(jìn)制翻譯成PPC代碼或本地主機(jī)Xbox游戲系統(tǒng)的其他處理器代碼; 舊版本Xbox虛擬機(jī)(VM) 104,它重復(fù)創(chuàng)建在復(fù)制的x86 Xbox內(nèi)核 106和未翻譯標(biāo)題代碼存儲(chǔ)器108中的大部分舊版本Xbox環(huán)境、以及在存儲(chǔ)的 標(biāo)題資源(title resource)和狀態(tài)存儲(chǔ)器110中的舊版本標(biāo)題環(huán)境;
共享存儲(chǔ)器88,它允許在本地主機(jī)Xbox游戲系統(tǒng)的操作系統(tǒng)和VM 104之間進(jìn)行通信,并在跟蹤VM狀態(tài)116時(shí)主存調(diào)度器112和已翻譯代碼高 速緩存114;以及
Xbox異常處理器118,它使用在本地Xbox內(nèi)核122上的設(shè)備仿真120 來(lái)仿真本地主機(jī)Xbox系統(tǒng)的硬件設(shè)備,以供Xbox VM 104在運(yùn)行舊版本Xbox 游戲時(shí)使用。
在初始化舊版本Xbox虛擬機(jī)104中的舊版本Xbox游戲之后,本地主機(jī) Xbox游戲的操作系統(tǒng)將控制傳遞給駐留在共享存儲(chǔ)器空間88內(nèi)的調(diào)度器112。 從根本上來(lái)講,調(diào)度器112為虛擬化的舊版本Xbox游戲引導(dǎo)代碼執(zhí)行。它維 護(hù)在x86空間中被引用的每個(gè)x86函數(shù)和已翻譯代碼高速緩存114中的等效的 已翻譯的PPC (或其他主處理器)函數(shù)之間的散列表中的映射。調(diào)度器112的 工作是將已翻譯的PPC (或其他主處理器)函數(shù)按虛擬化x86舊版本Xbox標(biāo) 題所期望的順序連鎖在一起。調(diào)度器112的第一個(gè)任務(wù)是模擬啟動(dòng)舊版本x86 Xbox內(nèi)核106和標(biāo)題存儲(chǔ)器110中的舊版本x86標(biāo)題。如果本地主機(jī)Xbox游 戲系統(tǒng)的主機(jī)OS不執(zhí)行顯著的已仿真二進(jìn)制的預(yù)翻譯,調(diào)度器112首先就沒(méi) 有被請(qǐng)求的x86函數(shù)的高速緩存PPC (或其他主處理器)等效函數(shù)。為了填充 這些間隙,調(diào)度器112調(diào)用JIT二進(jìn)制翻譯器102以進(jìn)行即時(shí)函數(shù)翻譯。
本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到,例如,將x86代碼翻譯成PPC代碼在某 些方面是棘手的。首先,x86 ISA包含不帶有簡(jiǎn)單PPC ISA等效函數(shù)的若干復(fù) 雜函數(shù)。其次,本地主機(jī)Xbox游戲系統(tǒng)的PPC處理器可能被配置以大尾端 (Big-Endian)解釋解釋?zhuān)欢f版本Xbox標(biāo)題則期望小尾端(Little-Endian) 解釋。另外,舊版本Xboxx86代碼的天真的翻譯會(huì)導(dǎo)致本地主機(jī)Xbox系統(tǒng)硬 件上指令和高速緩存出錯(cuò)的放大。本發(fā)明的JIT二進(jìn)制翻譯器設(shè)法緩和"翻譯 膨脹(bloat)",這將會(huì)在下面描述。
如圖3所例示,本發(fā)明的JIT二進(jìn)制翻譯器被實(shí)現(xiàn)為五個(gè)階段(102a、102b、 102c、 102d、 102e),每個(gè)階段將會(huì)被依次描述。
步驟1: x86讀取和解析。在步驟102a中,JIT 二進(jìn)制翻譯器102被調(diào)度 器112調(diào)用,并被交給引用虛擬機(jī)104的4GB地址空間80中的x86代碼的擴(kuò)
15展指令指針(EIP) 112b。在二進(jìn)制翻譯的這個(gè)第一階段中,執(zhí)行地址翻譯以 在軟件仿真器自己的4GB虛擬地址空間92中定位相應(yīng)的存儲(chǔ)器地址。然后, 軟件仿真器將來(lái)自4GB地址空間80的x86函數(shù)操作碼解析成對(duì)應(yīng)于該x86代 碼函數(shù)的結(jié)構(gòu)。如果證明該函數(shù)是比在虛擬地址空間92中預(yù)先分配結(jié)構(gòu)空間 更大,那么JIT二進(jìn)制翻譯器102將暫停執(zhí)行。
步驟2: x86代碼優(yōu)化。 一旦JIT二進(jìn)制翻譯器102已經(jīng)載入它的目標(biāo)x86 函數(shù),它在步驟102b中執(zhí)行一些初始優(yōu)化。標(biāo)識(shí)已知用以產(chǎn)生PPC低效的x86 代碼序列以供將來(lái)引用。例如,優(yōu)化器做出不需要尾端字節(jié)倒置(endian byte reversal)的非易失性存儲(chǔ)器/負(fù)載操作的注釋。
步驟3: PPC描述符產(chǎn)生。優(yōu)化器在步驟102c把它的產(chǎn)品交給JIT中間層, 該中間層執(zhí)行將己優(yōu)化的x86指令的天真的翻譯轉(zhuǎn)換成相應(yīng)的多個(gè)PPC指令。 通常,單個(gè)x86指令對(duì)應(yīng)于多個(gè)PPC指令。像fsin那樣的很復(fù)雜的x86指令被 存儲(chǔ)在共享存儲(chǔ)器88中手寫(xiě)編碼的PPC "glue"函數(shù)替換。
步驟4: PPC 二進(jìn)制可執(zhí)行優(yōu)化。在步驟102d中,PPC 二進(jìn)制可執(zhí)行(BE) 優(yōu)化器獲得在步驟102c產(chǎn)生的PPC指令序列,并嘗試盡可能多地減少指令計(jì) 數(shù)、循環(huán)計(jì)數(shù)和可能的緩存出錯(cuò)率。在這一階段之后仍在PPC代碼中剩余的任 何"翻譯膨脹"只能由主機(jī)計(jì)算機(jī)系統(tǒng)的處理器速度彌補(bǔ)。
步驟5: PPC編譯和存儲(chǔ)。最后,在步驟102e中,JIT二進(jìn)制翻譯器102 將PPC描述映射到32位PPC機(jī)器指令中。完整的已翻譯函數(shù)被存儲(chǔ)在共享存 儲(chǔ)器88中的已翻譯代碼高速緩存114,該函數(shù)的啟動(dòng)地址被作為指令地址寄存 器(IAR) 112a存儲(chǔ)到調(diào)度器112的散列表中毗鄰原始EIP112b的位置。這允 許軟件仿真器記住從輸入代碼到已翻譯代碼塊的映射,以便可以通過(guò)在調(diào)用JIT 二進(jìn)制翻譯器102之前檢査調(diào)度器112的散列表來(lái)避免重新編譯相同的代碼 塊。于是軟件仿真器放棄控制,并且線(xiàn)程返回到虛擬機(jī)104。
當(dāng)虛擬機(jī)104繼續(xù)執(zhí)行時(shí),調(diào)度器112再次嘗試將其需要的EIP映射到 IAR。這次,查詢(xún)是成功的,調(diào)度器112使得代碼執(zhí)行跳轉(zhuǎn)到已命名的IAR。 對(duì)應(yīng)于舊版本Xbox指令序列中的一個(gè)或多個(gè)x86指令的期望的PPC函數(shù)得以 執(zhí)行,而在舊版本Xbox虛擬機(jī)(104)的4GB地址空間中的資源上工作。當(dāng) 舊版本Xbox虛擬機(jī)完成期望的PPC函數(shù)的處理時(shí),控制經(jīng)由帶有對(duì)下一個(gè)x86 函數(shù)的請(qǐng)求的中斷跳轉(zhuǎn)回到調(diào)度器112,并且完整的JIT 二進(jìn)制翻譯循環(huán)再次 開(kāi)始。由于計(jì)算機(jī)游戲通常被編碼為巨大的循環(huán),因此在執(zhí)行的最初幾秒之后,大多數(shù)x86函數(shù)己經(jīng)被翻譯并且在已翻譯代碼中高速緩存114被呈現(xiàn)為已優(yōu)化 的PPC代碼(或其他處理器代碼,如果本地主機(jī)Xbox游戲系統(tǒng)使用不同的處 理器的話(huà))。
本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到,JIT二進(jìn)制翻譯器102是直到恰好需要 x86函數(shù)的時(shí)刻才會(huì)將那些x86函數(shù)翻譯成PPC代碼的即時(shí)編譯器。當(dāng)JIT二 進(jìn)制翻譯器102第一次遇到一個(gè)大函數(shù)時(shí)候,本發(fā)明的技術(shù)被設(shè)計(jì)為防止感覺(jué) 延遲??梢钥紤]一些選項(xiàng)來(lái)解決這一問(wèn)題
將較大函數(shù)預(yù)編譯成二進(jìn)制。軟件仿真器可以在啟動(dòng)應(yīng)用程序或游戲 之前花費(fèi)一些時(shí)間來(lái)標(biāo)識(shí)難以解決的函數(shù),并在開(kāi)始玩游戲之前編譯它們。這 會(huì)消除感覺(jué)抖動(dòng),但是也意味著更長(zhǎng)的啟動(dòng)延遲。
對(duì)一些函數(shù)執(zhí)行兩階段編譯。JIT 二進(jìn)制翻譯器102可以跳過(guò)一些函 數(shù)的性能優(yōu)化以便使它們更快地運(yùn)行。運(yùn)行在次要CPU上的另一線(xiàn)程可以及時(shí) 地優(yōu)化代碼,從而代替代碼高速緩存中的操作碼。
當(dāng)虛擬化舊版本Xbox游戲想要跟舊版本Xbox硬件通話(huà)但不知道它正在 本地主機(jī)平臺(tái)上工作時(shí),由舊版本Xbox游戲發(fā)起的設(shè)備請(qǐng)求和系統(tǒng)調(diào)用會(huì)創(chuàng) 建異常。正如許多操作系統(tǒng)的情況一樣,在舊版本Xbox操作系統(tǒng)中,游戲通 過(guò)寫(xiě)入到周知存儲(chǔ)器映射輸入/輸出(MMIO)位置來(lái)與大多數(shù)設(shè)備通信。如圖 2所例示,在Xbox操作系統(tǒng)的情況中,這些MMIO位置是在4GB虛擬存儲(chǔ)器 空間的上層區(qū)域90中。正如同樣被轉(zhuǎn)讓給本發(fā)明受讓人并通過(guò)引用結(jié)合在此 的美國(guó)專(zhuān)利申請(qǐng)?zhí)?微軟記錄號(hào)312634.01 )所描述的那樣,訪(fǎng)問(wèn)控制列表(ACL) 可用來(lái)限制和/或減少頁(yè)面許可(例如,只能讀取或者不能讀取或?qū)懭?以使得 實(shí)現(xiàn)舊版本Xbox游戲的虛擬機(jī)104缺乏對(duì)存儲(chǔ)器90中的這些MMIO地址的 讀取和寫(xiě)入特權(quán)。結(jié)果,當(dāng)在虛擬機(jī)中104運(yùn)行的舊版本Xbox游戲嘗試訪(fǎng)問(wèn) 其預(yù)期的設(shè)備存儲(chǔ)器卯時(shí),主機(jī)Xbox操作系統(tǒng)在126處探測(cè)到無(wú)效的Xbox MMIO設(shè)備地址并中止該線(xiàn)程。存儲(chǔ)器訪(fǎng)問(wèn)違規(guī)消息被發(fā)送管理程序128,而 該管理程序128又將VM狀態(tài)信息傳遞給Xbox異常處理器118以解決該存儲(chǔ) 器訪(fǎng)問(wèn)違規(guī)。
處理被管理程序128轉(zhuǎn)發(fā)到Xbox異常處理器118的存儲(chǔ)器違規(guī)和任何有 意的系統(tǒng)調(diào)用,以使用來(lái)自舊版本Xbox游戲的MMIO寫(xiě)入中所提供的MMIO 地址來(lái)確定預(yù)期目標(biāo)設(shè)備。因?yàn)榇鎯?chǔ)器訪(fǎng)問(wèn)違規(guī)常常指示虛擬設(shè)備請(qǐng)求,Xbox 異常處理器18可以簡(jiǎn)單地檢查由管理程序128 (從VM狀態(tài)記錄器116)提供的虛擬機(jī)狀態(tài),并確定預(yù)期目標(biāo)設(shè)備。然后將控制給予Xb0X異常處理器118
中適當(dāng)?shù)腦box設(shè)備仿真器120,它翻譯并中繼虛擬機(jī)104對(duì)Xbox內(nèi)核122的 適當(dāng)函數(shù)或者對(duì)本地主機(jī)Xbox庫(kù)的請(qǐng)求。因?yàn)椴荒芗俣ū镜刂鳈C(jī)Xbox系統(tǒng)與 舊版本Xbox系統(tǒng)共享任何硬件,所以簡(jiǎn)單的指令轉(zhuǎn)發(fā)不是可選項(xiàng)。當(dāng)然,如 果硬件被共享,那么就可以使用指令轉(zhuǎn)發(fā)。
如圖3所例示, 一些對(duì)諸如硬盤(pán)機(jī)I/O之類(lèi)的Xbox物理設(shè)備124的本地 硬件請(qǐng)求會(huì)產(chǎn)生具有設(shè)備中斷130形式的異步回調(diào)。當(dāng)本地主機(jī)Xbox內(nèi)核122 接收到這樣一個(gè)中斷時(shí),它中止JIT 二進(jìn)制翻譯器102并將中斷數(shù)據(jù)提供給 Xbox異常處理器118中適當(dāng)?shù)腦box設(shè)備仿真器120,而該Xbox異常處理器 118又翻譯該應(yīng)答并將其存儲(chǔ)在共享存儲(chǔ)器空間88中。然后,通過(guò)模擬舊版本 Xbox中斷,將控制返回給虛擬機(jī)104,以使得虛擬機(jī)104可以處理新的數(shù)據(jù)。
圖4示出了本發(fā)明的JIT二進(jìn)制翻譯器102的操作。作為例示,在步驟132, 通過(guò)在所提供的地址開(kāi)始,JIT二進(jìn)制翻譯器102開(kāi)始編譯輸入源代碼。JIT二 進(jìn)制翻譯器102因此開(kāi)始建立機(jī)器可執(zhí)行代碼流以供執(zhí)行。然而,依照本發(fā)明, 在步驟134,通過(guò)識(shí)別代碼模式并相應(yīng)地動(dòng)作,JIT二進(jìn)制翻譯器102的解析器 102a標(biāo)識(shí)機(jī)器代碼中的函數(shù)。例如,源函數(shù)可以被定義為具有一起完成任務(wù)并 返回經(jīng)過(guò)處理的變量的開(kāi)始部分(prolog)、主體和結(jié)尾部分(epilog)。開(kāi)始 部分介紹函數(shù)并定義變量,而結(jié)尾部分則結(jié)束函數(shù)視情況而定以返回控制流并 返回易變量值。通常,結(jié)尾部分是RET或IRET函數(shù)。另一方面,主體包括用 于執(zhí)行其他語(yǔ)句的代碼語(yǔ)句和條件,包括可以或不可以嵌套的條件轉(zhuǎn)移 (conditional branch)。
以下是解析器102如何解析來(lái)自代碼列表的簡(jiǎn)單函數(shù)的幾個(gè)例子。
A. 整數(shù)相加
int add(inti, intj) : prolog
{ : mov eax, i
return (i+j); : add eaxj
} : epilog
B. 整數(shù)相乘
int multiply(int i, intj) : prologmov sax, i imul eax,j epilog
C. 對(duì)整數(shù)ij計(jì)算j+(i*j) int multiplyadd(inti, intj)
return add(multiply(i j), j);
prolog pushj push i
call multiply push eax pushj call add epilog
D. 帶有條件跳轉(zhuǎn)的例子
以下示例示出了在認(rèn)為完成該函數(shù)之前要求分解的未完成條件轉(zhuǎn)移:
int arithmetic (int i, int j, int operation) if (operation = ADD)
:prolog
:cmp operation,ADD :jnz NotAdd
return (i+j);
else if (operation SUBTRACT) return (i-j); : mov eax,i
else if (operation -MULTIPLY)
:mov cax,i :add eaxj :ret
:NotAdd:
:cmp operation,SUBTRACT :jnz NotSubtract
:sub eaxj :ret
:NotSubtract:
:cmp operation,MULTIPLY
19return (i*j);
else if (operation==DIVIDE) return (i/j);
:jnz NotMultiply :mov eax,i :imul eax,j ret
:NotMultiply:
:cmp operation,DIVIDE
:jnz NotDivide
:mov cax,i
:idiv eax,j
:ret
:NotDivide: :epilog
如上述例子所例示,解析器102將開(kāi)始部分、主體和結(jié)尾部分看作函數(shù)塊。 該塊被通過(guò)分析代碼以標(biāo)識(shí)開(kāi)始部分和結(jié)尾部分并且標(biāo)識(shí)條件轉(zhuǎn)移操作,該塊 被標(biāo)識(shí)。入在步驟134所例示,如果當(dāng)?shù)浇Y(jié)尾部分時(shí)沒(méi)有未完成條件轉(zhuǎn)移,那 么就知道該函數(shù)是完整的。換句話(huà)說(shuō),如果RET或IRET被解析器102a遇到, 并且沒(méi)有未完成的條件轉(zhuǎn)移,那么JIT 二進(jìn)制翻譯器102知道已經(jīng)達(dá)到機(jī)器代 碼函數(shù)的結(jié)尾。
在步驟136,作為結(jié)果且由解析器102a提供的函數(shù)代碼塊可以被JIT 二進(jìn) 制翻譯器102的優(yōu)化器102b優(yōu)化以改進(jìn)處理效率。例如,PowerPC處理器是 本來(lái)是大尾端,以大尾端格式被載入的數(shù)據(jù)需要一個(gè)(或最多可能兩個(gè)) PowerPC指令,然而x86本來(lái)是小尾端,以小尾端格式被載入的數(shù)據(jù)需要一個(gè) 或多個(gè)(最多可達(dá)7個(gè))PowerPC指令。因此,可以由優(yōu)化器102b執(zhí)行的一 種明顯的優(yōu)化是在有可能時(shí)以大尾端格式存儲(chǔ)數(shù)據(jù),并避免將數(shù)據(jù)轉(zhuǎn)換成小尾 端格式。這一優(yōu)化使得在運(yùn)行時(shí)需要處理較少的指令。
作為另一個(gè)簡(jiǎn)單例子,設(shè)想編寫(xiě)一個(gè)源代碼塊以計(jì)算i值,其中i叫+ k。該 代碼可以被寫(xiě)成
k=0
跳轉(zhuǎn)至計(jì)算j值的例程 返回j的值i=j*l(
在這一簡(jiǎn)單例子中,因?yàn)閗i,無(wú)論所計(jì)算的j值是什么,乘積將會(huì)是零。
因此,這一代碼可以?xún)?yōu)化為i=0。本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到,在其中每 個(gè)指令被分開(kāi)翻譯的傳統(tǒng)系統(tǒng)中,因?yàn)檫€不知道該指令的上下文,所以必須解 決該跳轉(zhuǎn)例程的問(wèn)題。
一旦已經(jīng)標(biāo)識(shí)函數(shù)且已經(jīng)優(yōu)化代碼,在步驟138,在輸入機(jī)器代碼中構(gòu)成 函數(shù)的處理器指令被轉(zhuǎn)換成目標(biāo)處理器的機(jī)器代碼(例如,從x86到PowerPC)。 然后,在步驟140,所產(chǎn)生的機(jī)器代碼被優(yōu)化,例如,通過(guò)盡可能減少指令計(jì) 數(shù)、循環(huán)計(jì)數(shù)和可能的高速緩存出錯(cuò)率。在步驟142,作為結(jié)果的目標(biāo)處理器 的已優(yōu)化機(jī)器代碼優(yōu)化被存儲(chǔ)在已翻譯代碼高速緩存114中以供執(zhí)行。最后, 在步驟144, 一個(gè)條目被放置在調(diào)度器散列表之內(nèi),其中該調(diào)度器散列表標(biāo)識(shí) 已優(yōu)化代碼塊,以避免下次在輸入代碼流中遇到相同函數(shù)塊時(shí)重新編譯該相同 函數(shù)塊。
因此,本發(fā)明就提供了一種機(jī)制,藉此JIT二進(jìn)制翻譯器可以基于所接收 到的上下文更高效地將為第一處理器寫(xiě)成的指令翻譯第二處理器的指令。尤 其,對(duì)代碼的函數(shù)塊執(zhí)行二進(jìn)制翻譯,以便加速二進(jìn)制翻譯操作。當(dāng)與運(yùn)行在 虛擬機(jī)環(huán)境中的程序和游戲一起使用時(shí),依照本發(fā)明的這種JIT二進(jìn)制翻譯器 特別有利,其中在虛擬機(jī)環(huán)境中快速翻譯對(duì)平滑操作非常重要。本領(lǐng)域中的技 術(shù)人員將會(huì)認(rèn)識(shí)到,這類(lèi)技術(shù)可以被擴(kuò)展到所有類(lèi)型的應(yīng)用程序而不只是游戲
系統(tǒng)。而且,本發(fā)明的技術(shù)可以被用來(lái)提供實(shí)現(xiàn)軟件仿真技術(shù)的其他計(jì)算機(jī)系 統(tǒng)的二進(jìn)制翻譯。
示例件網(wǎng)絡(luò)化和分布式環(huán)境
盡管可以結(jié)合Xbox游戲系統(tǒng)體系結(jié)構(gòu)實(shí)現(xiàn)本發(fā)明的一個(gè)示例性實(shí)施例, 但是本領(lǐng)域中的技術(shù)人員能認(rèn)識(shí)到,可以結(jié)合能被部署為計(jì)算機(jī)網(wǎng)絡(luò)的一部分 或者被部署在分布式計(jì)算環(huán)境中的任何合適的主機(jī)計(jì)算機(jī)或其他客戶(hù)端或服 務(wù)器設(shè)備來(lái)實(shí)現(xiàn)本發(fā)明。在這方面,本發(fā)明涉及具有任意數(shù)量的存儲(chǔ)器或存儲(chǔ) 單元以及在任意數(shù)量的存儲(chǔ)單元或巻上發(fā)生的任意數(shù)量的應(yīng)用程序和進(jìn)程的 任何計(jì)算機(jī)系統(tǒng)或環(huán)境,其中該計(jì)算機(jī)系統(tǒng)或環(huán)境可以結(jié)合依照本發(fā)明虛擬化
客機(jī)OS來(lái)使用。本發(fā)明可以適用于具有在網(wǎng)絡(luò)化環(huán)境或分布式計(jì)算環(huán)境中部 署的服務(wù)器計(jì)算機(jī)和客戶(hù)端計(jì)算機(jī)的、擁有遠(yuǎn)程或本地存儲(chǔ)器的環(huán)境。本發(fā)明 也可以應(yīng)用于獨(dú)立的計(jì)算設(shè)備,其中該獨(dú)立計(jì)算設(shè)備擁有用于結(jié)合遠(yuǎn)程或本地
21服務(wù)產(chǎn)生、接收和傳輸信息的編程語(yǔ)言功能性、解釋和執(zhí)行能力。
分布式計(jì)算通過(guò)在計(jì)算設(shè)備和系統(tǒng)之間進(jìn)行交換來(lái)提供計(jì)算機(jī)資源和服
務(wù)的共享。這些資源和服務(wù)包括信息的交換、文件的高速緩存和磁盤(pán)存儲(chǔ)器。 分布式計(jì)算利用網(wǎng)絡(luò)連接性,允許客戶(hù)端利用他們的集體性能使整個(gè)企業(yè)受 益。在這方面,多種設(shè)備可以擁有涉及本發(fā)明的進(jìn)程的應(yīng)用程序、對(duì)象或資源。 圖5A提供示例性網(wǎng)絡(luò)化或分布式計(jì)算環(huán)境的示意圖。分布式計(jì)算環(huán)境包
含計(jì)算對(duì)象145a、 145b等等,以及計(jì)算對(duì)象或設(shè)備146a、 146b、 146c等等。 這些對(duì)象可以包含程序、方法、數(shù)據(jù)存儲(chǔ)、可編程邏輯等等。諸對(duì)象可以包含 相同或不同設(shè)備的部分,如PDA、聲音/視頻設(shè)備、MP3播放器、個(gè)人計(jì)算機(jī) 等等。每個(gè)對(duì)象能經(jīng)由通信網(wǎng)絡(luò)147與另一個(gè)對(duì)象通信。這一網(wǎng)絡(luò)本身可以包 含向圖5A的系統(tǒng)提供服務(wù)的其他計(jì)算對(duì)象和計(jì)算設(shè)備,且本身可以表示多個(gè) 互相連接的網(wǎng)絡(luò)。依照本發(fā)明的一個(gè)方面,每個(gè)對(duì)象145a、 145b等等或146a、 146b、 146c等等可以包含可以使用API或其他對(duì)象、軟件、固件和/或硬件來(lái)
請(qǐng)求使用本發(fā)明的虛擬化進(jìn)程的應(yīng)用程序。
也可以認(rèn)識(shí)到,像'146c那樣的對(duì)象可以被寄宿在另一計(jì)算設(shè)備145a、 145b 等等或者146a、 146b等等上。因此,盡管所述物理環(huán)境可以將所連接的設(shè)備示 出為計(jì)算機(jī),但這樣的例子只是示例性的,而且該物理環(huán)境可以備選地或者被 描繪或描述為包含諸如PDA、電視、MP3播放器等等的各種數(shù)字設(shè)備以及諸如 界面、COM對(duì)象等等的軟件對(duì)象。
存在多種支持分布式計(jì)算環(huán)境的系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計(jì)算系統(tǒng) 可以由本地網(wǎng)絡(luò)或廣泛分布式網(wǎng)絡(luò)通過(guò)有線(xiàn)或無(wú)線(xiàn)系統(tǒng)連接在一起。現(xiàn)在,許 多網(wǎng)絡(luò)被耦合到因特網(wǎng),其中因特網(wǎng)提供用于廣泛分布式計(jì)算的基礎(chǔ)設(shè)施,并 包含許多不同的網(wǎng)絡(luò)。任何一種基礎(chǔ)設(shè)施都可以用于與本發(fā)明的虛擬化進(jìn)程關(guān) 聯(lián)的示例性通信。
在家庭聯(lián)網(wǎng)環(huán)境中,至少有四種其中每種都可以支持獨(dú)特協(xié)議的不同網(wǎng)絡(luò) 傳輸介質(zhì),如電力線(xiàn)、數(shù)據(jù)(無(wú)線(xiàn)和有線(xiàn))、語(yǔ)音(例如,電話(huà))和娛樂(lè)介質(zhì)。 諸如燈開(kāi)關(guān)和電器等的大多數(shù)家庭控制設(shè)備可以使用輸電線(xiàn)來(lái)連接。像寬帶 (例如,DSL或線(xiàn)纜調(diào)制解調(diào)器)那樣的數(shù)據(jù)服務(wù)可以進(jìn)入家庭,并且可以使 用無(wú)線(xiàn)(例如,HomeRF或802.11B)或有線(xiàn)(例如,家庭電話(huà)網(wǎng)絡(luò)接口卡(Home PNA) 、 Cat5、以太網(wǎng)、甚至電力線(xiàn))連接在家庭中訪(fǎng)問(wèn)。語(yǔ)音話(huà)務(wù)也可以進(jìn) 入家庭,例如有線(xiàn)(例如,Cat3)或無(wú)線(xiàn)(例如,蜂窩式移動(dòng)電話(huà)),而且可以在使用Cat 3連線(xiàn)在家庭中分布。娛樂(lè)介質(zhì)或其他圖形數(shù)據(jù)可以通過(guò)衛(wèi)星或 纜線(xiàn)進(jìn)入家庭,并且通常使用同軸線(xiàn)在在家庭中分布。IEEE 1394和DVI也是 用于介質(zhì)設(shè)備集群的數(shù)字互連。所有這些網(wǎng)絡(luò)環(huán)境和可以作為協(xié)議標(biāo)準(zhǔn)出現(xiàn)的 其他網(wǎng)絡(luò)環(huán)境可以被互相連接以形成一個(gè)像企業(yè)內(nèi)部互聯(lián)網(wǎng)那樣的網(wǎng)絡(luò),該網(wǎng) 絡(luò)通過(guò)因特網(wǎng)連接到外部世界。簡(jiǎn)而言之,存在用于數(shù)據(jù)存儲(chǔ)和傳輸?shù)亩喾N不 同的源,因此,進(jìn)一步,計(jì)算設(shè)備將會(huì)需要共享數(shù)據(jù)的方式,如與利用依照本 發(fā)明的虛擬化服務(wù)的程序?qū)ο箨P(guān)聯(lián)的、被訪(fǎng)問(wèn)或被利用的數(shù)據(jù)。
因特網(wǎng)通常是指利用在計(jì)算機(jī)連網(wǎng)領(lǐng)域中眾所周知的TCP/IP協(xié)議組的網(wǎng) 絡(luò)和網(wǎng)關(guān)的集合。TCP/IP是"傳輸控制協(xié)議/因特網(wǎng)協(xié)議"的縮寫(xiě)。因特網(wǎng)可 以被描述為由諸計(jì)算機(jī)互連的地理上分布的遠(yuǎn)程計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng),其中諸計(jì)算 機(jī)執(zhí)行允許用戶(hù)在(一個(gè)或多個(gè))網(wǎng)絡(luò)上交互并共享信息的連網(wǎng)協(xié)議。因?yàn)檫@ 樣的廣泛信息共享,像因特網(wǎng)那樣的遠(yuǎn)程網(wǎng)絡(luò)因此已經(jīng)普遍地發(fā)展成開(kāi)放的系 統(tǒng),開(kāi)發(fā)者能本質(zhì)上不受限制地為這一開(kāi)放系統(tǒng)設(shè)計(jì)執(zhí)行專(zhuān)門(mén)操作或服務(wù)的軟 件應(yīng)用程序。
因此,網(wǎng)絡(luò)基礎(chǔ)設(shè)施允許大量的網(wǎng)絡(luò)拓?fù)?,如客?hù)端/服務(wù)器、對(duì)等或混合 體系結(jié)構(gòu)。"客戶(hù)端"是使用與其不相關(guān)的另一類(lèi)或群的服務(wù)的類(lèi)或群的一個(gè) 成員。因此,在計(jì)算中,客戶(hù)端是程序, 一般地說(shuō)也就是請(qǐng)求由另一程序提供 的服務(wù)的一系列指令或任務(wù)??蛻?hù)端程序利用所請(qǐng)求的服務(wù)而無(wú)須"知道"關(guān) 于另一程序或服務(wù)本身的任何工作細(xì)節(jié)。在客機(jī)機(jī)/服務(wù)器體系結(jié)構(gòu)中,尤其是 在網(wǎng)絡(luò)化系統(tǒng)中,客戶(hù)端通常是一臺(tái)訪(fǎng)問(wèn)由另一計(jì)算機(jī)(例如,服務(wù)器)提供 的共享網(wǎng)絡(luò)資源的計(jì)算機(jī)。在圖5A的例子中,計(jì)算機(jī)"6a、 "6b等等可以被 認(rèn)為是客戶(hù)端,計(jì)算機(jī)145a、 145b等等可以被認(rèn)為是服務(wù)器,其中服務(wù)器145a、 145b等等維護(hù)數(shù)據(jù),該數(shù)據(jù)然后在客戶(hù)端計(jì)算機(jī)146a、 146b等等中被復(fù)制, 盡管取決于環(huán)境任何計(jì)算機(jī)都可以被認(rèn)為是客戶(hù)端、服務(wù)器或兩者。這些計(jì)算 設(shè)備中的任何一個(gè)都可以處理數(shù)據(jù)或請(qǐng)求服務(wù)或任務(wù),其中這些服務(wù)或任務(wù)可 以包含本發(fā)明的虛擬化進(jìn)程的實(shí)現(xiàn)。
服務(wù)器通常是可以在像因特網(wǎng)那樣的遠(yuǎn)程或本地網(wǎng)絡(luò)上訪(fǎng)問(wèn)的計(jì)算機(jī)系 統(tǒng)??蛻?hù)端進(jìn)程可以活動(dòng)在第一計(jì)算機(jī)系統(tǒng)中,服務(wù)器程序可以在第二計(jì)算機(jī) 系統(tǒng)中,兩者在通信介質(zhì)上相互通信,因而提供分布式功能性并允許多個(gè)客戶(hù) 端利用服務(wù)器的信息收集能力。被用來(lái)使用本發(fā)明的(一個(gè)或多個(gè))虛擬化體 系結(jié)構(gòu)的任何軟件對(duì)象可以分布在多個(gè)計(jì)算設(shè)備或?qū)ο笾小?br>
23利用由(一個(gè)或多個(gè))協(xié)議層提供的功能性,(一個(gè)或多個(gè))客戶(hù)端和(一 個(gè)或多個(gè))服務(wù)器相互通信。例如,超文件傳輸協(xié)議(HTTP)是結(jié)合萬(wàn)維網(wǎng)
(WWW)即"Web"使用的公共協(xié)議。通常,像因特網(wǎng)協(xié)議(IP)地址那樣 的計(jì)算機(jī)網(wǎng)絡(luò)地址或像統(tǒng)一資源定位器(URL)那樣的其他引用可以被用來(lái)將 服務(wù)器或客戶(hù)端計(jì)算機(jī)與其他計(jì)算機(jī)標(biāo)識(shí)開(kāi)來(lái)。網(wǎng)絡(luò)地址可以被稱(chēng)為URL地 址??梢栽谕ㄐ沤橘|(zhì)上提供通信,例如,(一個(gè)或多個(gè))客戶(hù)端和(一個(gè)或多 個(gè))服務(wù)器可以經(jīng)由(一個(gè)或多個(gè))TCP/IP連接相互耦合,以便進(jìn)行高容量通 信。
圖5A例示其中可以使用本發(fā)明的示例性網(wǎng)絡(luò)化或分布式環(huán)境,具有經(jīng)由 網(wǎng)絡(luò)/總線(xiàn)與諸客戶(hù)端計(jì)算機(jī)進(jìn)行通信的服務(wù)器。更詳細(xì)地,若干服務(wù)器145a、 l45b等等經(jīng)由通信網(wǎng)絡(luò)/總線(xiàn)147被相互連接,其中通信網(wǎng)絡(luò)/總線(xiàn)147可以是 LAN、 WAN、企業(yè)內(nèi)部互聯(lián)網(wǎng)、因特網(wǎng)等等,并具有多個(gè)客戶(hù)端或遠(yuǎn)程計(jì)算設(shè) 備146a、 146b、 146c、 146d、 146e等等,如便攜式計(jì)算機(jī)、手持式計(jì)算機(jī)、瘦 客機(jī)、網(wǎng)絡(luò)化電器或其他設(shè)備,如錄像機(jī)、電視、烤爐、燈、加熱器等等。因 此可以認(rèn)為,本發(fā)明可以適用于結(jié)合希望依照本發(fā)明實(shí)現(xiàn)客機(jī)界面和操作系統(tǒng) 的任何計(jì)算設(shè)備。
在通信網(wǎng)絡(luò)/總線(xiàn)147是因特網(wǎng)的網(wǎng)絡(luò)環(huán)境中,例如,諸服務(wù)器145a、 145b 等等可以是諸客戶(hù)端146a、 146b、 146c、 146d、 146e等等經(jīng)由若干已知協(xié)議中 的任何協(xié)議(如HTTP)與之通信的Web服務(wù)器。服務(wù)器145a、 145b等等也 可以充當(dāng)客戶(hù)端146a、 146b、 146c、 146d、 146e等等,這是分布式計(jì)算環(huán)境特 性。
如果合適,通信可以是有線(xiàn)或無(wú)線(xiàn)的??蛻?hù)端設(shè)備146a、 146b、 146c、 146d、 l46e等等可以或不可以經(jīng)由通信網(wǎng)絡(luò)/總線(xiàn)147通信,并可以擁有與其關(guān)聯(lián)的 獨(dú)立通信。例如,對(duì)電視或錄像機(jī)來(lái)說(shuō),可以有或沒(méi)有對(duì)于其控制的網(wǎng)絡(luò)化方 面。每一客戶(hù)端計(jì)算機(jī)146a、 146b、 146c、 146d、 146e等等和服務(wù)器計(jì)算機(jī) 145a、 145b等等可以裝備各種應(yīng)用程序模塊或?qū)ο?48,并具有到各種類(lèi)型的 存儲(chǔ)元件或?qū)ο筮B接或訪(fǎng)問(wèn),文件或數(shù)據(jù)流可以被存儲(chǔ)到這些存儲(chǔ)元件或?qū)?象,或者文件或數(shù)據(jù)流的(一個(gè)或多個(gè))部分可以被下載、傳輸或遷移到這些 存儲(chǔ)元件或?qū)ο?。諸計(jì)算機(jī)145a、 145b、 146a、 146b等等中的任何一個(gè)可以負(fù) 責(zé)維護(hù)并更新數(shù)據(jù)庫(kù)M9或其他存儲(chǔ)元件,如用于存儲(chǔ)根據(jù)本發(fā)明處理的數(shù)據(jù) 的數(shù)據(jù)庫(kù)或存儲(chǔ)器149。因此,本發(fā)明能被用于計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中,其中該計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境擁有可以訪(fǎng)問(wèn)網(wǎng)絡(luò)/總線(xiàn)147并與之互動(dòng)的客戶(hù)端計(jì)算機(jī)146a、 146b等等、可用于客戶(hù)端計(jì)算機(jī)146a、 146b等等和其他類(lèi)似設(shè)備交互的服務(wù) 器計(jì)算機(jī)145a、 145b等等、數(shù)據(jù)庫(kù)149。 示例性計(jì)算設(shè)備
圖5B和下列討論旨在提供可以與之結(jié)合實(shí)現(xiàn)本發(fā)明的主機(jī)計(jì)算環(huán)境的簡(jiǎn) 要一般描述合適。然而應(yīng)該理解,所有類(lèi)型的手持式、便攜式和其他計(jì)算設(shè)備、 便攜式和固定游戲設(shè)備和計(jì)算對(duì)象被考慮結(jié)合本本發(fā)明使用。盡管在下面描述 通用計(jì)算機(jī),但這不過(guò)只是一個(gè)例子,而且本發(fā)明可以與具有網(wǎng)絡(luò)/總線(xiàn)互操作 性和交互的瘦客戶(hù)端一起實(shí)現(xiàn)。因此,可以在其中包括很少或最少的客戶(hù)端資 源的、網(wǎng)絡(luò)化的、被寄宿服務(wù)的環(huán)境中實(shí)現(xiàn)本發(fā)明,例如,其中客戶(hù)端設(shè)備只 充當(dāng)網(wǎng)絡(luò)/總線(xiàn)的接口 (如置于電器中的一個(gè)對(duì)象)的網(wǎng)絡(luò)化環(huán)境。實(shí)質(zhì)上,數(shù) 據(jù)可以被存儲(chǔ)的任何地方或數(shù)據(jù)可以被檢索或者傳輸?shù)搅硪挥?jì)算機(jī)的地方,是 所希望的或合適的、用于依照本發(fā)明的虛擬化技術(shù)的操作的環(huán)境。
盡管未作要求,但是本發(fā)明可以整體或部分地經(jīng)由一個(gè)操作系統(tǒng)被實(shí)現(xiàn), 以供設(shè)備或?qū)ο蟮闹T服務(wù)的開(kāi)發(fā)者使用,和/或被包含在結(jié)合本發(fā)明的虛擬化 OS —起操作的應(yīng)用軟件里面。軟件可以在像程序模塊那樣的計(jì)算機(jī)可運(yùn)行指 令一般上下文中描述,由一個(gè)或多個(gè)計(jì)算機(jī)如客戶(hù)端工作站、服務(wù)器或其他設(shè) 備運(yùn)行。 一般地,程序模塊包括完成特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類(lèi)型的 例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能性可以根據(jù) 各種實(shí)施例中的需要進(jìn)行組合或分布。而且,本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到, 本發(fā)明可以與其他計(jì)算機(jī)系統(tǒng)配置和協(xié)議一起實(shí)踐??梢赃m于實(shí)現(xiàn)本發(fā)明的眾 所周知的計(jì)算系統(tǒng)、環(huán)境、和/或配置包含但不限于個(gè)人計(jì)算機(jī)(PC)、自 動(dòng)柜員機(jī)、服務(wù)器計(jì)算機(jī)、手持式或膝上型設(shè)備、多處理器系統(tǒng)、基于微處理 器的系統(tǒng)、可編程的消費(fèi)性電子產(chǎn)品、網(wǎng)絡(luò)PC、電器、燈、環(huán)境控制元件、微 型計(jì)算機(jī)、大型計(jì)算機(jī)等等。如上所述,本發(fā)明還可以在分布式計(jì)算環(huán)境中實(shí) 踐,在分布式計(jì)算環(huán)境中任務(wù)由通過(guò)通信網(wǎng)絡(luò)/總線(xiàn)或是其他數(shù)據(jù)傳輸介質(zhì)連接 的遠(yuǎn)程處理設(shè)備執(zhí)行。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)器設(shè) 備的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中,并且客機(jī)節(jié)點(diǎn)可以反過(guò)來(lái)充當(dāng)服務(wù)器節(jié) 點(diǎn)。
圖5B例示可以在其中實(shí)現(xiàn)本發(fā)明的合適的主機(jī)計(jì)算系統(tǒng)環(huán)境150的一個(gè) 例子,盡管上面已經(jīng)清楚地描述,該主機(jī)計(jì)算系統(tǒng)環(huán)境150僅僅是合適的計(jì)算
25機(jī)環(huán)境的一個(gè)例子,并且不旨在暗示對(duì)本發(fā)明的使用或功能性范圍的任何限 制。計(jì)算環(huán)境150也不應(yīng)該被解釋為具有涉及在示例性操作環(huán)境150中所例示 的任何組件或它們的組合的任何依賴(lài)或要求。
參見(jiàn)圖5B,適于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)包含一個(gè)以計(jì)算機(jī)160形式的 通用計(jì)算設(shè)備。計(jì)算機(jī)160的組件包括但不限于處理單元162、系統(tǒng)存儲(chǔ)器 164、以及將包括系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合到處理單元162的系統(tǒng) 總線(xiàn)166。系統(tǒng)總線(xiàn)166可以是若干總線(xiàn)體系結(jié)構(gòu)類(lèi)型中的任一種,該總線(xiàn)體 系結(jié)構(gòu)包括使用多種總線(xiàn)體系結(jié)構(gòu)的任一種的存儲(chǔ)器總線(xiàn)或存儲(chǔ)器控制器、外 圍總線(xiàn)以及局部總線(xiàn)。作為例子而非限制,此類(lèi)體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié) 構(gòu)(ISA)總線(xiàn)、微通道體系結(jié)構(gòu)(MCA)總線(xiàn)、增強(qiáng)型ISA (EISA)總線(xiàn)、 視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線(xiàn)、外圍組件互連(PCI)總線(xiàn)(也稱(chēng)為 Mezzanine總線(xiàn))以及PCI Express (PCIe)。
計(jì)算機(jī)160通常包含多種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是能由計(jì) 算機(jī)160訪(fǎng)問(wèn)的任何可用介質(zhì),而且包含易失性和非易失性介質(zhì)、可移動(dòng)/不可 移動(dòng)介質(zhì)。作為例子而非限制,計(jì)算機(jī)可讀介質(zhì)可以包含計(jì)算機(jī)存儲(chǔ)介質(zhì)和通 信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)體系結(jié)構(gòu)、程 序模塊或其他數(shù)據(jù)的信息的存儲(chǔ)的任何方法或技術(shù)實(shí)現(xiàn)的易失性和非易失性、 可移動(dòng)和不可移動(dòng)的介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于RAM、 ROM、 EEPROM、閃速存儲(chǔ)器或者其他存儲(chǔ)器技術(shù)、CDROM、數(shù)字通用盤(pán)(DVD) 或其他光學(xué)存儲(chǔ)器、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)器或其他磁存儲(chǔ)設(shè)備、或任何其 他能夠用于存儲(chǔ)所需信息并且能夠由計(jì)算機(jī)160訪(fǎng)問(wèn)的介質(zhì)。通信介質(zhì)通常以 諸如載波或者其他傳輸機(jī)制的已調(diào)制數(shù)據(jù)信號(hào)的形式包含計(jì)算機(jī)可讀指令、數(shù) 據(jù)體系結(jié)構(gòu)、程序模塊或其他數(shù)據(jù),并包括任意信息傳遞介質(zhì)。術(shù)語(yǔ)"已調(diào)制 數(shù)據(jù)信號(hào)"是指以在該信號(hào)中編代碼信息的方式來(lái)設(shè)置或改變其一個(gè)或多個(gè)特 性的信號(hào)。作為例子而非限制,通信介質(zhì)包括有線(xiàn)介質(zhì),如有線(xiàn)網(wǎng)絡(luò)或直接有 線(xiàn)連接,以及無(wú)線(xiàn)介質(zhì),如聲音、射頻、紅外和其他無(wú)線(xiàn)介質(zhì)。以上任何一個(gè) 的組合也應(yīng)當(dāng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。
系統(tǒng)存儲(chǔ)器164包括以易失性和/或非易失性存儲(chǔ)器如只讀存儲(chǔ)器(ROM) 168以及隨機(jī)存取存儲(chǔ)器(RAM) 170形式的計(jì)算機(jī)存儲(chǔ)介質(zhì)。基本輸入/輸出 系統(tǒng)172 (BIOS)通常存儲(chǔ)在ROM 168內(nèi),它包括比如在啟動(dòng)時(shí)幫助在計(jì)算 機(jī)160內(nèi)的元件間傳輸信息的基本例程。RAM 170通常包含可由處理單元162即時(shí)訪(fǎng)問(wèn)和/或目前在操作的數(shù)據(jù)和/或程序模塊。作為例子而非限制,圖5B例
示了操作系統(tǒng)174、應(yīng)用程序176、其他程序模塊178以及程序數(shù)據(jù)180。
計(jì)算機(jī)160還包括其他可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介 質(zhì)。僅僅作為例子,圖5B例示有從不可移動(dòng)的非易失磁性介質(zhì)讀取或向其中 寫(xiě)入的硬盤(pán)驅(qū)動(dòng)器182、從可移動(dòng)的非易失磁性磁盤(pán)186讀取或向其中寫(xiě)入的 磁盤(pán)驅(qū)動(dòng)器184、以及向諸如CD-ROM或其他光學(xué)介質(zhì)的可移動(dòng)非易失光盤(pán)190 讀取或向其中寫(xiě)入的光盤(pán)驅(qū)動(dòng)器188。其他能用于示例性操作環(huán)境的可移動(dòng)/不 可移動(dòng)、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于盒式磁帶、閃存卡、 數(shù)字通用盤(pán)、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤(pán)驅(qū)動(dòng)器182通常 通過(guò)諸如接口 192等不可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線(xiàn)166,而磁盤(pán)驅(qū)動(dòng)器 184通常通過(guò)諸如接口 194等可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線(xiàn)166。
以上討論并在圖5B中示出的驅(qū)動(dòng)器及其關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī) 160提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)體系結(jié)構(gòu)、程序模塊和其他數(shù)據(jù)的存儲(chǔ)器。 例如,在圖5B中,硬盤(pán)驅(qū)動(dòng)器182被例示為存儲(chǔ)操作系統(tǒng)196、應(yīng)用程序198、 其他程序模塊200和程序數(shù)據(jù)202。注意,這些組件可以與操作系統(tǒng)174、應(yīng) 用程序176、其他程序模塊178和程序數(shù)據(jù)180相同,也可以與它們不同。這 里對(duì)操作系統(tǒng)196、應(yīng)用程序198、其他程序模塊200和程序數(shù)據(jù)202給予不 同的標(biāo)號(hào)來(lái)說(shuō)明至少它們是不同的拷貝。用戶(hù)可以通過(guò)輸入設(shè)備向計(jì)算機(jī)160
輸入命令和信息,如鍵盤(pán)204和定點(diǎn)設(shè)備206(通常指鼠標(biāo)、跟蹤球或觸摸板)。 其他輸入設(shè)備(未示出)可以包括話(huà)筒、操縱桿、游戲墊、圓盤(pán)式衛(wèi)星天線(xiàn)、 掃描儀等等。這些和其他輸入設(shè)備通常通過(guò)耦合至系統(tǒng)總線(xiàn)的用戶(hù)輸入接口
208連接至處理單元162,但是也可以通過(guò)其他接口和總線(xiàn)體系結(jié)構(gòu)連接,如 并行端口、游戲端口或通用串行總線(xiàn)(USB)。這些是被本發(fā)明體系結(jié)構(gòu)虛擬 化的結(jié)構(gòu)的種類(lèi)。圖形接口210,例如由北橋(Northbridge)實(shí)現(xiàn)的接口之一, 也可以被連接到系統(tǒng)總線(xiàn)166。北橋是與CPU或主處理單元162通信并負(fù)責(zé)諸 如PCI、 PCIe和加速圖形端口 (AGP)通信的各種通信的芯片組。 一個(gè)或多個(gè) 圖形處理單元(GPU) 212可以與圖形界面210通信。在這方面,圖形處理單 元212通常包含像寄存器那樣的芯片級(jí)存儲(chǔ)器,而且圖形處理單元212與視頻 存儲(chǔ)器214通信。但是,圖形處理單元212僅僅是協(xié)處理器的一個(gè)例子,因而 多種協(xié)同處理設(shè)備可以被包含在計(jì)算機(jī)160之中,而且可以包含多種渲染 (shader)程序,如像素和頂點(diǎn)渲染。監(jiān)視器216或其他類(lèi)型的顯示設(shè)備也通過(guò)接口連接至系統(tǒng)總線(xiàn)166,如可以反過(guò)來(lái)與視頻存儲(chǔ)器通信的視頻接口 218。 除監(jiān)視器216之外,計(jì)算機(jī)也可包括其他外圍輸出設(shè)備,如揚(yáng)聲器220和打印 機(jī)222,它們可通過(guò)輸出外圍接口 224連接。
使用到一個(gè)或多個(gè)諸如遠(yuǎn)程計(jì)算機(jī)226的遠(yuǎn)程計(jì)算機(jī)的邏輯連接,計(jì)算機(jī) 160可以工作在網(wǎng)絡(luò)化或分布式環(huán)境內(nèi)。盡管圖5B中僅例示了存儲(chǔ)器存儲(chǔ)設(shè)備 228,遠(yuǎn)程計(jì)算機(jī)226可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè) 備或其他公共網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括與計(jì)算機(jī)160相關(guān)的許多或所有上述元 件。圖5B所述的邏輯連接包括局域網(wǎng)(LAN) 230以及廣域網(wǎng)(WAN) 232, 但也可以包括其他網(wǎng)絡(luò)/總線(xiàn)。這種網(wǎng)絡(luò)環(huán)境常見(jiàn)于家庭、辦公室、企業(yè)范圍的 計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部互聯(lián)網(wǎng)和因特網(wǎng)。
當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境時(shí),計(jì)算機(jī)160通過(guò)網(wǎng)絡(luò)接口或適配器234連到局 域網(wǎng)230。當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境時(shí),計(jì)算機(jī)160通常包括調(diào)制解調(diào)器236或 用于在如因特網(wǎng)的廣域網(wǎng)232上建立通信的其他裝置??梢?xún)?nèi)置或者外置的調(diào) 制解調(diào)器236可經(jīng)由用戶(hù)輸入接口 208或者其他適當(dāng)?shù)臋C(jī)制連接到系統(tǒng)總線(xiàn) 166。在網(wǎng)絡(luò)化環(huán)境中,與個(gè)人計(jì)算機(jī)160相關(guān)的所述程序模塊或其中的一部 分可存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器設(shè)備內(nèi)。作為例子而非限制,圖5B例示遠(yuǎn)程應(yīng)用程序 238駐留在存儲(chǔ)器設(shè)備228上。應(yīng)該明白,所示網(wǎng)絡(luò)連接是示例性的,并且可 以使用在計(jì)算機(jī)之間建立通信鏈路的其他方式。
存在實(shí)現(xiàn)本發(fā)明的多種方式,例如,使應(yīng)用程序和服務(wù)能夠使用本發(fā)明的 (一個(gè)或多個(gè))虛擬化體系結(jié)構(gòu)、系統(tǒng)和方法的適當(dāng)?shù)腁PI、工具箱、驅(qū)動(dòng)器 代碼、操作系統(tǒng)、控制、獨(dú)立的或可下載的軟件對(duì)象等等。本發(fā)明考慮從API (或其他軟件對(duì)象)以及從接受前面提到過(guò)的依照本發(fā)明任何技術(shù)的軟件或硬 件對(duì)象的立場(chǎng)使用本發(fā)明。因此,在此被描述的本發(fā)明的各種實(shí)現(xiàn)可以具有完 全以硬件、部分以硬件和部分以軟件以及以軟件實(shí)現(xiàn)的方面。
如上所述,盡管已經(jīng)結(jié)合不同的計(jì)算設(shè)備和網(wǎng)絡(luò)體系結(jié)構(gòu)描述本發(fā)明的示 例性實(shí)施例,基本概念可以適用于希望仿真客機(jī)軟件的任何計(jì)算設(shè)備或系統(tǒng)。 例如,本發(fā)明的各種算法和硬件實(shí)現(xiàn)可以被用于計(jì)算設(shè)備的操作系統(tǒng),作為在 設(shè)備上的單獨(dú)對(duì)象、作為另一個(gè)對(duì)象的一部分、作為可重用的控制器、作為可 從服務(wù)器下載的對(duì)象、作為設(shè)備或?qū)ο蠛途W(wǎng)絡(luò)之間的"中間人"、作為分布式 對(duì)象、作為硬件、在存儲(chǔ)器中、前述的任意組合等等被提供。本領(lǐng)域中的技術(shù) 人員將會(huì)認(rèn)識(shí)到,存在提供達(dá)成與由本發(fā)明的各種實(shí)施例達(dá)成的功能性相同、類(lèi)似或等效的功能性的目標(biāo)代碼和命名法的無(wú)數(shù)種方式。
如上所述,在此描述的不同技術(shù)可以結(jié)合硬件或軟件實(shí)現(xiàn),或者如果合適, 結(jié)合兩者的組合實(shí)現(xiàn)。因此,本發(fā)明的方法和裝置或其特定方面或部分,可以
采取包含在具體介質(zhì)如軟盤(pán)、CD-ROM、硬盤(pán)或任何其他可用的機(jī)器可讀存儲(chǔ)
介質(zhì)中的程序代碼的形式(即指令),其中當(dāng)機(jī)器(如計(jì)算機(jī))載入并執(zhí)行程 序代碼時(shí),該機(jī)器就變成用于實(shí)踐本發(fā)明的裝置。在在可編程計(jì)算機(jī)上執(zhí)行程 序代碼的情況下,計(jì)算設(shè)備通常包括處理器、處理器可讀存儲(chǔ)介質(zhì)(包括易失 性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備和至少一個(gè)輸出設(shè)備。
可以(例如)通過(guò)使用數(shù)據(jù)處理API、可重用控制等等實(shí)現(xiàn)或利用本發(fā)明的虛
擬化技術(shù)的一個(gè)或多個(gè)程序,適宜用高級(jí)過(guò)程的或面向?qū)ο蟮木幊陶Z(yǔ)言實(shí)現(xiàn), 以與計(jì)算機(jī)系統(tǒng)通信。然而,如果需要的話(huà),(一個(gè)或多個(gè))程序可以用匯編
或機(jī)器語(yǔ)言實(shí)現(xiàn)。無(wú)論如何,該語(yǔ)言可以是編譯或解釋語(yǔ)言,并與硬件實(shí)現(xiàn)結(jié)合。
也可以經(jīng)由具體化為在傳輸介質(zhì)上傳輸?shù)某绦虼a的形式的通信介質(zhì)來(lái) 實(shí)踐本發(fā)明的諸方法和裝置,如在電線(xiàn)或電纜上、通過(guò)光纖或經(jīng)由任意其他傳 輸形式,其中,當(dāng)程序代碼被諸如EPROM、門(mén)陣列、可編程邏輯器件(PLD)、 客戶(hù)端計(jì)算機(jī)等等的機(jī)器接收并載入及執(zhí)行時(shí),該機(jī)器就變成實(shí)踐本發(fā)明的裝 置。當(dāng)在通用處理器上實(shí)現(xiàn)時(shí),程序代碼與處理器結(jié)合,以提供調(diào)用本發(fā)明的 功能性的獨(dú)特裝置。另外,結(jié)合本發(fā)明所使用的任何的存儲(chǔ)技術(shù)可以總是硬件 和軟件的組合。
盡管已經(jīng)結(jié)合各種附圖的優(yōu)先實(shí)施例描述本發(fā)明,應(yīng)該理解,可以使用其 他類(lèi)似實(shí)施例,并可以對(duì)所描述實(shí)施例進(jìn)行修改和增加以執(zhí)行本發(fā)明的同一函
數(shù)而不會(huì)偏離于此。例如,盡管在像對(duì)等網(wǎng)絡(luò)化環(huán)境那樣的網(wǎng)絡(luò)化環(huán)境上下文 中描述本發(fā)明的示例性網(wǎng)絡(luò)環(huán)境,本領(lǐng)域中的技術(shù)人員將會(huì)認(rèn)識(shí)到,本發(fā)明不 限于此,而且本申請(qǐng)書(shū)中所述諸方法可以適用于無(wú)論是有線(xiàn)還是無(wú)線(xiàn)的任何計(jì) 算設(shè)備或環(huán)境,如游戲控制臺(tái)、手持式計(jì)算機(jī)、便攜式計(jì)算機(jī)等等,而且可以 適用于經(jīng)由通信網(wǎng)絡(luò)連接并跨過(guò)網(wǎng)絡(luò)交互的若干此類(lèi)計(jì)算設(shè)備。此外,應(yīng)該強(qiáng) 調(diào),考慮多種計(jì)算機(jī)平臺(tái),包括手持式設(shè)備操作系統(tǒng)和其他專(zhuān)用操作系統(tǒng),尤 其是當(dāng)無(wú)線(xiàn)網(wǎng)絡(luò)化設(shè)備的數(shù)目連續(xù)增長(zhǎng)的時(shí)候。
盡管示例性的實(shí)施例涉及在主機(jī)操作系統(tǒng)上被虛擬化的客機(jī)OS的上下文 中的利用本發(fā)明,但本發(fā)明不限于此,而是也可以被實(shí)現(xiàn)為虛擬化出于其他目
29的與主處理器協(xié)同操作的第二專(zhuān)用處理器單元。而且,本發(fā)明考慮這樣的情況 相同版本OS的多個(gè)實(shí)例運(yùn)行在根據(jù)本發(fā)明的分離的虛擬機(jī)中。可以認(rèn)識(shí)到, 本發(fā)明的虛擬化不依賴(lài)于客機(jī)OS所被用于的操作。也規(guī)定本發(fā)明適用于所有
的計(jì)算機(jī)體系結(jié)構(gòu),而不只是Windows或Xbox體系結(jié)構(gòu)。更進(jìn)一步,本發(fā)明
可以在多個(gè)處理芯片或設(shè)備內(nèi)實(shí)現(xiàn),或跨過(guò)多個(gè)處理芯片或設(shè)備實(shí)現(xiàn),并且存 儲(chǔ)器同樣可以跨過(guò)多個(gè)設(shè)備實(shí)現(xiàn)。因此,本發(fā)明不應(yīng)當(dāng)限于任何單個(gè)實(shí)施例,
而應(yīng)當(dāng)根據(jù)依照所附權(quán)利要求書(shū)的廣度和范圍來(lái)解釋。
權(quán)利要求
1.一種將第一CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼翻譯成第二CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的方法,包括解析所述第一CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的流以便在所述第一CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的所述流中標(biāo)識(shí)與所述第一CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼中一函數(shù)相對(duì)應(yīng)的CPU代碼指令的序列;以及從在與所述函數(shù)相對(duì)應(yīng)的所述流內(nèi)的所述CPU代碼指令的序列中產(chǎn)生所述第二CPU類(lèi)型的所述可執(zhí)行代碼的序列。
2. 如權(quán)利要求l所述的方法,其特征在于,所述第一處理器類(lèi)型是x86, 而所述第二處理器類(lèi)型是PowerPC。
3. 如權(quán)利要求1所述的方法,其特征在于,所述解析步驟包括指令編譯 器創(chuàng)建所述第一 CPU類(lèi)型的指令列表的步驟,其中所述第一 CPU類(lèi)型的指令 列表在所述第一 CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的所述流內(nèi)的函數(shù)起始處 開(kāi)始,并且在達(dá)到函數(shù)指令的末尾且在所述第一 CPU類(lèi)型的指令列表里沒(méi)有未 完成的條件轉(zhuǎn)移時(shí),在所述第一CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的流中的一點(diǎn)處 結(jié)束所述第一 CPU類(lèi)型的指令列表。
4. 如權(quán)利要求3所述的方法,還包括在所述產(chǎn)生步驟之前分析所述指令 列表以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化的步驟。
5. 如權(quán)利要求4所述的方法,還包括分析所述第二CPU類(lèi)型的可執(zhí)行代 碼的所述已產(chǎn)生序列以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化的步驟。
6. 如權(quán)利要求3所述的方法,還包括編譯和存儲(chǔ)所述第二 CPU類(lèi)型的所述可執(zhí)行代碼的所述序列并相關(guān)一存儲(chǔ)器地址的步驟,其中在所述存儲(chǔ)器地址 處,所述已編譯序列和所述第一CPU類(lèi)型的所述函數(shù)的所述起始的存儲(chǔ)器地址一起被存儲(chǔ)。
7. —種把第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼翻譯成第二 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的二進(jìn)制翻譯系統(tǒng),包括解析器,解析所述第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的流以便在所述第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的所述流里標(biāo)識(shí)與所述第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼中的一函數(shù)相對(duì)應(yīng)的CPU代碼指令的序列;以及代碼生成器,從與所述函數(shù)相應(yīng)的所述流內(nèi)的CPU代碼指令的序列中產(chǎn) 生所述第二 CPU類(lèi)型的可執(zhí)行代碼的序列。
8. 如權(quán)利要求7所述的二進(jìn)制翻譯系統(tǒng),其特征在于,所述第一CPU類(lèi) 型是x86,而所述第二處理器類(lèi)型是PowerPC。
9. 如權(quán)利要求7所述的二進(jìn)制翻譯系統(tǒng),其特征在于,所述解析器創(chuàng)建 所述第一 CPU類(lèi)型的指令列表,其中所述第一 CPU類(lèi)型的指令列表在所述第 一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的所述流內(nèi)的函數(shù)起始處開(kāi)始,并且在達(dá)到函 數(shù)指令的末尾且在所述第一CPU類(lèi)型的指令列表里沒(méi)有未完成的條件轉(zhuǎn)移時(shí), 在所述第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的流中的一點(diǎn)處結(jié)束所述第一 CPU 類(lèi)型的指令列表。
10. 如權(quán)利要求9所述的二進(jìn)制翻譯系統(tǒng),其特征在于,還包括一優(yōu)化器, 所述優(yōu)化器在將所述指令列表提供給所述編碼生成器之前分析所述指令列表 以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化。
11. 如權(quán)利要求10所述的二進(jìn)制翻譯系統(tǒng),其特征在于,還包括第二優(yōu) 化器,所述第二優(yōu)化器分析所述第二 CPU類(lèi)型的可執(zhí)行代碼的所述已產(chǎn)生序列 以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化。
12. 如權(quán)利要求9所述的二進(jìn)制翻譯系統(tǒng),其特征在于,還包括編譯器, 所述編譯器編譯并存儲(chǔ)所述第二CPU類(lèi)型的可執(zhí)行代碼的所述序列。
13. 如權(quán)利要求12所述的二進(jìn)制翻譯系統(tǒng),其特征在于,還包括用于存儲(chǔ)所述編譯序列被存儲(chǔ)的存儲(chǔ)器地址以及所述第一 CPU類(lèi)型的所述函數(shù)的所 述起始的存儲(chǔ)器地址的表,所述表和所述存儲(chǔ)器地址彼此相關(guān)。
14. 一個(gè)在被插入主機(jī)計(jì)算機(jī)系統(tǒng)內(nèi)時(shí)創(chuàng)建一個(gè)二進(jìn)制翻譯系統(tǒng)的計(jì)算機(jī)可讀介質(zhì),其中所述二進(jìn)制翻譯系統(tǒng)將第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼翻譯成第二 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼,所述計(jì)算機(jī)可讀介質(zhì)包括解析器軟件,解析所述第一 CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的流以便 在所述第一 CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的所述流內(nèi)標(biāo)識(shí)與在所述第一CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼中的一函數(shù)相對(duì)應(yīng)的CPU代碼指令的序列;以及代碼生成器軟件,從與所述函數(shù)相應(yīng)的所述流內(nèi)的所述CPU代碼指令的 序列中產(chǎn)生所述第二CPU類(lèi)型的所述可執(zhí)行代碼的序列。
15. 如權(quán)利要求14所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第一處理 器類(lèi)型是x86,而所述第二處理器類(lèi)型是PowerPC。
16. 如權(quán)利要求14所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述解析器軟 件創(chuàng)建所述第一 CPU類(lèi)型的指令列表,其中所述第一 CPU類(lèi)型的指令列表在 所述第一CPU類(lèi)型的所述計(jì)算機(jī)可執(zhí)行代碼的所述流內(nèi)的函數(shù)起始處開(kāi)始,并 且在達(dá)到函數(shù)指令的末尾且在所述第一 CPU類(lèi)型的指令列表里沒(méi)有未完成的 條件轉(zhuǎn)移時(shí),在所述第一 CPU類(lèi)型的計(jì)算機(jī)可執(zhí)行代碼的流中的一點(diǎn)處結(jié)束所 述第一CPU類(lèi)型的指令列表。
17. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括一優(yōu)化 器軟件,所述優(yōu)化器軟件在將所述指令列表提供給所述編碼生成器軟件之前分 析所述指令列表以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化。
18. 如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括第二優(yōu) 化器軟件,所述第二優(yōu)化器軟件分析所述第二 CPU類(lèi)型的可執(zhí)行代碼的所述已 產(chǎn)生序列以找出優(yōu)化并實(shí)現(xiàn)所述優(yōu)化。
19. 如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括編譯并 存儲(chǔ)所述第二 CPU類(lèi)型的所述代碼指令的所述序列的編譯器。
20. 如權(quán)利要求19所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括用于存 儲(chǔ)所述編譯序列被存儲(chǔ)的存儲(chǔ)器地址以及所述第二 CPU類(lèi)型的所述函數(shù)的所 述起始的存儲(chǔ)器地址的表,所述表和所述存儲(chǔ)器地址彼此相關(guān)。
全文摘要
一個(gè)JIT二進(jìn)制翻譯器在源代碼的函數(shù)級(jí)而不是在操作碼級(jí)翻譯代碼。本發(fā)明的JIT二進(jìn)制翻譯器從源流而不是從指令抓取一個(gè)完整的x86函數(shù),將整個(gè)函數(shù)翻譯成目標(biāo)處理器的一個(gè)等效函數(shù),并在返回到源流之前一次性運(yùn)行該函數(shù),由此減少上下文切換。同時(shí),因?yàn)镴IT二進(jìn)制翻譯器一次見(jiàn)到完整的源代碼函數(shù)上下文,所以軟件仿真器可以?xún)?yōu)化代碼翻譯。例如,JIT二進(jìn)制翻譯器可以決定將一個(gè)x86指令序列翻譯成一個(gè)高效的PPC等效序列。許多這樣的優(yōu)化產(chǎn)生更緊密的已仿真二進(jìn)制。
文檔編號(hào)G06F9/45GK101517536SQ200680016250
公開(kāi)日2009年8月26日 申請(qǐng)日期2006年4月28日 優(yōu)先權(quán)日2005年5月12日
發(fā)明者V·譚 申請(qǐng)人:微軟公司