專利名稱:虛擬計算機(jī)結(jié)構(gòu)中控制寄存器訪問虛擬化性能的改進(jìn)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明總的來說涉及虛擬計算機(jī),更確切地說,涉及控制客戶軟件對虛擬計算機(jī)結(jié)構(gòu)中的寄存器的訪問。
背景技術(shù):
傳統(tǒng)的虛擬計算機(jī)監(jiān)視器(VMM)通常在計算機(jī)上運行,并且向其它軟件呈現(xiàn)一個或多個虛擬計算機(jī)的抽象。每個虛擬計算機(jī)可作為一個自包含的平臺,運行它自身的“客戶操作系統(tǒng)”(即,由VMM操縱的操作系統(tǒng))。該客戶操作系統(tǒng)預(yù)期如同它在專用計算機(jī)而非虛擬計算機(jī)上運行一樣進(jìn)行操作。也就是說,該客戶操作系統(tǒng)預(yù)期控制多種計算機(jī)操作且在這些操作中可訪問硬件資源。該硬件資源可包括含處理器的資源(比如,控制寄存器)和存在于存儲器中的資源(比如,描述符表)。
在虛擬計算機(jī)的環(huán)境中,VMM應(yīng)能夠?qū)@些資源進(jìn)行最終的控制,以提供對虛擬計算機(jī)的適當(dāng)操作和不受虛擬計算機(jī)影響以及虛擬計算機(jī)之間的保護(hù)。為了實現(xiàn)該目的,VMM通常截取并仲裁所有由客戶軟件完成的到硬件資源的訪問。特別地,當(dāng)客戶軟件請求需要訪問被保護(hù)硬件資源的操作時,對該操作的控制被轉(zhuǎn)移到VMM,并隨后保證訪問的有效性,仿真客戶軟件所需要的功能并將控制轉(zhuǎn)移回客戶軟件,從而保護(hù)硬件資源并對客戶軟件到硬件資源的訪問進(jìn)行虛擬化。因為被保護(hù)不受客戶軟件訪問所需要的硬件資源元件的數(shù)量很大,而且這種訪問是經(jīng)常的,所以與這種保護(hù)和虛擬化相關(guān)的性能成本相當(dāng)大。
被客戶軟件經(jīng)常訪問的硬件資源的一個例子是控制寄存器。比如,在因特爾奔騰(Intel Pentium)IV的指令集合結(jié)構(gòu)(ISA)(本文中作為IA-32ISA引用)中,有數(shù)個用于配置處理器操作模式、控制存儲器子系統(tǒng)配置及硬件資源等的控制寄存器。通常,當(dāng)客戶軟件試圖訪問一個控制寄存器中的某個位時,該控制被轉(zhuǎn)移到VMM,后者負(fù)責(zé)維持由客戶軟件啟動的與該位相關(guān)的寫操作和讀操作之間的連貫性。也就是說,VMM控制允許客戶軟件向控制寄存器每個位寫入的值以及客戶軟件從每個位讀取的值。這種對控制寄存器訪問的虛擬化產(chǎn)生了相當(dāng)大的性能開銷。
附圖簡述通過舉例闡述本發(fā)明,但本發(fā)明并不局限于此,在附圖中,相同的標(biāo)號表示相同的元件,其中
圖1示出了虛擬計算機(jī)環(huán)境100的一個實施例,在該環(huán)境中可操作本發(fā)明;圖2為過濾客戶軟件對諸如寄存器之類硬件資源訪問的過程的一個實施例的流程圖;圖3為使用一組準(zhǔn)則過濾VM退出的過程的一個實施例的流程圖;圖4為向諸如寄存器之類的硬件資源提供客戶軟件訪問的附加過濾的過程的一個實施例的流程圖;以及圖5為使用重定向映射在VMX操作中控制訪問諸如寄存器之類硬件資源的過程的一個實施例的流程圖。
具體實施例方式
描述了一種控制客戶軟件訪問虛擬計算機(jī)結(jié)構(gòu)中寄存器的方法和裝置。在以下的描述中,為了描述方便,闡述了許多特定的細(xì)節(jié)以提供對本發(fā)明的深入了解。但是,對于本領(lǐng)域技術(shù)人員來說相當(dāng)明顯的是,本發(fā)明可以在無這些特定細(xì)節(jié)的情況下實施。
下述某些部分的詳細(xì)描述是以對計算機(jī)系統(tǒng)的寄存器或存儲器中數(shù)據(jù)位上操作的算法和符號表示來闡述的。這些算法描述和表示是本領(lǐng)域技術(shù)人員在數(shù)據(jù)處理技術(shù)中使用的方式,從而最有效地將它們的工作實質(zhì)傳送給本領(lǐng)域中的其他技術(shù)人員。此處的算法通常被設(shè)計為導(dǎo)致所需結(jié)果的自連貫序列的操作。該操作是這些需要對物理量進(jìn)行物理操作的一些操作。通常地,雖然不是必須的,但這些量采用能夠被存儲、轉(zhuǎn)移、組合、比較或者以其它方式操縱的電信號或磁信號形式。主要是通用的原因,有時候?qū)⑦@些信號稱作位、值、單元、碼元、字符、項、數(shù)字等是方便的。
但是應(yīng)該理解的是,所有這些以及類似的術(shù)語都與合適的物理量相關(guān),并且僅僅是應(yīng)用于這些量的方便的標(biāo)號。除非是特別的描述,否則從以下的論述中很明顯可以理解的是,貫穿本發(fā)明,應(yīng)用諸如“處理”或“運算”或“計算”或“確定”等之類的術(shù)語的論述,可參考計算機(jī)系統(tǒng)的動作和處理或類似的電子運算設(shè)備,該設(shè)備操縱并將代表計算機(jī)系統(tǒng)寄存器和存儲器中物理(電子)量的數(shù)據(jù)轉(zhuǎn)換為類似的表示計算機(jī)系統(tǒng)存儲器或寄存器或其它這種信息存儲器、傳送或顯示設(shè)備中物理量的其它數(shù)據(jù)。
在隨后對實施例的詳細(xì)描述中,參考附圖,該附圖示出了可實現(xiàn)本發(fā)明的特定實施例。在附圖中,相同的標(biāo)號描述在幾個視圖中基本相同的元件。對這些實施例的詳細(xì)描述足以使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)本發(fā)明??梢岳闷渌膶嵤├?,而且可在不脫離本發(fā)明保護(hù)范圍前提下作出結(jié)構(gòu)的、邏輯的以及電氣上的變化。另外,可以理解的是,本發(fā)明的不同實施例,雖然不相同,但不一定互相排斥。例如,在一個實施例中描述的特定特征、結(jié)構(gòu)或特性可包括在其它的實施例中。因此,以下的詳細(xì)描述并不起限制的作用,而且本發(fā)明的保護(hù)范圍是由所附的權(quán)利要求書以及這些權(quán)利要求所賦予的等效特征的完整保護(hù)所限定的。
圖1示出了一個虛擬計算機(jī)環(huán)境的實施例100,本發(fā)明可在該環(huán)境中進(jìn)行操作。在該實施例中,裸平臺硬件116包含運算平臺,該平臺能夠,比如執(zhí)行標(biāo)準(zhǔn)操作系統(tǒng)(OS)或諸如VMM112之類虛擬計算機(jī)監(jiān)視器(VMM)。VMM112,雖然通常以軟件實現(xiàn),但可以仿真并將裸機(jī)接口導(dǎo)出到更高級別的軟件。這種更高級別的軟件可包含一個標(biāo)準(zhǔn)或?qū)崟rOS,可以是帶有限操作系統(tǒng)功能的高度剝離的操作系統(tǒng)環(huán)境,可以不包括傳統(tǒng)的OS工具等。另外,比如,VMM112可以在另一個VMM之內(nèi)或之上運行。VMM及其通常的特征以及功能是本領(lǐng)域技術(shù)人員所熟知的,它們可以以軟件、固件或通過結(jié)合多種技術(shù)來實現(xiàn)。
平臺軟件116包括處理器118和存儲器120。處理器118可以是任何一種能夠執(zhí)行軟件的處理器,比如微處理器、數(shù)字信號處理器、微控制器等。處理器118可包括用于執(zhí)行本發(fā)明方法實施例的微碼或硬編碼的邏輯。
平臺硬件116可以是個人計算機(jī)(PC)、主機(jī)、手提設(shè)備、便攜式計算機(jī)、機(jī)頂盒或任何其它的運算系統(tǒng)。
存儲器120可以是硬盤、軟盤、隨機(jī)存儲器(RAM)、只讀存儲器(ROM)、閃存或任何其它類型可由存儲器118讀取的計算機(jī)媒質(zhì)。存儲器120可存儲用于執(zhí)行本發(fā)明方法實施例的指令。
VMM112向其它軟件(即,“客戶”軟件)呈現(xiàn)一個或多個虛擬計算機(jī)(VM)的抽象,這可向多個客戶提供相同或不同的抽象。圖1示出了兩個VM,102和114。在每個VM上運行的客戶軟件可包括諸如客戶OS104或106之類的客戶OS以及多個客戶軟件應(yīng)用程序108-110??蛻鬙S104和106中的每一個都期望控制對客戶OS104或106所運行以及完成其它功能的VM102和114中的物理資源(比如,處理器寄存器、存儲器和存儲器-映射的I/O設(shè)備)的訪問。
VMM112在保持對平臺軟件116內(nèi)特權(quán)硬件資源的最終控制的同時,方便了客戶軟件所需的功能。特別地,一旦客戶軟件試圖訪問特權(quán)資源,對處理器的控制將被轉(zhuǎn)移到VMM112,后者隨即決定是執(zhí)行所請求的操作(例如,為客戶軟件仿真、代理直接對平臺硬件116的操作等等)還是拒絕對資源的訪問以方便安全性、可靠性或其它機(jī)制。方便客戶軟件功能的動作可包括在一部分VMM112上的各種活動。VMM112的活動以及特性不應(yīng)該限制本發(fā)明的保護(hù)范圍。
在一個實施例中,從客戶軟件到VMM的控制轉(zhuǎn)移由虛擬計算機(jī)控制結(jié)構(gòu)(VMCS)122中的控制位的設(shè)置來確定。VMCS122中的設(shè)置可防止客戶軟件完成可導(dǎo)致其對某個特權(quán)硬件資源訪問的操作。不同的客戶軟件可在不同的VMCS存儲圖像中執(zhí)行不同的控制位設(shè)置,雖然在圖1中只示出了一個這樣的VMCS。VMCS122存在于存儲器120中并由處理器118維持。值得注意的是,可在不損失共性的情況下,使用任何其它的數(shù)據(jù)結(jié)構(gòu)(比如,單片高速緩存器、文件、查找表等)來存儲VMCS122或與每個指定硬件資源相關(guān)的域。
當(dāng)客戶軟件試圖執(zhí)行訪問被保護(hù)資源的操作時,控制轉(zhuǎn)移到VMM112。VMM112可以訪問所有的平臺硬件116。當(dāng)這種轉(zhuǎn)移發(fā)生時,VMM112接收對由客戶軟件啟動的操作的控制。VMM112隨后可以如上所述地完成這種操作或拒絕訪問,并可以通過執(zhí)行特殊的指令將控制轉(zhuǎn)移回客戶軟件。通過這種機(jī)制對客戶軟件的控制在本文中被稱為VMX操作,控制從客戶軟件到VMM的轉(zhuǎn)移在本文中被稱為VM退出。
在一個實施例中,某種指令的執(zhí)行、某個例外和中斷以及某個平臺事件會引起VM退出。這些可能引起VM退出的原因在本文中被稱為虛擬化事件。例如,當(dāng)客戶軟件試圖完成將導(dǎo)致其對某個特權(quán)硬件資源(比如,控制寄存器或IO端口)進(jìn)行訪問的操作(比如,指令)時,會產(chǎn)生VM退出。
在一個實施例中,當(dāng)發(fā)生VM退出的時候,客戶軟件所使用的處理器狀態(tài)的各分量被保存,并裝載VMM112所需要的處理器狀態(tài)的分量。該對處理器狀態(tài)的保存和裝載,取決于處理器ISA,并可以起到改變當(dāng)前地址空間的作用(比如,在IA-32ISA中,當(dāng)前地址空間由控制寄存器中的值決定,該值可被保存并在VM退出時恢復(fù))。在一個實施例中,由客戶軟件使用的處理器狀態(tài)的分量被存儲在VMCS122的客戶-狀態(tài)區(qū)域中,而VMM112所需要的處理器狀態(tài)的分量被存儲在VMCS122的監(jiān)視器-狀態(tài)區(qū)域中。
在一個實施例中,當(dāng)從VMM到客戶軟件的轉(zhuǎn)移發(fā)生時,恢復(fù)在VM退出時保存的處理器狀態(tài),并使控制返回到客戶OS104或106或客戶應(yīng)用程序108或110。
在一個實施例中,當(dāng)發(fā)生VM退出的時候,控制被傳遞到VMM112上在VMCS122中描繪的特定入口點(比如,指令指針值)。在另一個實施例中,在形成通過重定向結(jié)構(gòu)(比如IA-32ISA中的中斷描述符表)的向量后,控制被傳遞到VMM112。另外,本領(lǐng)域所公知的其它機(jī)制也可用于將控制從客戶軟件轉(zhuǎn)移到VMM112。
因為需要被保護(hù)不被客戶軟件訪問的硬件資源元件的數(shù)量很大,而且這種訪問是經(jīng)常性的,所以與這種保護(hù)和虛擬化相關(guān)的性能成本相當(dāng)大。另外,由客戶軟件啟動的操作可包含對特權(quán)資源的訪問,這不會對VM102和114的安全性及適當(dāng)操作產(chǎn)生問題。例如,在IA-32ISA中,控制寄存器0(CR0)包括任務(wù)切換(TS)位,使用該位通過阻止對浮點狀態(tài)的保存和恢復(fù)直到該狀態(tài)被訪問來優(yōu)化內(nèi)容切換。由客戶OS通過清任務(wù)-切換標(biāo)志(CLTS)指令對TS位的更新不太可能對VM102和114的系統(tǒng)安全和適當(dāng)操作產(chǎn)生問題。相反,CR0的分頁使能(PG)比特配置處理器操作模式,如此該比特必須由VMM112來控制。在某些情況下,VMM112不能允許客戶軟件禁用分頁,因此VMM112必須控制客戶軟件試圖這樣做。
在一個實施例中,提供過濾機(jī)制以將由客戶軟件的訪問所引起的VM退出數(shù)減少到如寄存器(比如,控制寄存器、通用寄存器、模型特定寄存器等)之類的硬件資源或基于存儲器的資源(比如,存儲器中的分頁控制域等)。應(yīng)該注意的是,雖然以下是參考一種寄存器來描述本發(fā)明典型實施例的,但在不喪失共性的前提下本發(fā)明的啟示可應(yīng)用于任何其它的硬件資源。
以下將更加詳細(xì)地描述使用與每個指定硬件資源相關(guān)的一個或多個域的過濾機(jī)制功能。在一個實施例中,與每個指定硬件資源相關(guān)的域包含在VMCS122中。
圖2為用于過濾客戶軟件到諸如寄存器之類的硬件資源的訪問的過程200的一個實施例的流程圖。該過程通過可包含硬件(比如,電路、專用邏輯、微碼等)、軟件(諸如在通用計算機(jī)系統(tǒng)或?qū)S脵C(jī)器上運行)或兩者組合的處理邏輯來實現(xiàn)。
參考圖2,過程200開始于處理邏輯從客戶軟件接收屬于寄存器一個或多個部分的指令(處理框202)。寄存器的部分可以是寄存器的某個特別的單比特,也可以是寄存器的多個比特(相鄰的或非相鄰的)。屬于寄存器部分的指令可以是請求從寄存器部分讀取數(shù)據(jù)的讀指令,也可以是請求向寄存器部分寫入數(shù)據(jù)的寫指令。寄存器可以代表控制寄存器(比如,IA-32ISA中的CR0或CR4)、整數(shù)寄存器、或任何其它的寄存器或基于存儲器的資源。
接下來,處理邏輯從掩碼域讀取相應(yīng)的指示符(處理框204)。掩碼域包括一組對應(yīng)寄存器部分的指示符。例如,如果寄存器是32比特的控制寄存器(比如,IA-32ISA中的CR0或CR4),則掩碼域可包括擴(kuò)32個指示符,每個指示符對應(yīng)控制寄存器的一個特殊比特。另外,因為寄存器可具有不使用的比特,所以掩碼域可具有比寄存器中的比特數(shù)更少的指示符,由于某些其它原因,掩碼域中的某些指示符可對應(yīng)兩個或更多的比特。掩碼域中的每個指示符提供關(guān)于一部分是在客戶控制下(即,允許客戶軟件訪問寄存器的對應(yīng)部分)還是在VMM控制下的信息。在本發(fā)明的實施例中,不具有對應(yīng)掩碼比特的寄存器中的比特假定為在客戶的控制下。在本發(fā)明的另一個實施例中,它們被假定為在VMM的控制下。
在判決框206,處理邏輯根據(jù)來自掩碼域的對應(yīng)指示符,判定是否允許客戶軟件訪問所有請求的寄存器部分。如果判定的結(jié)果是肯定的,則處理邏輯在所請求的寄存器部分執(zhí)行指令(處理框208)。也就是說,處理邏輯從所請求的寄存器部分讀取數(shù)據(jù),或向該部分寫入數(shù)據(jù)。
否則,如果在判決框206的判定結(jié)果是否定的,則在一個實施例中,處理邏輯將控制轉(zhuǎn)移到VMM(處理框210)。
在一可替換的實施例中,使用額外的域來進(jìn)一步減少控制被轉(zhuǎn)移到VMM中的情況次數(shù)。該額外的域在本文中被稱為影子值域。影子值域的每個部分對應(yīng)寄存器的特定部分并存儲客戶軟件期望在寄存器這部分看到的值。在本發(fā)明的一個實施例中,影子值域的值由VMM維持并存儲在VMCS中。在一個實施例中,只有掩碼域中的指示符指示客戶軟件無法訪問這些寄存器部分的寄存器部分在影子值域中具有對應(yīng)的部分。比如,在IA-32ISA中,如果不允許客戶軟件訪問由掩碼域中指示符的值所反映的CR0中的位1到位10,則影子值域的大小將被限制為對應(yīng)CR0位1到位10的10位。在另一個實施例中,在掩碼域中帶一指示符的每個寄存器部分在影子值域中都有一個對應(yīng)的部分。
圖4為用于向諸如寄存器之類的硬件資源提供對客戶軟件訪問的附加過濾的過程400的一個實施例的流程圖。在一個實施例中,過程400代替了圖2中的框210。該過程可通過可包含硬件(比如,電路、專用邏輯、微碼等)、軟件(諸如在通用計算機(jī)系統(tǒng)或?qū)S脵C(jī)器上運行)或兩者組合的處理邏輯來實現(xiàn)。
參考圖4,過程400開始于處理框402,處理邏輯根據(jù)掩碼域中所對應(yīng)的一個或多個指示符來確定被訪問的一個或多個寄存器部分是在VMM的控制下,如以上結(jié)合圖2所描述的。
接下來,在判決框403,處理邏輯確定訪問是否為向所請求寄存器部分寫入數(shù)據(jù)的指令。如果確定的結(jié)果是肯定的,即訪問是寫指令,則處理邏輯對于所有在VMM控制下的部分確定,是否客戶希望寫入每個部分的數(shù)據(jù)等于讀取影子域?qū)?yīng)部分中存儲的數(shù)據(jù)(判決框404)。如果該確定結(jié)果對于所有在VMM控制下的請求部分都是肯定的,則允許客戶向在客戶控制下的實際寄存器資源的所有部分寫入數(shù)據(jù)(如掩碼域中對應(yīng)位所確定的)(處理框405),且隨后過程400結(jié)束。如果該確定結(jié)果對于任何在VMM控制下的請求部分是否定的,則處理邏輯將控制轉(zhuǎn)移到VMM(處理框406)。VMM隨后根據(jù)其執(zhí)行請求的需要更新影子值域和寄存資源的對應(yīng)部分,并將控制轉(zhuǎn)移回客戶軟件。
另外,如果由客戶軟件啟動的指令是從所請求寄存器部分讀取數(shù)據(jù)的指令,那么控制不會被轉(zhuǎn)移到VMM。特別地,處理邏輯訪問所有在VMM控制下的請求部分的影子值域的對應(yīng)部分(處理框412),并將與來自客戶控制下的資源部分的實際寄存器資源的值相組合的存儲在這些影子值域部分中的數(shù)據(jù)返回給客戶軟件(處理框414)。
現(xiàn)在將參考圖1更詳細(xì)地描述以上較詳細(xì)討論的實施例,其中,控制到VMM的轉(zhuǎn)移由VMX操作來支持。
在一個實施例中,VMM維持一組控制比特以配置哪些虛擬化事件將引起VM退出。該組控制比特在本文中被稱為重定向映射。在一個實施例中,該重定向映射包含在圖1的VMCS122中。一旦檢測到發(fā)生了虛擬化事件,就咨詢該重定向映射以找到與該虛擬化事件相關(guān)的無條件退出比特。該比特指示是否該虛擬化事件將無條件地發(fā)生一個VM退出。比如,重定向映射可為每個控制寄存器包括兩個位,一個位控制在客戶請求從控制寄存器讀取數(shù)據(jù)時的VM退出,另一位控制客戶請求向控制寄存器寫入數(shù)據(jù)時的VM退出。
此外,在一個實施例中,對于每個指定的資源(比如,IA-32ISA中的CR0或CR4),重定向映射包括指示是否將為該資源使用掩碼域的比特和指示是否將為該資源使用影子值域的比特。
圖5為使用重定向映射在VMX操作中控制訪問諸如寄存器之類的硬件資源的過程500的一個實施例的流程圖。該過程可通過可包含硬件(比如,電路、專用邏輯、微碼等)、軟件(諸如在通用計算機(jī)系統(tǒng)或?qū)S脵C(jī)器上運行)或兩者組合的處理邏輯來實現(xiàn)。
參考圖5,過程500開始于處理框502,處理邏輯識別出發(fā)生了由客戶軟件請求訪問諸如控制寄存器之類的硬件資源的一部分所引起的虛擬化事件。該請求可以是從特定寄存器的一個或多個部分讀取數(shù)據(jù)的指令,或者是向特定寄存器的一個或多個部分寫入數(shù)據(jù)的指令。
在處理框503,處理邏輯咨詢重定向映射以確定,是否設(shè)置了與該虛擬化事件相關(guān)的無條件退出比特(判決框506)。如果設(shè)置了該比特,則處理邏輯觸發(fā)VM退出(處理框522)。比如,在IA-32ISA中,重定向映射可包括無條件引起向CR2寫入、從CR0讀取、向CR4寫入等時的VM退出。
另外,如果未設(shè)置無條件退出比特,則處理邏輯進(jìn)一步確定是否為該寄存器使用掩碼域(判決框508)。通過使用在重定向映射中的指定比特來完成該確定。比如,在IA-32ISA中,在重定向映射中可以有指示是否用于CR0的掩碼的比特、是否用于CR4的掩碼的比特等。如果該掩碼域不用于該寄存器,則處理邏輯在所請求的寄存器部分執(zhí)行請求的讀取或?qū)懭胫噶?處理框514)。不然的話,處理邏輯讀取對應(yīng)于所請求寄存器部分的掩碼域比特(處理框510)。這些比特在本文中被稱為請求的掩碼域比特。檢查請求的掩碼域比特以確定是否設(shè)置了它們中的一個或多個(指示一個或多個對應(yīng)的寄存器部分是在VMM的控制下)(判決框512)。
如果沒有請求的掩碼域比特被設(shè)置,即允許客戶軟件訪問所有請求的寄存器部分,則處理邏輯在寄存器部分執(zhí)行所請求的讀取或?qū)懭胫噶?處理框514)。否則,如果設(shè)置了所請求掩碼域中的任何比特,則處理邏輯根據(jù)重定向映射中的指定比特來確定是否為該寄存器使用影子值域(判決框516)。例如,在IA-32ISA中,在重定向映射中有指示是否有用于CR0訪問、用于CR4訪問等的影子值的比特。如果影子值域不用于該寄存器,則處理邏輯觸發(fā)一個VM退出(處理框522)。
如果影子值域要被用于該寄存器,且由客戶軟件啟動的請求是讀取指令(判決框517),則處理邏輯讀取對應(yīng)這些設(shè)置在所請求的掩碼域中并因此在VMM控制下的寄存器部分的影子值域的比特(處理框518)。這些來自影子值域的比特與來自實際寄存器的對應(yīng)不設(shè)置且因此在客戶控制下的所請求的掩碼域中的比特相組合。這些組合的值隨后被返回到客戶軟件。可從寄存器讀取在被保護(hù)資源中不在掩碼和/或影子值域中表示的比特的值。
如果要為寄存器使用影子值域,但由客戶軟件啟動的請求是寫入指令,則處理邏輯將請求要寫入到VMM控制下寄存器比特的值與影子值域中對應(yīng)比特的值作比較(判決框520)。如果這兩個值相同,則對在客戶控制下的所請求寄存器部分進(jìn)行寫入(處理框519)。換言之,對客戶控制下的比特進(jìn)行寫入;而那些在VMM控制下的比特保持不變。在一個實施例中,可對寄存器中不在掩碼和/或影子值域中表示的比特進(jìn)行寫入,如果假定它們在客戶控制下的話。在另一個實施例中,數(shù)據(jù)不寫到未表示的比特上,因為假定它們在VMM控制下。不然的話,如果在判決框520比較的兩個值不同,則處理邏輯觸發(fā)一個VM退出(處理框522)。
在一個實施例中,由VMM定義一組準(zhǔn)則用于過濾VM退出。該準(zhǔn)則基于存儲在掩碼域中和影子值域中的值與客戶軟件希望寫到寄存器上的值的組合。圖3為使用一組準(zhǔn)則過濾VM退出的過程300的一個實施例的流程圖。該過程可通過可包含硬件(比如,電路、專用邏輯、微碼等)、軟件(諸如在通用計算機(jī)系統(tǒng)或?qū)S脵C(jī)器上運行)或兩者組合的處理邏輯來實現(xiàn)。
參考圖3,過程300開始于處理邏輯確定客戶軟件的訪問是否是向寄存器寫入數(shù)據(jù)的請求(判決框302)。如果該確定是否定的,即該訪問是從寄存器讀取數(shù)據(jù)的請求,則使用以下的表達(dá)式確定該讀取請求的結(jié)果值DEST=(MF AND SVF)OR(NOT MF AND CRVAL),其中,AND、NOT和OR是布爾邏輯位運算符,MF是掩碼域的值,SVF是影子值域的值,而CRVAL是實際被保護(hù)的寄存器的當(dāng)前值。如果寄存器中的對應(yīng)位被VMM控制,則設(shè)置掩碼域中的一位。不然的話,如果寄存器中的位被客戶軟件控制,則掩碼域中的對應(yīng)比特等于零。影子域中的位具有客戶軟件期望在寄存器的對應(yīng)位中看到的值,且該值可以不同于實際寄存器的對應(yīng)比特的當(dāng)前值。
根據(jù)以上的表達(dá)式,如果由客戶軟件控制請求比特,則從寄存器讀取數(shù)據(jù),而如果由VMM控制請求比特,則從影子值域讀取數(shù)據(jù)。
如果處理邏輯在判決框302確定客戶軟件的訪問是寫請求,則處理邏輯組合掩碼域和影子值域的值(處理框304)如下所述INT1=MF AND SVF此外,處理邏輯使用以下的表達(dá)式將掩碼域的值與客戶軟件希望寫入寄存器的值相組合(處理框306)INT2=MF AND SRC,其中,SRC是客戶希望寫入寄存器的值。
此外,處理邏輯比較在判決框308的兩個組合。如果兩個組合是相等的,即寄存器中的所有比特或是由客戶軟件控制,或是由VMM控制,且影子值域中對應(yīng)比特的值與客戶軟件希望寫入寄存器的值相等,則處理邏輯在處理框312執(zhí)行以下的表達(dá)式CR=(MF AND CRVAL)OR(NOT MF AND SRC)。
根據(jù)這個表達(dá)式,如果寄存器中的比特由客戶軟件控制,則該比特將用客戶軟件希望寫入的值更新。不然的話,寄存器中該比特的值將保持與原來相同且不會被更新。
另外,如果兩個組合不相等,即寄存器中至少一個比特由VMM控制,且影子值域中對應(yīng)比特的值與客戶軟件希望寫入寄存器的值不相等,則處理邏輯在處理框310觸發(fā)一個VM退出。
值得注意的是,對過程300的描述通過使用整個寄存器(比如,IA-32ISA中CR0寄存器的32比特)和32比特寬的掩碼和影子值與而得到簡化。本領(lǐng)域普通技術(shù)人員將理解,本發(fā)明的實施例可應(yīng)用于只訪問有限子集寄存器比特或訪問多寄存器中的比特的讀取和寫入操作。另外,本領(lǐng)域技術(shù)人員將可以想到,本發(fā)明可以應(yīng)用于在所包含的各種元件之間不是比特對比特對應(yīng)關(guān)系的情況(比如,如果掩碼中的比特應(yīng)用于被保護(hù)資源中的多個比特)。
從而,以上描述了一種控制客戶軟件對硬件資源進(jìn)行訪問的方法和裝置。可以理解的是,以上的描述旨在示例,而不是限制。本領(lǐng)域技術(shù)人員在閱讀和理解了以上的描述之后,可以很明顯地想到其它許多實施例。因此,本發(fā)明的保護(hù)范圍應(yīng)該由所附的權(quán)利要求以及這些權(quán)利要求所賦予的等效特征的全部范圍來決定。
權(quán)利要求
1.一種方法,包含從客戶軟件接收屬于寄存器一個或多個部分的指令;根據(jù)對應(yīng)所述寄存器一個或多個部分的掩碼域中的一個或多個指示符來確定所述客戶軟件是否可以訪問該寄存器的一個或多個部分;以及如果所述客戶軟件可以訪問所述寄存器一個或多個部分中的每一部分,則在該寄存器的一個或多個部分上執(zhí)行所述指令。
2.如權(quán)利要求1所述的方法,其特征在于,所述掩碼域包括一組指示符,該組指示符中的每個指示符對應(yīng)于所述寄存器的一個特定部分并指示是否允許該寄存器的特定部分被客戶軟件訪問。
3.如權(quán)利要求1所述的方法,其特征在于,所述寄存器的一個或多個部分的每一部分表示該寄存器的一個特定比特。
4.如權(quán)利要求1所述的方法,其特征在于,所述寄存器是控制寄存器。
5.如權(quán)利要求1所述的方法,其特征在于,屬于所述寄存器一個或多個部分的所述指令是向該寄存器的一個或多個部分寫入數(shù)據(jù)的指令。
6.如權(quán)利要求5所述的方法,其特征在于,在所述寄存器的一個或多個部分上執(zhí)行指令,包括將數(shù)據(jù)寫入到該寄存器的一個或多個部分。
7.如權(quán)利要求5所述的方法,其特征在于,還包含根據(jù)所述掩碼域中的對應(yīng)指示符,確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分;檢測所請求要寫入所述寄存器一個或多個部分中至少一部分的數(shù)據(jù)不同于客戶軟件所期望的要被存儲在所述寄存器一個或多個部分中至少一部分中的值;以及將控制轉(zhuǎn)移到虛擬計算機(jī)監(jiān)視器(VMM)。
8.如權(quán)利要求5所述的方法,其特征在于,還包含根據(jù)所述掩碼域中的對應(yīng)指示符,確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分;檢測所請求要寫入所述寄存器一個或多個部分中至少一部分的數(shù)據(jù)與客戶軟件所期望的要被存儲在所述寄存器一個或多個部分中至少一部分中的值相同;以及將數(shù)據(jù)寫入到允許所述客戶軟件訪問的寄存器的一個或多個部分中的任一部分。
9.如權(quán)利要求7所述的方法,其特征在于,檢測所述數(shù)據(jù)不同于所期望的要被存儲在所述寄存器一個或多個部分中的值包括,將該數(shù)據(jù)與影子值域的一個或多個對應(yīng)部分的值作比較。
10.如權(quán)利要求9所述的方法,其特征在于,還包含VMM用所述的數(shù)據(jù)更新所述影子值域。
11.如權(quán)利要求1所述的方法,其特征在于,屬于所述寄存器一部分的所述指令是從所述寄存器一個或多個部分讀取數(shù)據(jù)的指令。
12.如權(quán)利要求11所述的方法,其特征在于,在所述寄存器一個或多個部分上執(zhí)行指令包括,從所述寄存器的一個或多個部分讀取數(shù)據(jù)。
13.如權(quán)利要求11所述的方法,其特征在于,還包含根據(jù)所述掩碼域中的一個或多個對應(yīng)的指示符,確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分;訪問允許所述客戶軟件訪問的所述寄存器一個或多個部分中的任一部分;訪問影子值域中對應(yīng)于所述寄存器一個或多個部分中至少一部分的一個或多個部分;將存儲在所述影子值域一個或多個對應(yīng)部分中的數(shù)據(jù)與存儲在允許客戶軟件訪問的寄存器的一個或多個部分中任一部分中的數(shù)據(jù)進(jìn)行組合;以及將所組合的數(shù)據(jù)返回到所述客戶軟件。
14.一種系統(tǒng),包含存儲器;以及處理器,耦連到所述存儲器,用于從客戶軟件接收屬于寄存器一個或多個部分的指令,根據(jù)掩碼域中對應(yīng)所述寄存器一個或多個部分的一個或多個指示符確定所述客戶軟件是否可以訪問所述寄存器的一個或多個部分,并且如果所述客戶軟件可以訪問所述寄存器一個或多個部分的每一部分則在所述寄存器的一個或多個部分上執(zhí)行所述指令。
15.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述掩碼域包括一組指示符,該組指示符中的每個指示符對應(yīng)所述寄存器的一個特定部分并指示是否允許該寄存器的特定部分被客戶軟件訪問。
16.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述寄存器的一個或多個部分的每一部分表示該寄存器的一個特定位。
17.如權(quán)利要求14所述的系統(tǒng),其特征在于,所述寄存器是控制寄存器。
18.如權(quán)利要求14所述的系統(tǒng),其特征在于,屬于所述寄存器一個或多個部分的所述指令是向該寄存器的一個或多個部分寫入數(shù)據(jù)的指令。
19.如權(quán)利要求18所述的系統(tǒng),其特征在于,在所述寄存器的一個或多個部分上執(zhí)行指令,包括將數(shù)據(jù)寫入到該寄存器的一個或多個部分。
20.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述處理器進(jìn)一步根據(jù)所述掩碼域中的對應(yīng)指示符確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分,檢測所請求要寫入所述寄存器一個或多個部分中至少一部分的數(shù)據(jù)不同于客戶軟件所期望的要被存儲在所述寄存器一個或多個部分中至少一部分中的值,以及將控制轉(zhuǎn)移到虛擬計算機(jī)監(jiān)視器(VMM)。
21.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述處理器進(jìn)一步根據(jù)所述掩碼域中的對應(yīng)指示符確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分,檢測所請求要寫入所述寄存器一個或多個部分中至少一部分的數(shù)據(jù)與客戶軟件所期望的要被存儲在所述寄存器一個或多個部分中至少一部分中的值相同,以及將數(shù)據(jù)寫入到允許所述客戶軟件訪問的寄存器的一個或多個部分中的任一部分。
22.如權(quán)利要求20所述的系統(tǒng),其特征在于,所述處理器通過將所述數(shù)據(jù)與影子值域的一個或多個對應(yīng)部分的值作比較來檢測該數(shù)據(jù)不同于所期望的要被存儲在所述寄存器一個或多個部分中的值。
23.如權(quán)利要求18所述的系統(tǒng),其特征在于,所述處理器進(jìn)一步用所述的數(shù)據(jù)更新所述影子值域。
24.如權(quán)利要求18所述的系統(tǒng),其特征在于,屬于所述寄存器一部分的所述指令是從所述寄存器一個或多個部分讀取數(shù)據(jù)的指令。
25.如權(quán)利要求24所述的系統(tǒng),其特征在于,在所述寄存器一個或多個部分上執(zhí)行指令包括,從所述寄存器的一個或多個部分讀取數(shù)據(jù)。
26.如權(quán)利要求24所述的系統(tǒng),其特征在于,所述處理器進(jìn)一步根據(jù)所述掩碼域中一個或多個對應(yīng)的指示符確定所述客戶軟件不可以訪問所述寄存器一個或多個部分中的至少一部分,訪問允許所述客戶軟件訪問的所述寄存器一個或多個部分中的任一部分,訪問影子值域中對應(yīng)所述寄存器一個或多個部分中至少一部分的一個或多個部分,將存儲在所述影子值域一個或多個對應(yīng)部分中的數(shù)據(jù)與存儲在允許客戶軟件訪問的寄存器的一個或多個部分中任一部分中的數(shù)據(jù)進(jìn)行組合,以及將所組合的數(shù)據(jù)返回到所述客戶軟件。
27.一種包含指令的計算機(jī)可讀介質(zhì),該指令當(dāng)由處理系統(tǒng)執(zhí)行時使該處理系統(tǒng)實現(xiàn)一方法,該方法包括從客戶軟件接收屬于寄存器一個或多個部分的指令;根據(jù)對應(yīng)所述寄存器一個或多個部分的掩碼域中的一個或多個指示符來確定所述客戶軟件是否可以訪問該寄存器的一個或多個部分;以及如果所述客戶軟件可以訪問所述寄存器一個或多個部分中的每一部分,則在該寄存器的部分上執(zhí)行所述指令。
28.如權(quán)利要求27所述的計算機(jī)可讀介質(zhì),其特征在于,所述掩碼域包括一組指示符,該組指示符中的每個指示符對應(yīng)所述寄存器的一個特定部分并指示是否允許該寄存器的特定部分被客戶軟件訪問。
29.如權(quán)利要求27所述的計算機(jī)可讀介質(zhì),其特征在于,所述寄存器的一個或多個部分的每一部分表示該寄存器的一個特定比特。
30.如權(quán)利要求27所述的計算機(jī)可讀介質(zhì),其特征在于,所述寄存器是控制寄存器。
全文摘要
在一個實施例中,從客戶軟件接收屬于一寄存器一個或多個部分的指令。此外,根據(jù)掩碼域中對應(yīng)所述寄存器所請求部分的指示符,確定是否所述客戶軟件可以訪問該寄存器的所有請求部分。如果該客戶軟件可以訪問所述寄存器所有請求的部分,則在該寄存器所請求的部分上執(zhí)行從所述客戶軟件接收的指令。
文檔編號G06F9/40GK1659518SQ03813694
公開日2005年8月24日 申請日期2003年3月27日 優(yōu)先權(quán)日2002年4月16日
發(fā)明者S·貝內(nèi)特, A·安德森, E·科塔羅布萊斯, S·杰亞辛格, A·卡吉, G·奈格, R·烏利希, M·科祖奇 申請人:英特爾公司