專利名稱:用于在64位x86處理器上運行傳統(tǒng)32位x86虛擬機的系統(tǒng)和方法
技術(shù)領域:
本發(fā)明通常涉及虛擬機(也稱為“處理器虛擬化”)和在虛擬機環(huán)境中執(zhí)行的軟件的領域。特別地,本發(fā)明直接涉及在不同于64位主機操作系統(tǒng)的處理器模式中運行傳統(tǒng)32位虛擬機的方法。
背景技術(shù):
計算機包括被設計成執(zhí)行特定的系統(tǒng)指令集的通用中央處理單元(CPU)。具有類似的體系結(jié)構(gòu)或設計規(guī)范的一組處理器被認為是同一處理器家族的成員。當前的處理器家族的示例包括由亞利桑那州菲尼克斯市的Motorola公司生產(chǎn)的Motorola 680X0處理器家族;由加利福尼亞州桑尼維爾市的Intel公司生產(chǎn)的Intel80X86處理器家族;以及由Motorola公司生產(chǎn)的,并在由加利福尼亞州庫珀蒂諾市的Apple計算機公司生產(chǎn)的計算機中使用的PowerPC處理器家族。盡管一組處理器由于其類似的體系結(jié)構(gòu)和設計考慮可處于同一家族中,然而根據(jù)其時鐘速度和其它參數(shù)性能,家族中的處理器也會有很大的不同。
每一微處理器家族執(zhí)行對該處理器家族唯一的指令。處理器或處理器家族可執(zhí)行的一組集體的指令被稱為處理器的指令集。作為一個示例,由Intel 80X86處理器家族使用的指令集與由PowerPC處理器家族使用的指令集不兼容。Inter 80X86指令集基于復雜指令集計算機(CISC)格式。Motorola Power PC指令集基于精簡指令集計算機(RISC)格式。CISC處理器使用大量的指令,其中一些可執(zhí)行相當復雜的功能,但是它一般需要許多時鐘周期來執(zhí)行。RISC處理器使用較少數(shù)量的可用指令,來執(zhí)行以更高的速率執(zhí)行的一組較簡單的功能。
處理器家族在計算機系統(tǒng)之中的唯一性通常導致計算機系統(tǒng)的硬件體系結(jié)構(gòu)的其它元件之間的不兼容性。用來自Intel 80X86處理器家族的處理器制造的計算機系統(tǒng)具有與用來自PowerPC處理器家族的處理器制造的計算機系統(tǒng)的硬件體系結(jié)構(gòu)不同的硬件體系結(jié)構(gòu)。由于處理器指令集以及計算機系統(tǒng)的硬件體系結(jié)構(gòu)的唯一性,應用軟件程序通常被書寫成在運行特定操作系統(tǒng)的特定計算機系統(tǒng)上運行。
計算機制造商希望通過令更多而不是更少的應用程序運行在與計算機制造商的產(chǎn)品線相關(guān)聯(lián)的微處理器家族上來將其市場份額最大化。為擴展可運行在計算機系統(tǒng)上的操作系統(tǒng)和應用程序的數(shù)量,開發(fā)了一種技術(shù)領域,其中,稱為主機的具有一種類型CPU的給定計算機將包括一仿真器程序,它允許主機計算機仿真一種稱為訪客的CPU的不相關(guān)類型指令。由此,主機計算機將執(zhí)行促使一個或多個主機指令響應于給定訪客指令而被調(diào)用的應用程序。由此,主機計算機可運行為其自己的硬件體系結(jié)構(gòu)設計的軟件和為具有不相關(guān)硬件體系結(jié)構(gòu)的計算機書寫的軟件兩者。作為一個更具體的示例,例如,由Apple計算機制造的計算機系統(tǒng)可運行為基于PC的計算機系統(tǒng)書寫的操作系統(tǒng)和程序。也可能使用一仿真器程序以在單個CPU上并發(fā)地操作多個不兼容的操作系統(tǒng)。在這一裝置中,盡管每一操作系統(tǒng)與其它操作系統(tǒng)不兼容,但是仿真器程序可主宿兩個操作系統(tǒng)之一,從而允許不兼容的操作系統(tǒng)在同一計算機系統(tǒng)上并發(fā)地運行。
當在主機計算機系統(tǒng)上仿真訪客計算機系統(tǒng)時,訪客計算機系統(tǒng)被稱為“虛擬機”,因為訪客計算機系統(tǒng)僅作為一種特定硬件體系結(jié)構(gòu)的純軟件表示存在于主機計算機系統(tǒng)中。術(shù)語仿真器、虛擬機和處理器仿真有時可互換地使用,以表示模仿或仿真一個完整的計算機系統(tǒng)的硬件體系結(jié)構(gòu)的能力。作為一個示例,由加利福尼亞州圣馬特奧市的Connectix公司創(chuàng)建的Virtual PC軟件仿真包括Intel 80X86Pentium處理器和各種主板組件和卡的整個計算機。這些組件的操作在運行于主機上的虛擬機中仿真。在諸如具有PowerPC處理器的計算機系統(tǒng)等主機計算機的操作系統(tǒng)軟件和硬件體系結(jié)構(gòu)上執(zhí)行的仿真器程序模仿整個訪客計算機系統(tǒng)的操作。
仿真器程序擔當主機機器的硬件體系結(jié)構(gòu)和由運行在被仿真的環(huán)境中的軟件發(fā)送的指令之間的交換點。該仿真器程序可以是一主機操作系統(tǒng)(HOS),它是直接運行在物理計算機硬件上的操作系統(tǒng)?;蛘?,被仿真的環(huán)境也可以是虛擬機監(jiān)控程序(VMM),它是一軟件層,其直接運行在硬件之上,并通過展示與VMM正在虛擬化(允許VMM不被其上運行的操作系統(tǒng)層注意)的硬件相同的接口來虛擬化該機器的所有資源。主機操作系統(tǒng)和VMM可在同一物理硬件上并排運行。
英特爾(Intel)公司(圣克拉拉(Santa Clara),加利福尼亞(CA))的x86體系結(jié)構(gòu)的發(fā)展演變始于16位處理器(x86-16),然后擴展到32位處理器(x86-32),而且目前正擴展到64位處理器(x86-64)。64位x86體系結(jié)構(gòu),它通常稱為x86-64體系結(jié)構(gòu),正由加利福尼亞(CA)桑尼維爾(Sunnyvale)的先進微設備(Advanced MicroDevices)(AMD)公司以及英特爾開發(fā)。例如,AMD64位產(chǎn)品在商業(yè)上稱為AMD64。
但是,這里討論的64位x86體系結(jié)構(gòu)和另一個由Hewlett-Packard(帕洛阿爾托(PaloAlto),加利福尼亞(CA))和英特爾聯(lián)合開發(fā)的稱為IA64的64位產(chǎn)品間已有了不同。IA64具有在安騰(Itanium)處理器中實現(xiàn)的64位指令集體系結(jié)構(gòu)。通常,IA64體系結(jié)構(gòu)沒有向后兼容性,因而由于不同的指令集,x86體系結(jié)構(gòu)的軟件將不運行在IA64體系結(jié)構(gòu)上。因此,這里討論的64位體系結(jié)構(gòu)專門指x86-64體系結(jié)構(gòu)而不是IA64體系結(jié)構(gòu)。
提供允許為32位傳統(tǒng)OS編寫的虛擬機運行于64位OS上的向后兼容性對軟件廠商很重要,因為向后兼容性使得新32位產(chǎn)品更短時間推向市場并擴展了傳統(tǒng)32位應用程序的使用。x86-64體系結(jié)構(gòu)支持若干不同的操作模式,包括傳統(tǒng)32位x86體系結(jié)構(gòu)的操作模式,它如下概述。
(注如這里所使用的,術(shù)語“模式(mode)”、“子模式(sub-mode)”和“超級模式(super-mode)”用于更好地分辨不同結(jié)構(gòu)的不同模式層;但是,正如本領域那些熟練技術(shù)人員所知道和易于理解的,所有這些變化通常都簡稱為“模式”,而忽略相關(guān)結(jié)構(gòu)。)通常,實模式是同時只允許一個程序的執(zhí)行的操作模式。在實模式中,程序只訪問1024K的內(nèi)存并使用16位數(shù)據(jù)路徑。保護模式提供對虛擬內(nèi)存和多任務(同時運行多于一個程序)的支持。保護模式程序可訪問超過1024K的地址并使用32位數(shù)據(jù)路徑。實模式是保護模式的先驅(qū),其中每個程序需要所有內(nèi)存運行并不允許在同一時間另一應用程序的執(zhí)行。保護模式還包括環(huán)-0子模式、環(huán)-1子模式、環(huán)-2子模式、環(huán)-3子模式和V86子模式(虛擬8086)。(通常,當前應用程序不使用環(huán)-1和環(huán)-2子模式。)環(huán)-0子模式指Intel 80286保護模式結(jié)構(gòu)。環(huán)-0子模式是最高優(yōu)先級,可訪問所有系統(tǒng)資源。環(huán)-0子模式是最優(yōu)先代碼,可由OS及其驅(qū)動程序使用,它們具有高信任級。環(huán)-3子模式也稱為Intel 8028保護模式結(jié)構(gòu)。環(huán)-3子模式是最低優(yōu)先級,用于具有低信任級并由所有用戶應用程序使用的代碼。V86子模式指Intel 80386保護模式體系結(jié)構(gòu),是其中CPU仿真8086實模式尋址的子模式,但維護對頁面調(diào)度和某些訪問限制的支持。
相反,x86-64體系結(jié)構(gòu)支持兩種主要的超級模式,即傳統(tǒng)超級模式和長超級模式,如下概述。
x86-64體系結(jié)構(gòu)傳統(tǒng)超級模式包括傳統(tǒng)32位x86體系結(jié)構(gòu)的所有模式和子模式,即,實模式、保護模式等。此外,x86-84體系結(jié)構(gòu)長超級模式包括原長模式和兼容模式。原長模式允許運行64位環(huán)-0代碼。兼容模式允許32位環(huán)-3應用程序運行在運行64位原長模式的OS頂層,即混合環(huán)境。因此,32位應用程序可運行在兼容模式而64位應用程序同時運行在原長模式中。
但是,問題存在于x86-64體系結(jié)構(gòu)的兼容模式只支持環(huán)-3子模式。兼容模式不支持V86子模式或環(huán)-0子模式,而對于32位虛擬機(VM),需要至少這兩者之一(如果不是都需要的話)來完全無縫地仿真/虛擬化32位硬件環(huán)境。因此,所需要的是用于依賴于傳統(tǒng)32位模式,即實模式和保護模式(V86子模式、環(huán)-0子模式和環(huán)-3子模式)的虛擬機在64位處理器上并行運行其它應用程序但仍可執(zhí)行環(huán)-0代碼以及訪問V86子模式的特性的方法。
一個解決方案是使運行于x86-64體系結(jié)構(gòu)的虛擬機環(huán)境能夠自由地在長超級模式和傳統(tǒng)超級模式之間前后轉(zhuǎn)換,以便例如在64位處理器上運行32位OS的訪客和運行64位OS的主機之間前后轉(zhuǎn)換。但是,AMD64機器的實現(xiàn),例如,未預先考慮長超級模式與傳統(tǒng)超級模式之間前后轉(zhuǎn)換;相反,AMD64機器的實現(xiàn)假設機器始于傳統(tǒng)超級模式,當OS加載時進行到長超級模式的單向轉(zhuǎn)換,并再不返回到傳統(tǒng)超級模式。所需要的是在x86-64體系結(jié)構(gòu)中的長超級模式和傳統(tǒng)超級模式之間前后切換的方法。
發(fā)明概述本發(fā)明提供了一個系統(tǒng)和方法,用于在x86-64體系結(jié)構(gòu)中原長模式和傳統(tǒng)保護模式之間的實時切換,即“處理器模式上下文切換”。為此目的,本發(fā)明的各種實施例針對這樣的系統(tǒng)和方法,用于通過在x86-64體系結(jié)構(gòu)中長超級模式和傳統(tǒng)超級模式之間前后轉(zhuǎn)換的機制在64位x86處理器上運行依賴于傳統(tǒng)32位模式,即實模式和保護模式(V86子模式、環(huán)-0子模式和環(huán)-3子模式)的x86虛擬機。
本發(fā)明的某些實施例針對用于在x86-64體系結(jié)構(gòu)中長超級模式和傳統(tǒng)超級模式之間轉(zhuǎn)換的虛擬化計算系統(tǒng)。在這種情況下,虛擬機可在x86-64計算機硬件(即64位)上并行運行其它應用程序。執(zhí)行臨時處理器模式上下文切換的方法——“臨時”意思是期望,例如,在計算機系統(tǒng)運行從初始化時間到關(guān)機時間期間,在長超級模式中執(zhí)行的系統(tǒng)將轉(zhuǎn)換到傳統(tǒng)超級模式,然后最終轉(zhuǎn)換回長超級模式(或某個其它模式),從而至少完成兩次模式轉(zhuǎn)換,每次都利用所述方法——包括下列步驟(a)建立一“虛擬=實”頁(“切換頁”),(b)將執(zhí)行處理器模式上下文切換的轉(zhuǎn)換代碼放到該頁上,(c)跳至該頁,(d)禁用x86-64計算機硬件的存儲器管理單元(MMU),(e)修改模式控制寄存器以設置長超級模式位或傳統(tǒng)超級模式位,(f)加載新頁表,以及(g)重新激活x86-64計算機硬件的MMU。對于本發(fā)明的若干實施例,這些步驟的一或多個由VMM執(zhí)行,而對某些實施例所有七個步驟都由VMM執(zhí)行。
前述
發(fā)明內(nèi)容
以及以下較佳實施例的詳細描述,在結(jié)合附圖閱讀時可更好地理解。為了說明本發(fā)明的目的,附圖中示出了本發(fā)明的示例性構(gòu)造;但是本發(fā)明不限于所公開的特定方法和設備。附圖中圖1是一方框圖,表示本發(fā)明的各方面可具體表現(xiàn)于其中的計算機系統(tǒng);圖2示出用于計算機系統(tǒng)中仿真操作環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯層次;圖3A示出虛擬化計算系統(tǒng);圖3B示出一虛擬化計算系統(tǒng)的替換實施例,包括與主機操作系統(tǒng)并行運行的虛擬機監(jiān)控程序;圖4示出虛擬化計算系統(tǒng)的另一替換實施例,包括與x86-64主機操作系統(tǒng)并行運行的虛擬機監(jiān)控程序;以及圖5示出一用于在x86-64位處理器上運行傳統(tǒng)32位虛擬機的執(zhí)行臨時處理器模式上下文切換操作的方法的流程圖。
詳細說明本發(fā)明的主題是用細節(jié)來描述的,以滿足法定要求。然而,該描述本身并不制造限制本專利的范圍。相反,發(fā)明人構(gòu)想所要求保護的本發(fā)明也可結(jié)合其它現(xiàn)有或未來技術(shù)用其它方法來實現(xiàn),以包括不同的步驟或類似于本文檔中所揭示的那些步驟的組合。此外,盡管此處使用了術(shù)語“步驟”意味著所采用方法的不同元素,然而該術(shù)語不應當被揭示為暗示此處所揭示的各個步驟之中或之間的任何特定順序,除非當明確地描述了個別步驟的順序。
計算機環(huán)境本發(fā)明的主題是用細節(jié)來描述的,以滿足法定要求。然而,該描述本身并不制造限制本專利的范圍。相反,發(fā)明人構(gòu)想所要求保護的本發(fā)明也可結(jié)合其它現(xiàn)有或未來技術(shù)用其它方法來實現(xiàn),以包括不同的步驟或類似于本文檔中所揭示的那些步驟的組合。此外,盡管此處使用了術(shù)語“步驟”意味著所采用方法的不同元素,然而該術(shù)語不應當被揭示為暗示此處所揭示的各個步驟之中或之間的任何特定順序,除非當明確地描述了個別步驟的順序。
虛擬機從概念上的觀點來看,計算機系統(tǒng)一般包括運行在硬件的功能層上的一個或多個軟件層。這一分層是為了抽象的原因而完成的。通過為給定軟件層定義接口,該層可由其上的其它層來不同地實現(xiàn)。在設計良好的計算機系統(tǒng)中,每一層僅知道(并且僅依賴于)緊靠其之下的那一層。這允許層或“?!?多個鄰接的層)被替換,而不會對所述層或棧上的層產(chǎn)生消極的影響。例如,軟件應用程序(較高層)通常依賴于操作系統(tǒng)的較低層(較低層)來將文件寫入某一形式的永久存儲中,并且這些應用程序不需要理解將數(shù)據(jù)寫入軟盤、硬盤驅(qū)動器或網(wǎng)絡文件夾之間的區(qū)別。如果較低層用用于寫文件的新操作系統(tǒng)來替換,則較高層軟件應用程序的操作保持不受影響。
分層軟件的靈活性允許虛擬機(VM)呈現(xiàn)一虛擬硬件層,它實際上是另一軟件層。以此方式,VM可為其上的軟件層創(chuàng)建所述軟件層正運行在其自己的專用計算機系統(tǒng)上的假象,并且由此,VM可允許多個“訪客系統(tǒng)”并發(fā)地運行在單個“主機系統(tǒng)”上。
圖2所示是用于計算機系統(tǒng)中仿真的操作環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯分層的圖示。仿真程序94運行在主機操作系統(tǒng)和/或硬件體系結(jié)構(gòu)92上。仿真程序94仿真訪客硬件體系結(jié)構(gòu)96和訪客操作系統(tǒng)98。軟件應用程序100進而運行在訪客操作系統(tǒng)98上。在圖2的被仿真操作環(huán)境中,由于仿真程序94的操作,即使軟件應用程序100被設計成運行在一般與主機操作系統(tǒng)和硬件體系結(jié)構(gòu)92不兼容的操作系統(tǒng)上,軟件應用程序100也可運行在計算機系統(tǒng)90上。
圖3A示出了一個虛擬化的計算系統(tǒng),它包括直接運行在物理計算機硬件102上的主機操作系統(tǒng)軟件層104,并且主機操作系統(tǒng)(主機OS)通過展示與主機OS正在虛擬化(令主機OS能夠不被其上運行的操作系統(tǒng)層注意到)的硬件相同的接口,來虛擬化機器的所有資源。
或者,虛擬機監(jiān)控程序,或VMM軟件層104′可以代替主機操作系統(tǒng)104″或與其并排地運行,后一選項在圖3B中示出。為了簡明起見,后文所有的討論(尤其是關(guān)于主機操作系統(tǒng)104的討論)應當針對圖3A所示的實施例;然而,這些討論的每一方面應當同等地應用于圖3B的實施,其中圖3B的VMM 104′本質(zhì)上在功能層替換了下文描述的圖3A的主機操作系統(tǒng)104的角色。
再次參考圖3A,在主機OS 104(或VMM 104′)上的是兩個虛擬機(VM)實現(xiàn)-VM A 108,它可以是,例如虛擬化的Intel 386處理器;以及VM B 110,它可以是,例如Motorola 680X0處理器家族之一的虛擬化版本。在每一VM A 108和110之上的分別是訪客操作系統(tǒng)(訪客OS)A 112和B 114。在訪客OS A 112上運行兩個應用程序-應用程序A1 116和應用程序A2 118,在訪客OS B 114上的是應用程序B1 120。
在x86-64處理器虛擬機上運行虛擬機圖4例示虛擬化計算系統(tǒng)的另一個替換實施例,該虛擬化計算系統(tǒng)包括一個與x86-64主機操作系統(tǒng)并行運行的虛擬機監(jiān)控程序。圖4的虛擬化計算系統(tǒng)在所有方面與圖3B的系統(tǒng)相同,除了它包括x86-64主機OS 122,它基于x86-64的OS,運行在包括基于x86的64位處理器(未示出)的x86-64計算機硬件124之上。圖4的虛擬化計算系統(tǒng)的VMM 104′、VM A 108、VM B 110、訪客OS A 112和訪客OS B 114表示與x86-64主機OS 122(用于在虛擬機環(huán)境中在x86-64計算機硬件124上執(zhí)行傳統(tǒng)OS和應用)并行運行的32位x86虛擬機。
使用VMM 104′,本發(fā)明在x86-64體系結(jié)構(gòu)中的長超級模式和傳統(tǒng)超級模式之間提供來回切換的方法。在這么做時,VM A 108,例如,依賴于傳統(tǒng)32位模式即實模式和保護模式(V86子模式、環(huán)-0子模式和環(huán)-3子模式),能夠與x86-64計算機硬件124的64位處理器的其它應用并行運行。
通常,“上下文切換(context switch)”描述為VMM對它需要在主機OS中啟用服務的識別。因此,VMM臨時放棄對主機OS的控制,主機OS執(zhí)行它的任務,隨后主機OS放棄控制回到VMM?,F(xiàn)今的32位VM中的上下文切換僅包括交換出狀態(tài)。然而,為了按照本發(fā)明在x86的64位處理器上運行傳統(tǒng)32位VM,本發(fā)明的系統(tǒng)和方法包括切換上下文切換操作內(nèi)的處理器模式--即,在長超級模式的原長模式中運行的主機OS切換到傳統(tǒng)超級模式的保護模式(不是切換到長超級模式的兼容模式)并且運行訪客OS。這個“處理器模式上下文切換”操作是由VMM 104′和x86-64主機OS 122完成的,如參考圖5描述的。
圖5例示方法130的流程圖,它實時執(zhí)行臨時處理器模式上下文切換操作用于在x86的64位處理器上運行傳統(tǒng)32位虛擬機。在長超級模式(64位模式)或傳統(tǒng)超級模式(32位模式)中操作的x86-64系統(tǒng)中,方法130提供一種方法在兩個超級模式之間轉(zhuǎn)換以訪問在長超級模式中不單獨存在的功能。
通常,方法130的步驟由VMM 104′執(zhí)行,同時VMM 104′正在32位模式中運行而x86-64主機OS 122在64位模式中運行。(注意特定步驟是由特定的x86-64處理器規(guī)定的,但下面提供一般的步驟)。
在步驟132,VMM 104′建立一個“虛擬=實”頁(即,用于頁的虛擬尋址與在存儲器中實存儲器地址相同的頁),隨后將用于執(zhí)行處理器模式上下文切換的轉(zhuǎn)換代碼拷貝到這個頁,并且隨后代碼執(zhí)行“跳”到這個頁以執(zhí)行上下文切換。在步驟134,使用控制寄存器0(CR0),VMM 104′禁用x86-64計算機硬件124的64位處理器的MMU。MMU是負責處理由主處理器請求存儲器訪問的硬件設備。這一般包括將虛擬地址轉(zhuǎn)換成物理地址、高速緩存控制、總線判優(yōu)、存儲器保護和各種異常的產(chǎn)生。禁用MMU是必需的,因為代碼正運行在由MMU定義的地址空間中;因而,如果關(guān)閉MMU,在下一個指令上發(fā)生什么是不肯定的,因為地址轉(zhuǎn)換已經(jīng)突然改變。因此,在嘗試執(zhí)行下一個指令時存在危險,即在錯誤的指令流上操作,除非它保證代碼正在邏輯地址與物理地址相同的頁上運行。因此,這要求V=R映射(虛擬=實映射),如在步驟132設置的。
在步驟136,VMM 104′修改模式控制寄存器(這可以與處理器體系結(jié)構(gòu)不同),它包含傳統(tǒng)超級模式位和長超級模式位。在方法130提供從長超級模式(64位模式)到傳統(tǒng)超級模式(32位模式)的轉(zhuǎn)換的情況下,模式控制寄存器的長超級模式位被禁止而傳統(tǒng)超級模式位被設置,從而執(zhí)行從主機上下文到VM上下文的轉(zhuǎn)換。在方法130提供從傳統(tǒng)超級模式(32位模式)到長超級模式(64位模式)的轉(zhuǎn)換的情況下,模式控制寄存器的傳統(tǒng)超級模式位被禁止而長超級模式位被設置,從而執(zhí)行從VM上下文到主機上下文的轉(zhuǎn)換。
在步驟138,VMM 104′載入新模式的一個新頁表,它是在虛擬存儲器系統(tǒng)內(nèi)的數(shù)據(jù)結(jié)構(gòu),通過它在虛擬地址與物理地址之間映射是簡單的。(注意載入新頁表以創(chuàng)建“虛擬=實”頁(其中用于所述頁的虛擬地址是用于所述頁的實存儲器地址)與要將代碼傳送到的VMM的虛擬地址之間的映射。新頁表也反映新模式的格式--用于兩個模式的頁表格式是不同的,并且因而是不兼容的。)在步驟140,VMM 104′重新激活x86-64計算機硬件124的64位處理器的MMU并且該方法結(jié)束。
如這里使用的,術(shù)語“臨時(temporary)”僅意味著有時在計算機系統(tǒng)的執(zhí)行期間發(fā)生至少兩個模式轉(zhuǎn)換--例如,其中在長超級模式中執(zhí)行的系統(tǒng)轉(zhuǎn)換到傳統(tǒng)超級模式,并且然后,在稍后某個時候,轉(zhuǎn)換回長超級模式(或者完全轉(zhuǎn)換到另一個模式)以完成至少一個模式轉(zhuǎn)換,其每個支路使用所述的方法。而且,術(shù)語“臨時”不意味著任何時間性質(zhì)(關(guān)于多少時間發(fā)生),也不意味著啟始模式是結(jié)束模式,但再次,只是在執(zhí)行期間的至少兩個模式轉(zhuǎn)換。在這點上,關(guān)于一個特定模式的術(shù)語“臨時模式(temporary mode)”指在既不是在系統(tǒng)啟動時的初始模式也不是在系統(tǒng)關(guān)閉時的最后模式的操作期間的任何模式。
結(jié)論此處所描述的各種系統(tǒng)、方法和技術(shù)可以用硬件或軟件,或在適當時用兩者的組合來實現(xiàn)。由此,本發(fā)明的方法和裝置,或其某些方面,可以采用包含在有形介質(zhì),如軟盤、CD-ROM、硬盤或任何其它機器可讀存儲介質(zhì)中的程序代碼(即,指令)的形式,其中,當程序代碼被加載到諸如計算機等機器上并由其執(zhí)行時,該機器變?yōu)橛糜趯嵤┍景l(fā)明的裝置。在可編程計算機上的程序代碼執(zhí)行的情況下,計算機一般包括處理器、處理器可讀的存儲介質(zhì)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備以及至少一個輸出設備。一個或多個程序較佳地以高級過程語言或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以與計算機系統(tǒng)通信。然而,如有需要,程序可以用匯編語言或機器語言來實現(xiàn)。在任何情況下,語言可以是已編譯或已解釋的語言,并與硬件實現(xiàn)相組合。
本發(fā)明的方法和裝置也可以用程序代碼的形式來實施,該程序代碼通過某一傳輸介質(zhì)來發(fā)送,如通過電線或電纜、通過光纖或通過任一其它形式的傳輸,其中,當程序代碼由諸如EPROM、門陣列、可編程邏輯器件(PLD)、客戶機計算機、錄像機等機器接收被裝載到其中由其執(zhí)行時,該機器變?yōu)橛糜趯嵤┍景l(fā)明的裝置。當在通用處理器上實現(xiàn)時,程序代碼與處理器相結(jié)合,以提供用于調(diào)用本發(fā)明的功能的唯一裝置。
盡管結(jié)合各個附圖的較佳實施例描述了本發(fā)明,然而可以理解,在不脫離本發(fā)明的情況下,可以使用其它類似的實施例,或?qū)λ枋龅膶嵤├鞒鲂薷暮吞砑樱詧?zhí)行本發(fā)明的相同功能。例如,盡管本發(fā)明的示例性實施例是在仿真?zhèn)€人計算機的功能的數(shù)字設備的環(huán)境中描述的,然而本領域的技術(shù)人員可以認識到,本發(fā)明不限于這類數(shù)字設備,如本申請中所描述的,本發(fā)明可應用于任何數(shù)量的現(xiàn)有或新興計算設備或環(huán)境,如游戲控制臺、手持式計算機、便攜式計算機等等,無論它們是有線還是無線的,并且本發(fā)明可應用于通過通信網(wǎng)絡連接并在網(wǎng)絡上交互的任何數(shù)量的這類計算設備。此外,應當強調(diào),此處構(gòu)想了各種計算機平臺,包括手持式設備操作系統(tǒng)和其它應用專用硬件/軟件接口系統(tǒng),尤其是當無線聯(lián)網(wǎng)的設備的數(shù)量持續(xù)增長時。因此,本發(fā)明不應當限于任何單個實施例,而是相反,應當依照所附權(quán)利要求書的寬度和范圍來解釋。
最后,此處所描述的揭示的實施例可適用于其它處理器體系結(jié)構(gòu)、基于計算機的系統(tǒng)、或系統(tǒng)虛擬化,并且這些實施例由此處的揭示明確地考慮在內(nèi),因此,本發(fā)明不應限于此處所描述的具體實施例,而是相反,應當被更廣泛地解釋。同樣,為除處理器虛擬化之外的目的而使用合成指令也由此處的揭示考慮在內(nèi),并且在除處理器虛擬化之外的環(huán)境中對合成指令的任何這樣的使用應當被更廣泛地包含在此處的揭示的意義之內(nèi)。
權(quán)利要求
1.一種方法,用于執(zhí)行多模式體系結(jié)構(gòu)計算機系統(tǒng)(“計算機系統(tǒng)”)中第一模式和第二模式之間的臨時處理器模式上下文切換,其特征在于,所述方法包括建立一個“虛擬=實”頁(“切換頁”),其中用于所述頁的虛擬地址也是用于所述頁的實存儲器地址;將執(zhí)行處理器模式上下文切換的一組轉(zhuǎn)換代碼拷貝到所述切換頁;跳至所述切換頁以繼續(xù)執(zhí)行;禁用所述計算機系統(tǒng)的存儲器管理單元(MMU);修改模式控制寄存器來將上下文比特從所述第一模式設置成所述第二模式;為所述第二模式加載一個新頁表;以及重新激活所述計算機系統(tǒng)的MMU。
2.如權(quán)利要求1所述的方法,其特征在于,所述方法的至少一個步驟由虛擬機監(jiān)控程序執(zhí)行。
3.如權(quán)利要求1所述的方法,其特征在于,所述方法由虛擬機監(jiān)控程序執(zhí)行。
4.如權(quán)利要求1所述的方法,其特征在于,所述第一模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第二模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式。
5.如權(quán)利要求1所述的方法,其特征在于,所述第二模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第一模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式。
6.如權(quán)利要求1所述的方法,其特征在于,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位環(huán)-0代碼。
7.如權(quán)利要求1所述的方法,其特征在于,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位v86模式代碼。
8.一種系統(tǒng),用于執(zhí)行多模式體系結(jié)構(gòu)計算機系統(tǒng)(“計算機系統(tǒng)”)中第一模式和第二模式之間的臨時處理器模式上下文切換,其特征在于,所述系統(tǒng)包括用于建立一個“虛擬=實”頁(“切換頁”)的子系統(tǒng),其中用于所述頁的虛擬地址也是用于所述頁的實存儲器地址;用于將執(zhí)行處理器模式上下文切換的一組轉(zhuǎn)換代碼拷貝到所述切換頁的子系統(tǒng);用于跳至所述切換頁以繼續(xù)執(zhí)行的子系統(tǒng);用于禁用所述計算機系統(tǒng)的存儲器管理單元(MMU)的子系統(tǒng);用于修改模式控制寄存器來將上下文比特從所述第一模式設置成所述第二模式的子系統(tǒng);用于為所述第二模式加載一個新頁表的子系統(tǒng);以及用于重新激活所述計算機系統(tǒng)的MMU的子系統(tǒng)。
9.如權(quán)利要求8所述的系統(tǒng),其特征在于,包括一個虛擬機監(jiān)控程序。
10.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述系統(tǒng)是用于虛擬機監(jiān)控程序的子系統(tǒng)。
11.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第一模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第二模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式。
12.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述第二模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第一模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式。
13.如權(quán)利要求8所述的系統(tǒng),其特征在于,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位環(huán)-0代碼。
14.如權(quán)利要求1所述的方法,其特征在于,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位v86模式代碼。
15.一種計算機可讀介質(zhì),包括用于執(zhí)行多模式體系結(jié)構(gòu)計算機系統(tǒng)(“計算機系統(tǒng)”)中第一模式和第二模式之間的臨時處理器模式上下文切換的計算機可讀指令,其特征在于,所述計算機可讀指令包括如下指令建立一個“虛擬=實”頁(“切換頁”),其中用于所述頁的虛擬地址也是用于所述頁的實存儲器地址;將執(zhí)行處理器模式上下文切換的一組轉(zhuǎn)換代碼拷貝到所述切換頁;跳至所述切換頁以繼續(xù)執(zhí)行;禁用所述計算機系統(tǒng)的存儲器管理單元(MMU);修改模式控制寄存器來將上下文比特從所述第一模式設置成所述第二模式;為所述第二模式加載一個新頁表;以及重新激活所述計算機系統(tǒng)的MMU。
16.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述方法的至少一個步驟由虛擬機監(jiān)控程序執(zhí)行。
17.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述方法由虛擬機監(jiān)控程序執(zhí)行。
18.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述第一模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第二模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式的指令。
19.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述第二模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第一模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式的指令。
20.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位環(huán)-0代碼。
21.如權(quán)利要求15所述的計算機可讀指令,其特征在于,還包括指令,其中,所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位v86模式代碼。
22.一種硬件控制設備,用于執(zhí)行多模式體系結(jié)構(gòu)計算機系統(tǒng)(“計算機系統(tǒng)”)中第一模式和第二模式之間的臨時處理器模式上下文切換,其特征在于,所述設備包括用于建立一個“虛擬=實”頁(“切換頁”)的裝置,其中用于所述頁的虛擬地址也是用于所述頁的實存儲器地址;用于將執(zhí)行處理器模式上下文切換的一組轉(zhuǎn)換代碼拷貝到所述切換頁的裝置;用于跳至所述切換頁以繼續(xù)執(zhí)行的裝置;用于禁用所述計算機系統(tǒng)的存儲器管理單元(MMU)的裝置;用于修改模式控制寄存器來將上下文比特從所述第一模式設置成所述第二模式的裝置;用于為所述第二模式加載一個新頁表的裝置;以及重新激活所述計算機系統(tǒng)的MMU的裝置。
23.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括用于使所述方法的至少一個步驟由虛擬機監(jiān)控程序執(zhí)行的裝置。
24.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括用于使所述方法由虛擬機監(jiān)控程序執(zhí)行的裝置。
25.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括裝置,用于使所述第一模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第二模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式。
26.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括裝置,用于使所述第二模式是X86-64體系結(jié)構(gòu)處理器的長模式,而所述第一模式是所述X86-64體系結(jié)構(gòu)處理器的傳統(tǒng)模式的裝置。
27.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括用于使所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位環(huán)-0代碼的裝置。
28.如權(quán)利要求22所述的硬件控制設備,其特征在于,還包括用于使所述方法用來在X86-64體系結(jié)構(gòu)處理器上執(zhí)行傳統(tǒng)模式中的32位v86模式代碼的裝置。
全文摘要
本發(fā)明提供一種用于在X86-64體系結(jié)構(gòu)中的長超級模式和傳統(tǒng)超級模式之間實時轉(zhuǎn)換的虛擬化計算系統(tǒng)和方法。在這么做的時候,虛擬機,它依賴于傳統(tǒng)32位模式,即實模式和保護模式(V86子模式、環(huán)-0子模式和環(huán)-3子模式),能夠與在X86-64計算機硬件(即64位)上的其它應用程序并行運行。執(zhí)行臨時處理器模式上下文切換的方法包括虛擬機監(jiān)控程序設置一個“虛擬=實”頁、將執(zhí)行處理器模式上下文切換的轉(zhuǎn)換代碼放在該頁上、跳到該頁、禁用X86-64計算機硬件的存儲器管理單元(MMU)、修改模式控制寄存器來設置長超級模式位或傳統(tǒng)超級模式位、加載新頁表以及重新激活X86-64計算機硬件的MMU。
文檔編號G06F9/455GK1716203SQ200510076070
公開日2006年1月4日 申請日期2005年5月30日 優(yōu)先權(quán)日2004年6月30日
發(fā)明者R·A·維嘉, E·P·托勞特 申請人:微軟公司