專利名稱:配置空間虛擬化的制作方法
技術(shù)領(lǐng)域:
目前所公開的主題涉及計(jì)算領(lǐng)域,尤其涉及計(jì)算機(jī)虛擬化,雖然虛擬化只是示例性并且是非限制性領(lǐng)域。背景大多數(shù)輸入/輸出(I/O)設(shè)備都是在存在配置系統(tǒng)中的所有I/O設(shè)備的一塊可信軟件的假設(shè)下被設(shè)計(jì)的。通常還假設(shè),那些I/O設(shè)備最終由設(shè)備驅(qū)動(dòng)程序控制,設(shè)備驅(qū)動(dòng)程序是抽象化單個(gè)設(shè)備差異的插件模塊。此外,還假設(shè)這些驅(qū)動(dòng)程序都被包含在單個(gè)內(nèi)核內(nèi)。然而,在虛擬機(jī)的上下文中,上面的假設(shè)可能不再有效。每一虛擬機(jī)通常都包含其自己的操作系統(tǒng)內(nèi)核,操作系統(tǒng)內(nèi)核可以被或可以不被在所有其他虛擬機(jī)中運(yùn)行的所有其他內(nèi)核信任。配置和控制物理主機(jī)內(nèi)的設(shè)備通常涉及具有實(shí)施關(guān)于來自一個(gè)虛擬機(jī)的動(dòng)作可如何影響其他虛擬機(jī)的策略的能力的某一中央機(jī)構(gòu)。在某些系統(tǒng)中,此中央機(jī)構(gòu)位于主機(jī)操作系統(tǒng)中。在其他系統(tǒng)中,管理機(jī)構(gòu)可以位于系統(tǒng)管理程序中,在其他系統(tǒng)中,機(jī)構(gòu)可以與在系統(tǒng)管理程序的上方運(yùn)行的虛擬機(jī)中的一個(gè)在一起。當(dāng)構(gòu)建虛擬化系統(tǒng)時(shí),一種方法可以是維護(hù)對(duì)上文所描述的中央機(jī)構(gòu)內(nèi)所有I/O 設(shè)備的完全控制。因此,當(dāng)虛擬機(jī)需要I/O服務(wù)時(shí),虛擬機(jī)可以向控制I/O的中央機(jī)構(gòu)傳遞請(qǐng)求(直接或間接地)。此方法起作用,但是遭受兩個(gè)問題。首先,與在物理硬件上運(yùn)行的操作系統(tǒng)而并非虛擬機(jī)相比,I/O操作得比它應(yīng)該的更慢。其次,向虛擬機(jī)表達(dá)的I/O設(shè)備的范圍可能受到虛擬化軟件的限制。需要將在物理計(jì)算機(jī)內(nèi)的每一個(gè)設(shè)備指派到在其內(nèi)運(yùn)行的虛擬機(jī)中的一個(gè)或多個(gè)。以此方式,I/O將不會(huì)遭受與間接相關(guān)聯(lián)的性能損失,且可以被插入到計(jì)算機(jī)中的任何設(shè)備都可以被虛擬機(jī)使用,而不要求虛擬化層完全理解其內(nèi)部功能。因此,需要其他技術(shù)來解決上文所描述的問題。概述此處公開了用于通過創(chuàng)建或接收對(duì)設(shè)備的描述來限制與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)(不擁有設(shè)備的系統(tǒng)范圍的策略)的行為的各種方法和系統(tǒng),該對(duì)設(shè)備的描述向特權(quán)機(jī)構(gòu)(例如,虛擬化系統(tǒng)的系統(tǒng)管理程序或其他特權(quán)方面)指示(1)對(duì)設(shè)備的哪些操作可以具有系統(tǒng)范圍的影響,以及O)哪些操作具有設(shè)備本地的影響。特權(quán)機(jī)構(gòu)可在隨后允許或拒絕這些動(dòng)作。特權(quán)機(jī)構(gòu)也可以將這些動(dòng)作轉(zhuǎn)換為具有良性結(jié)果的其他動(dòng)作。在一個(gè)實(shí)施例中,對(duì)于每一個(gè)設(shè)備,可以構(gòu)建配置空間的圖,其中該配置內(nèi)的每一比特都具有以下屬性中的一個(gè)或多個(gè)i.只讀。ii.讀取時(shí)始終為0。iii.讀取時(shí)始終為1。iv.讀寫。v.寫入1清除,寫入0保留。vi.寫入1設(shè)置,寫入0保留。
vii.寫入0清除,寫入1保留。viii.寫入0設(shè)置,寫入1保留。ix.首次讀取之后清零。χ.首次讀取之后設(shè)為1。上面的行為是示例性的,可以包括附加行為來限制對(duì)存儲(chǔ)器位置允許的動(dòng)作。也可以構(gòu)建MMIO空間的圖,其中可以將每一頁(yè)映射到虛擬機(jī)。對(duì)于從虛擬機(jī)的圖中排除的頁(yè),特權(quán)機(jī)構(gòu)可以選擇利用看起來像設(shè)備的靜態(tài)圖像填充該頁(yè)。替換地,特權(quán)機(jī)構(gòu)可以選擇接收截取,并使用帶有應(yīng)用于這些特定頁(yè)的圖的配置空間來處理截取。在進(jìn)一步的實(shí)施例中,公開了用于交換安全地包含設(shè)備的信息的方法。在某些實(shí)施例中,可以將圖的表示嵌入在驅(qū)動(dòng)程序安裝文件中。可以由產(chǎn)生安裝文件的當(dāng)事人對(duì)安裝文件進(jìn)行數(shù)字簽名。因此,機(jī)器管理員可以允許特權(quán)機(jī)構(gòu)來處理安裝文件,無需實(shí)際在特權(quán)機(jī)構(gòu)安裝設(shè)備的驅(qū)動(dòng)程序??梢栽谔摂M機(jī)中安裝驅(qū)動(dòng)程序,且設(shè)備可以在虛擬機(jī)中運(yùn)轉(zhuǎn)并受約束,以使得設(shè)備不影響其他虛擬機(jī)或特權(quán)機(jī)構(gòu)。除前述的之外,在構(gòu)成本發(fā)明的一部分的權(quán)利要求書、附圖,以及文本中描述了其他方面。那些本技術(shù)技術(shù)人員可以理解,本發(fā)明的一個(gè)或多個(gè)各個(gè)方面可包括,但不僅限于,用于實(shí)行本公開的此處引用的各方面的電路和/或編程;電路和/或編程可以幾乎是被配置成取決于系統(tǒng)設(shè)計(jì)人員的設(shè)計(jì)選擇而達(dá)成此處引用的各方面的硬件、軟件和/或固件的任何組合。應(yīng)該注意,提供本概述是為了以簡(jiǎn)化的形式介紹將在以下詳細(xì)描述中進(jìn)一步描述的一些代表性的概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。附圖簡(jiǎn)述當(dāng)結(jié)合附圖閱讀時(shí),可以更好地了解前面的摘要,以及下面的詳細(xì)描述。為了說明本發(fā)明,示出了本發(fā)明的各個(gè)方面。然而,本發(fā)明不限于所示出的特定方面。包括了下面的圖形圖Ia示出了帶有多個(gè)虛擬機(jī)的虛擬機(jī)環(huán)境,包括多個(gè)虛擬處理器以及對(duì)應(yīng)的來賓操作系統(tǒng);虛擬機(jī)是由虛擬化層維護(hù)的,該虛擬化層可以包括調(diào)度器及其他組件,其中虛擬化層為多個(gè)虛擬機(jī)虛擬化硬件;圖Ib示出了表示計(jì)算機(jī)系統(tǒng)中的虛擬化環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯層的示圖;圖Ic描繪了其中可以實(shí)現(xiàn)本公開的各方面的示例計(jì)算機(jī)系統(tǒng);圖2示出了示例性虛擬化計(jì)算系統(tǒng);圖3示出了替換的虛擬化計(jì)算系統(tǒng);圖4描繪了示出了與PCI設(shè)備相關(guān)的IO空間和匪IO的示例性系統(tǒng)圖;圖5是示出了 RAM可以駐留在其中的地址空間的示例性示圖;圖6示出了用于管理非特權(quán)虛擬機(jī)和I/O設(shè)備之間的事務(wù)的全局和本地影響的操作過程的示例;圖7示出了用于管理非特權(quán)虛擬機(jī)和I/O設(shè)備之間的事務(wù)的全局和本地影響的操作過程的示例;
圖8示出了用于管理與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)的全局和本地影響的操作過程的示例;圖9描繪了用于限制與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)的行為的示例性操作過程;
圖10示出了承載參考上面的圖1-9所討論的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)。詳細(xì)描述虛擬機(jī)概述在下面的描述和圖形中闡述某些具體細(xì)節(jié),以提供對(duì)本發(fā)明的各實(shí)施例的全面的理解。在下面的公開中沒有闡述常常與計(jì)算和軟件技術(shù)相關(guān)聯(lián)的某些公知的細(xì)節(jié),以避免不必要地使本發(fā)明的各實(shí)施例模糊。進(jìn)一步地,那些相關(guān)領(lǐng)域普通技術(shù)人員將理解,他們可以在沒有下面所描述的細(xì)節(jié)中的一個(gè)或多個(gè)的情況下實(shí)施本發(fā)明的其他實(shí)施例。最后,盡管在下面的公開中參考步驟和序列描述了各種方法,但是,如此的描述用于提供本發(fā)明的各實(shí)施例的清楚的實(shí)現(xiàn),且步驟和步驟的序列不應(yīng)該理解為實(shí)施本發(fā)明所必需的。應(yīng)該理解,此處所描述的各種技術(shù)可以結(jié)合硬件或軟件或,在適當(dāng)?shù)那闆r下,結(jié)合兩者的組合來實(shí)現(xiàn)。因此,本發(fā)明的方法和裝置,或其某些方面或部分,也可以以在有形的介質(zhì)(如軟盤、CD-ROM、硬盤驅(qū)動(dòng)器,或任何其他機(jī)器可讀的存儲(chǔ)介質(zhì))中實(shí)現(xiàn)的程序代碼 (即,指令)的形式來實(shí)現(xiàn),其中當(dāng)程序代碼被加載到諸如計(jì)算機(jī)之類的機(jī)器中并由它們執(zhí)行時(shí),機(jī)器變?yōu)橛糜趯?shí)施該發(fā)明的裝置。在程序代碼在可編程計(jì)算機(jī)上執(zhí)行的情況下,計(jì)算設(shè)備一般包括處理器、可由處理器讀取的存儲(chǔ)介質(zhì)(包括易失性和非易失性存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備,以及至少一個(gè)輸出設(shè)備。一個(gè)或多個(gè)程序可以實(shí)現(xiàn)或使用結(jié)合本發(fā)明所描述的過程,例如,通過使用API、可重用控件等等。這樣的程序優(yōu)選地以高級(jí)別過程或面向?qū)ο缶幊陶Z言來實(shí)現(xiàn),以與計(jì)算機(jī)系統(tǒng)進(jìn)行通信。然而,若有需要,程序也可以以以匯編或機(jī)器語言來實(shí)現(xiàn)。在任一情況下,語言都可以是編譯的或解釋的語言,并與硬件實(shí)現(xiàn)相結(jié)合。圖Ia示出了虛擬機(jī)環(huán)境100,帶有多個(gè)虛擬機(jī)120、121,這些虛擬機(jī)包括多個(gè)虛擬處理器110、112、114、116,以及對(duì)應(yīng)的來賓操作系統(tǒng)130,132。虛擬機(jī)120,121由虛擬化層 140來維護(hù),該虛擬化層140可以包括調(diào)度器142及其他組件(未示出),其中虛擬化層140 為多個(gè)虛擬機(jī)120,121虛擬化硬件150。多個(gè)虛擬處理器110、112、114、116可以是底層硬件物理處理器160、162的虛擬對(duì)應(yīng)物。圖Ib是表示計(jì)算機(jī)系統(tǒng)中的虛擬化環(huán)境的硬件和軟件體系結(jié)構(gòu)的邏輯層的示圖。在圖Ib中,虛擬化程序180直接或間接地在物理硬件體系結(jié)構(gòu)182上運(yùn)行。虛擬化程序180可以是(a)與主機(jī)操作系統(tǒng)一起運(yùn)行的虛擬機(jī)監(jiān)視器,(b)帶有系統(tǒng)管理程序組件的主機(jī)操作系統(tǒng),其中該系統(tǒng)管理程序組件執(zhí)行虛擬化,(c)硬件,或者(d)微代碼。虛擬化程序也可以是與任何操作系統(tǒng)分開地運(yùn)行的系統(tǒng)管理程序。換言之,系統(tǒng)管理程序虛擬化程序不必作為任何操作系統(tǒng)的一部分來運(yùn)行,也不必與任何操作系統(tǒng)一起運(yùn)行。系統(tǒng)管理程序虛擬化程序可以替代地在所有操作系統(tǒng)“之下”運(yùn)行,包括“根分區(qū)”。虛擬化程序180 虛擬化來賓硬件體系結(jié)構(gòu)178(示為虛線,以示出此組件是“分區(qū)”或“虛擬機(jī)”這一事實(shí)), 即,并非實(shí)際存在而是替代地由虛擬化程序180虛擬化的硬件。來賓操作系統(tǒng)176在來賓硬件體系結(jié)構(gòu)178上執(zhí)行,而軟件應(yīng)用程序174可以在來賓操作系統(tǒng)176上運(yùn)行。在圖Ib的虛擬化操作環(huán)境中,軟件應(yīng)用程序174可以在計(jì)算機(jī)系統(tǒng)中運(yùn)行,即使軟件應(yīng)用程序174 被設(shè)計(jì)成在一般與主機(jī)操作系統(tǒng)和硬件體系結(jié)構(gòu)182不兼容的操作系統(tǒng)上運(yùn)行。虛擬機(jī)通常包含整個(gè)操作系統(tǒng)和一起構(gòu)成許多進(jìn)程的一組應(yīng)用程序,這些全部在虛擬機(jī)的上下文中可以被稱為“工作負(fù)荷”或“進(jìn)程”。在本公開中,在虛擬機(jī)的上下文中, 術(shù)語“進(jìn)程”和“工作負(fù)荷”可以可互換地使用,且本領(lǐng)域技術(shù)人員可以輕松地理解,“進(jìn)程” 可以是指包括可以在虛擬機(jī)中實(shí)例化的系統(tǒng)和應(yīng)用程序中的全部的多個(gè)進(jìn)程。接下來,圖2示出了虛擬化計(jì)算系統(tǒng),包括直接地在物理計(jì)算機(jī)硬件202之上運(yùn)行的主機(jī)操作系統(tǒng)(主機(jī)0 軟件層204,其中主機(jī)OS 204通過暴露與分區(qū)A 208和B 210 的接口以分別供操作系統(tǒng)A和B、212和214使用,來提供對(duì)物理計(jì)算機(jī)硬件202的資源的訪問。這允許主機(jī)OS 204不被運(yùn)行在它上面的操作系統(tǒng)層212和214注意。再次地,為了執(zhí)行虛擬化,主機(jī)OS 204可以是帶有本機(jī)虛擬化能力的專門地設(shè)計(jì)的操作系統(tǒng),或者,可另選地,它可以是帶有用于執(zhí)行虛擬化(未示出)的結(jié)合的系統(tǒng)管理程序組件的標(biāo)準(zhǔn)操作系統(tǒng)。再次參考圖2,在主機(jī)OS 204的上面有兩個(gè)分區(qū),分區(qū)A 208 (其可以是,例如,虛擬化的Intel (英特爾)386處理器),以及分區(qū)B 210 (其可以是,例如,Motorola (摩托羅拉)680X0系列處理器中的一種處理器的虛擬化版本)。在每一分區(qū)208和210內(nèi)分別有來賓操作系統(tǒng)(來賓0S)A 212和B 214。在來賓OS A 212上方運(yùn)行的有兩個(gè)應(yīng)用程序,應(yīng)用程序Al 216和應(yīng)用程序A2 218,而在來賓OS B 214的上方運(yùn)行的有應(yīng)用程序Bl 220。對(duì)于圖2,值得注意的是,分區(qū)A 208和分區(qū)B 214(以虛線示出)是可以僅僅作為軟件結(jié)構(gòu)存在的虛擬化計(jì)算機(jī)硬件表示。由于專門虛擬化軟件的執(zhí)行,使得它們可能被實(shí)現(xiàn),專門虛擬化軟件不僅分別向來賓OS A 212和來賓OS B 214呈現(xiàn)分區(qū)A 208和分區(qū) B 210,而且還執(zhí)行來賓OS A 212和來賓OS B 214與真實(shí)物理計(jì)算機(jī)硬件202間接地進(jìn)行交互所需的所有軟件步驟。圖3示出了替換的虛擬化計(jì)算系統(tǒng),其中由與主機(jī)操作系統(tǒng)204" —起運(yùn)行的虛擬機(jī)監(jiān)視器(VMM) 204'執(zhí)行虛擬化。在某些情況下,VMM 204'可以是在主機(jī)操作系統(tǒng) 204"上面運(yùn)行的并只通過主機(jī)操作系統(tǒng)204"與計(jì)算機(jī)硬件202進(jìn)行交互的應(yīng)用程序。在其他情況下,如圖3所示,VMM 204'可以替代地包括部分獨(dú)立的軟件系統(tǒng),該軟件系統(tǒng)在某些級(jí)別經(jīng)由主機(jī)操作系統(tǒng)204"與計(jì)算機(jī)硬件202間接地進(jìn)行交互,但是,在其他級(jí)別, VMM204'與計(jì)算機(jī)硬件202直接進(jìn)行交互(類似于主機(jī)操作系統(tǒng)與計(jì)算機(jī)硬件直接進(jìn)行交互的方式)。而在其他情況下,VMM 204'可以包括完全獨(dú)立的軟件系統(tǒng),該軟件系統(tǒng)在所有級(jí)別都與計(jì)算機(jī)硬件202直接進(jìn)行交互(類似于主機(jī)操作系統(tǒng)與計(jì)算機(jī)硬件直接進(jìn)行交互的方式),而無需使用主機(jī)操作系統(tǒng)204"(雖然仍與主機(jī)操作系統(tǒng)204"進(jìn)行交互以便協(xié)調(diào)計(jì)算機(jī)硬件202的使用并避免沖突等等)。圖4描繪了示出了與PCI設(shè)備相關(guān)的IO空間和匪IO的示例性系統(tǒng)圖。該示圖包括系統(tǒng)總線400、物理存儲(chǔ)器410、處理器420、帶有寄存器460的PCI設(shè)備430,以及主機(jī)-PCI 橋設(shè)備440。附連到主機(jī)-PCI橋設(shè)備440的是PCI總線450,而附連到PCI總線是PCI設(shè)備430。PCI設(shè)備430在存儲(chǔ)器位置包含必須從系統(tǒng)處理器讀取和寫入以便控制設(shè)備的至少一個(gè)寄存器460??梢钥闯觯锢泶鎯?chǔ)器地址空間可以不同于可以是單獨(dú)地址空間的IO 端口空間。可以將IO資源轉(zhuǎn)換成匪IO資源,這是為什么可以經(jīng)由存儲(chǔ)器映射的IO端口訪問來映射IO端口地址空間的一個(gè)原因。參考圖5,所示是示出了 RAM可以駐留在其中的地址空間500的示圖。如圖所示, 存儲(chǔ)器映射的輸入/輸出(MMIO)區(qū)域510也可以駐留在同一個(gè)地址空間。典型的現(xiàn)代的基于地址空間的硬件控制接口駐留在此地址空間的MMIO部分。系統(tǒng)物理地址空間一般是指物理計(jì)算機(jī)系統(tǒng)的物理地址空間500,同樣“來賓物理地址空間”也是指虛擬計(jì)算機(jī)系統(tǒng)的“物理”地址空間500。物理存儲(chǔ)器地址空間500通常與IO端口空間分開。單獨(dú)的IO端口空間可以被用來控制較舊的設(shè)備,且還可以被用來設(shè)置和配置較新的設(shè)備,因?yàn)镻CI配置空間通常經(jīng)由IO端口空間被訪問。此外,IO端口空間地址通常是16比特,而并非32比特或64比特。用于實(shí)現(xiàn)上文所提及的分區(qū)的所有這些方案只是示例性實(shí)現(xiàn),且此處沒有任何東西應(yīng)該解釋為將本公開限制為任何特定虛擬化方面。配置空間虛擬化大多數(shù)輸入/輸出(I/O)設(shè)備都是在存在配置系統(tǒng)中的所有I/O設(shè)備的一塊可信軟件的假設(shè)下被設(shè)計(jì)的。通常還假設(shè),那些I/O設(shè)備最終由設(shè)備驅(qū)動(dòng)程序控制,設(shè)備驅(qū)動(dòng)程序是抽象化單個(gè)設(shè)備差異的插件模塊。此外,還假設(shè)這些驅(qū)動(dòng)程序都被包含在單個(gè)內(nèi)核內(nèi)。然而,在虛擬機(jī)的上下文中,上面的假設(shè)可能不再有效。每一虛擬機(jī)通常都包含其自己的操作系統(tǒng)內(nèi)核,操作系統(tǒng)內(nèi)核可以被或可以不被在所有其他虛擬機(jī)中運(yùn)行的所有其他內(nèi)核信任。配置和控制機(jī)器內(nèi)的設(shè)備通常涉及具有實(shí)施關(guān)于來自一個(gè)虛擬機(jī)的動(dòng)作如何可以影響其他虛擬機(jī)的策略的能力的某一中央機(jī)構(gòu)。在某些系統(tǒng)中,此中央機(jī)構(gòu)位于主機(jī)操作系統(tǒng)中。在其他系統(tǒng)中,機(jī)構(gòu)可以位于系統(tǒng)管理程序中,在其他系統(tǒng)中,機(jī)構(gòu)可以與在系統(tǒng)管理程序的上方運(yùn)行的虛擬機(jī)中的一個(gè)在一起。當(dāng)構(gòu)建虛擬化系統(tǒng)時(shí),一種方法可以是維護(hù)對(duì)上文所描述的中央機(jī)構(gòu)內(nèi)所有I/O 設(shè)備的完全控制。如此,當(dāng)虛擬機(jī)需要I/O服務(wù)時(shí),虛擬機(jī)可以向控制I/O的中央機(jī)構(gòu)傳遞請(qǐng)求(直接或間接地)。此方法是可以接受的,但是遭受兩個(gè)問題。首先,與在物理硬件上運(yùn)行的操作系統(tǒng)而并非虛擬機(jī)相比,I/O操作得比它應(yīng)該的慢。其次,向虛擬機(jī)表達(dá)的I/O 設(shè)備的范圍可能受到虛擬化軟件的限制。需要將在物理計(jì)算機(jī)內(nèi)的每一個(gè)設(shè)備指派到在其內(nèi)運(yùn)行的虛擬機(jī)中的一個(gè)或多個(gè)。以此方式,I/O將不會(huì)遭受與間接相關(guān)聯(lián)的性能損失。此外,可以被插入到計(jì)算機(jī)中的任何設(shè)備都可以被虛擬機(jī)使用,而不要求虛擬化層完全理解其內(nèi)部功能。例如,如果將網(wǎng)絡(luò)接口控制器(NIC)插入到物理機(jī)器中,則假設(shè)虛擬化軟件可以控制并操縱NIC可能是合理的。NIC是常見的,且NIC廠商可能希望既為流行的操作系統(tǒng)又為虛擬化系統(tǒng)提供設(shè)備驅(qū)動(dòng)程序軟件。另一方面,如果將比較深?yuàn)W的設(shè)備插入到計(jì)算機(jī)中, 將不可能有對(duì)應(yīng)的虛擬化軟件可用。如此,需要允許虛擬機(jī)具有對(duì)設(shè)備的直接訪問,甚至無需對(duì)虛擬機(jī)將如何使用設(shè)備的任何理解。令人遺憾的是,對(duì)深?yuàn)W的設(shè)備的配置和設(shè)置可以具有可能影響其他虛擬機(jī)的功能的系統(tǒng)范圍的結(jié)果。例如,打開設(shè)備可能導(dǎo)致浪涌電流峰值,如果該浪涌與另一浪涌峰同時(shí)發(fā)生,則該浪涌電流峰值可能導(dǎo)致整個(gè)計(jì)算機(jī)變暗。在另一示例中,配置設(shè)備可能涉及指令該設(shè)備聲明可能被其他設(shè)備或主存儲(chǔ)器占據(jù)的存儲(chǔ)器地址空間范圍。作為最后一個(gè)示例,設(shè)備可以與許多其他設(shè)備封裝在一芯片中。就外圍組件互連(PCI)規(guī)范而言,這樣的設(shè)
8備稱為“功能”,且芯片稱為“封裝”。封裝可以具有到總線的一個(gè)連接(或在快速PCI (PCI Express)的情況下,到結(jié)構(gòu)的連接),且封裝內(nèi)的每一功能都可以共享與連接到系統(tǒng)的其余部分相關(guān)聯(lián)的一些硬件。在此情況下,配置最低編號(hào)的功能(#0)在較高編號(hào)的功能的操作中常??赡芫哂锌梢姷母弊饔?。如果功能0在虛擬機(jī)的控制之下,則同一封裝中的其他功能會(huì)受到在該虛擬機(jī)中作出的選擇的影響。這會(huì)導(dǎo)致其他虛擬機(jī)從在其他機(jī)器的控制之下的功能接收不到服務(wù)或接收到較差的服務(wù)。在此處所公開的各實(shí)施例中,可以通過創(chuàng)建對(duì)設(shè)備的描述來限制與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)的行為,該對(duì)設(shè)備的描述向特權(quán)機(jī)構(gòu)(例如,虛擬化系統(tǒng)的系統(tǒng)管理程序或其他特權(quán)方面)指示(1)對(duì)設(shè)備的哪些操作可能具有系統(tǒng)范圍的影響,以及(2)哪些操作具有設(shè)備本地的影響。非特權(quán)虛擬機(jī)是指對(duì)系統(tǒng)或設(shè)備不擁有系統(tǒng)范圍的策略的虛擬機(jī)。換言之,非特權(quán)虛擬機(jī)不是系統(tǒng)管理程序或父/根/主機(jī)OS。特權(quán)機(jī)構(gòu)隨后可以準(zhǔn)許或拒絕這些動(dòng)作。特權(quán)機(jī)構(gòu)也可以將這些動(dòng)作轉(zhuǎn)換為具有良性結(jié)果的其他動(dòng)作。盡管可以通過將設(shè)備的驅(qū)動(dòng)程序加載到特權(quán)機(jī)構(gòu)的上下文中來實(shí)現(xiàn)上面方法中的一些,但是,由于在特權(quán)機(jī)構(gòu)中要求附加代碼,因此這樣的方法通常不是合需的。最小化特權(quán)機(jī)構(gòu)內(nèi)的代碼量對(duì)于使虛擬化系統(tǒng)既安全又高效而言常常是重要的。此外,當(dāng)允許整個(gè)PCI功能(并非例如僅僅設(shè)備的一個(gè)子集)處于非特權(quán)虛擬機(jī)的控制之下時(shí),特權(quán)機(jī)構(gòu)內(nèi)可能不存在用于將設(shè)備的資源子分配到許多虛擬機(jī)的任何代碼。當(dāng)在許多虛擬機(jī)之間共享設(shè)備時(shí),此子分配過程是常見的。相比之下,本公開描述了用于將整個(gè)分立的設(shè)備置于虛擬機(jī)的控制之下的方法。在一個(gè)實(shí)施例中,每一 PCI (或PCI-X,或快速PCI (PCI-Express))設(shè)備都可以實(shí)現(xiàn)兩個(gè)或三個(gè)地址空間。第一地址空間可以被描述為存儲(chǔ)器映射的I/O空間,并可以類似于 RAM尋址地進(jìn)行表現(xiàn)。對(duì)設(shè)備的讀和寫可以像對(duì)RAM讀和寫那樣地執(zhí)行,但是使用不同的地址。參考圖5,RAM地址空間520可以,例如,占據(jù)開頭2GB的存儲(chǔ)器地址空間,且I/O設(shè)備占據(jù)3GB (地址3221225472)和4GB (地址4294967296)之間的地址空間510。MMIO地址空間可以用于通過設(shè)備驅(qū)動(dòng)程序與設(shè)備進(jìn)行即時(shí)即地的交互。對(duì)MMIO地址空間的訪問通常比較快,并且通常由設(shè)備的設(shè)備驅(qū)動(dòng)程序(通常是由設(shè)備廠商所提供的)執(zhí)行。當(dāng)設(shè)備被關(guān)閉時(shí),設(shè)備通常不對(duì)任何MMIO空間進(jìn)行解碼??梢詫?shí)現(xiàn)的第二地址空間是由PCI設(shè)備實(shí)現(xiàn)的配置空間。此配置空間可以利用用于配置設(shè)備的機(jī)構(gòu)(例如,寄存器)來填充。這樣的機(jī)構(gòu)可包括打開與關(guān)閉設(shè)備,指派資源等等。無論設(shè)備被打開或關(guān)閉,配置空間通常都被解碼。PCI規(guī)范標(biāo)識(shí)此空間內(nèi)的一些寄存器的行為。寄存器允許通用的配置軟件塊(不是由設(shè)備廠商所提供的)配置設(shè)備,將資源指派到設(shè)備(諸如指派的MMIO空間地址范圍),并打開設(shè)備。配置空間可以并通常包含設(shè)備特定的寄存器,而無需由PCI規(guī)范所定義的含義。這樣的寄存器通??梢灾挥稍O(shè)備的設(shè)備驅(qū)動(dòng)程序來操縱。最后,可以通過在稱為“能力結(jié)構(gòu)”的配置空間中定義新范圍,來向PCI 規(guī)范添加新特征。PCI設(shè)備可以使用的第三地址空間稱為“I/O”空間,且大部分是歷史的。一般而言,I/O空間具有匪IO空間的屬性。諸如系統(tǒng)管理程序之類的特權(quán)機(jī)構(gòu)或其他虛擬化中介可能需要決定配置空間的哪些部分可以被置于非特權(quán)虛擬機(jī)的控制之下。在下面所公開的實(shí)施例中,系統(tǒng)管理程序?qū)⒈幻枋鰹樘貦?quán)機(jī)構(gòu)。然而,對(duì)本領(lǐng)域技術(shù)人員顯而易見的是,可以結(jié)合任何其他虛擬化中介來實(shí)現(xiàn)所公開的實(shí)施例。系統(tǒng)管理程序還可以進(jìn)一步嘗試包含非特權(quán)虛擬機(jī)可以訪問的MMIO和I/O空間的部分。在各實(shí)施例中,本公開描述了用于包含非特權(quán)虛擬機(jī)的行為的方法。在一實(shí)施例中,對(duì)于每一個(gè)設(shè)備,可以構(gòu)建配置空間的圖,其中該圖內(nèi)的每一比特都具有下面屬性中的一個(gè)或多個(gè)i.只讀。ii.讀取時(shí)始終為 0(always-0 on read)。iii.讀取時(shí)始終為 l(always-l on read)。iv.讀寫。v.寫入 1 清除(write of 1 clears),寫入 0 保留(write of 0 leaves alone)。vi.寫入 1 設(shè)置(write of 1 sets),寫入 0 保留(write of 0 leaves alone)。vii.寫入 0 清除(write of 0 clears),寫入 1 保留(write of 1 leaves alone)。viii.寫入 0 設(shè)置(write of 0 sets),寫入 1 保留(write of 1 leaves alone)。ix.首次讀取之后清零。χ.首次讀取之后設(shè)為1。上面的行為是示例性的,且可以包括附加行為來限制對(duì)存儲(chǔ)器位置允許的動(dòng)作。 也可以在諸如字節(jié)之類的較高粒度級(jí)別或諸如頁(yè)之類的較大存儲(chǔ)器段上將行為映射到存儲(chǔ)器位置??梢詷?gòu)建匪10空間的圖,其中可以將每一頁(yè)映射到虛擬機(jī),或不映射到虛擬機(jī)。 可以利用頁(yè)粒度而并非利用比特粒度來構(gòu)建圖。如果使用比特粒度,則可以潛在地有很多比特的MMIO空間,結(jié)果是,圖可能會(huì)變得過分大。此外,處理器還通常給予系統(tǒng)管理程序只以頁(yè)粒度截取的能力,由此構(gòu)建比特級(jí)別的圖將暗示系統(tǒng)管理程序必須截取每一匪10操作并應(yīng)用由圖暗示的適當(dāng)過濾器。這樣的對(duì)設(shè)備的操作的恒定干擾很可能對(duì)設(shè)備操作具有負(fù)面的影響。某些設(shè)備可以再次將寄存器從它們的配置空間中映射到它們的1/0或MMIO空間。 這可被進(jìn)行,因?yàn)閷?duì)配置空間的訪問通常比較慢且在配置設(shè)備之前提供對(duì)寄存器的訪問是方便的,在這樣的情況下,映射應(yīng)該在配置空間中。對(duì)寄存器的訪問也應(yīng)該以后在運(yùn)行時(shí)通過到寄存器的輕便路徑來提供,在這樣的情況下,映射也應(yīng)該在存儲(chǔ)器空間中。因此,MMIO 空間的頁(yè)的行為之一是,頁(yè)可被配置成配置空間的別名,其中對(duì)頁(yè)的任何訪問應(yīng)該被俘獲, 并被重定向到處理配置空間的代碼。除以此方式映射整個(gè)頁(yè)之外,頁(yè)內(nèi)的個(gè)體比特可以被標(biāo)記為配置空間內(nèi)的特定比特的別名。對(duì)于從虛擬機(jī)的圖中排除的頁(yè),系統(tǒng)管理程序可以選擇用看起來像設(shè)備的靜態(tài)圖像填充排除的頁(yè)。替換地,系統(tǒng)管理程序可以選擇接收截取,并使用帶有應(yīng)用于這些特定頁(yè)面的圖的配置空間來處理截取。換言之,MMIO空間的圖可以具有兩個(gè)級(jí)別。一個(gè)級(jí)別可以對(duì)于設(shè)備MMIO空間中被映射到虛擬機(jī)的頁(yè)的列表。第二層圖可以任選地定義被排除的頁(yè)內(nèi)的比特??梢詫⒃O(shè)備的1/0空間當(dāng)作配置空間。替換地,可以從虛擬機(jī)中排除1/0空間。如上文所討論的,各種所公開的實(shí)施例可以允許諸如系統(tǒng)管理程序之類的機(jī)構(gòu)安全地約束它不對(duì)其使用設(shè)備驅(qū)動(dòng)程序的設(shè)備。因此,系統(tǒng)管理程序沒有信息用來填充這樣的圖是可能的。因此,需要從設(shè)備廠商獲取此信息的方式。在一個(gè)實(shí)施例中,可以創(chuàng)建可被嵌入在驅(qū)動(dòng)程序安裝文件中的圖的表示。在一個(gè)實(shí)施例中,驅(qū)動(dòng)程序安裝文件可以稱為 INF。INF可以被包含在驅(qū)動(dòng)程序安裝包內(nèi)。INF還可以進(jìn)一步由產(chǎn)生包的實(shí)體進(jìn)行數(shù)字簽名。因此,機(jī)器管理員可以決定允許系統(tǒng)管理程序來處理由設(shè)備制造商提供的INF,無需實(shí)際安裝設(shè)備的驅(qū)動(dòng)程序。然后,可以在虛擬機(jī)中安裝驅(qū)動(dòng)程序,且設(shè)備可以在虛擬機(jī)中運(yùn)轉(zhuǎn)并受約束,以便驅(qū)動(dòng)程序不影響其他虛擬機(jī)或系統(tǒng)管理程序本身。目前所公開的各方面可被實(shí)現(xiàn)為系統(tǒng)、方法,駐留在計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)可執(zhí)行指令等等。如此,對(duì)任何特定系統(tǒng)、方法或計(jì)算機(jī)可讀介質(zhì)的任何公開不限于此,而是可延及實(shí)現(xiàn)所公開的主題的其他方式。圖6到8描繪了用于管理虛擬機(jī)和I/O設(shè)備之間的通信的操作過程的示例。過程可包括操作600、602、604、605和606。參考圖6,操作600開始操作過程,且在操作602中, 可以對(duì)I/O設(shè)備構(gòu)建配置空間的表示,指示可以由虛擬機(jī)對(duì)I/O設(shè)備執(zhí)行的動(dòng)作。此配置空間可以使用用于配置設(shè)備的機(jī)構(gòu)(例如,寄存器)來填充??梢詷?gòu)建存儲(chǔ)器映射的I/O空間的表示603,其中存儲(chǔ)器映射的I/O空間的每一頁(yè)被映射到虛擬機(jī)或被從虛擬機(jī)中排除。操作604示出了根據(jù)所述配置空間的表示和所述存儲(chǔ)器映射的I/O空間的表示來控制對(duì)所述 I/O設(shè)備的訪問。操作605示出了所述構(gòu)建配置空間的表示還包括將所述配置空間的表示內(nèi)的每一比特與至少一個(gè)讀和寫操作進(jìn)行關(guān)聯(lián)。操作606示出了對(duì)于從所述配置空間的表示中排除的任何存儲(chǔ)器或?qū)τ趶乃龃鎯?chǔ)器映射的I/O空間的表示中排除的任何存儲(chǔ)器, 用表示所述I/O設(shè)備的數(shù)據(jù)填充所述任何存儲(chǔ)器。例如,對(duì)于從虛擬機(jī)的圖中排除的頁(yè),系統(tǒng)管理程序可以選擇用看起來像設(shè)備的靜態(tài)圖像填充排除的頁(yè)。參考圖7,操作706示出了讀和寫操作包括只讀708、讀取時(shí)始終為0710、讀取時(shí)始終為1712、讀寫714、寫入1清除/寫入0保留716、寫入1設(shè)置/寫入0保留718、寫入 0清除/寫入1保留720、寫入0設(shè)置/寫入1保留722、首次讀取之后清零724,或首次讀取之后設(shè)為17沈。參考圖8,操作802示出了為被排除的存儲(chǔ)器在頁(yè)內(nèi)定義比特。操作804示出了接收截取,并使用帶有定義的比特的頁(yè)來處理截取。例如,系統(tǒng)管理程序可以選擇接收截取, 并使用帶有應(yīng)用于這些特定頁(yè)面的圖的配置空間來處理截取。在一個(gè)實(shí)施例806中,可以接收用于構(gòu)建所述圖的信息,其中在由所述I/O設(shè)備的廠商提供的文件中接收所述信息。 在另一實(shí)施例中,由所述廠商對(duì)文件進(jìn)行數(shù)字簽名808。操作810示出了根據(jù)從廠商接收到的信息來構(gòu)建表示??梢杂商摂M化層813使用帶有定義的比特的頁(yè)來執(zhí)行管理??梢栽谔摂M機(jī)中安裝驅(qū)動(dòng)程序,且設(shè)備可以在虛擬機(jī)中運(yùn)轉(zhuǎn)并受約束,以便驅(qū)動(dòng)程序不影響其他虛擬機(jī)或系統(tǒng)管理程序本身。在操作814中,構(gòu)建I/O空間的表示。操作815示出了基于接收到的信息來填充 I/O空間的表示。操作825示出了根據(jù)I/O空間的表示來控制對(duì)所述I/O設(shè)備的訪問。操作830示出了基于接收到的信息來填充所述配置空間的圖和所述存儲(chǔ)器映射的I/O空間的圖。在操作835中,可以從虛擬機(jī)排除I/O空間。圖9描繪了用于管理虛擬機(jī)和設(shè)備之間的通信的示例性操作過程,包括操作900、
11902、904、906、908、910、912,以及914。參考圖9,操作900開始操作過程,而操作902示出
了接收設(shè)備的描述,該描述包括關(guān)于包括對(duì)設(shè)備的哪些操作具有系統(tǒng)范圍的影響以及哪些操作具有設(shè)備本地的影響的信息。操作904示出了創(chuàng)建描述的表示。操作906示出了將該表示嵌入在設(shè)備的驅(qū)動(dòng)程序的安裝文件中,其中該表示允許構(gòu)建設(shè)備的配置空間的圖和存儲(chǔ)器映射的I/O空間的圖,其中配置空間的圖和存儲(chǔ)器映射的I/O空間的圖可以被用來訪問該設(shè)備。操作908示出了所述圖或與配置空間的圖和存儲(chǔ)器映射的I/O空間的圖相關(guān)聯(lián)的頁(yè)內(nèi)的每一比特包括下列屬性中的至少一個(gè)只讀910、讀取時(shí)始終為0912、讀取時(shí)始終為 1914、讀寫916、寫入1清除/寫入0保留918、寫入1設(shè)置/寫入0保留920、寫入0清除/ 寫入1保留922、寫入0設(shè)置/寫入1保留924、首次讀取之后清零926,或首次讀取之后設(shè)為1擬8。操作930示出了安裝文件是INF,而操作932示出了對(duì)INF進(jìn)行數(shù)字簽名。上文所提及的方面中的任何一個(gè)方面都可以以方法、系統(tǒng)、計(jì)算機(jī)可讀介質(zhì)或任何類型的產(chǎn)品來實(shí)現(xiàn)。例如,根據(jù)圖10,計(jì)算機(jī)可讀介質(zhì)可以存儲(chǔ)用于控制對(duì)PCI、PCI-X 或快速PCI設(shè)備的訪問的計(jì)算機(jī)可執(zhí)行指令,其中設(shè)備通信地耦合到主存虛擬機(jī)的物理機(jī)器。這樣的介質(zhì)可以包括用于接收設(shè)備的安裝文件的第一指令子集1010,其中安裝文件包括關(guān)于對(duì)設(shè)備的哪些操作具有系統(tǒng)范圍的影響以及哪些操作具有設(shè)備本地的影響的信息; 用于構(gòu)建設(shè)備的配置空間、存儲(chǔ)器映射的I/O空間以及I/O空間的的屬性的至少一個(gè)圖的第二指令子集1012,其中與至少一個(gè)圖相關(guān)聯(lián)的每一頁(yè)或每一比特被映射到虛擬機(jī)且其中靜態(tài)比特頁(yè)可以作為設(shè)備的狀態(tài)存在于虛擬機(jī)中;用于基于所述接收到的安裝文件來填充至少一個(gè)圖的第三指令子集1014;以及用于使用至少一個(gè)圖來管理對(duì)設(shè)備的訪問的第四指令集1016。本領(lǐng)域技術(shù)人員可以理解,可以使用附加指令集來捕捉此處所公開的各其他方面,且根據(jù)本發(fā)明,三個(gè)目前所公開的指令子集可以在細(xì)節(jié)方面不同。例如,指令還可以包括指令1020,其中所述圖或與至少一個(gè)圖相關(guān)聯(lián)的頁(yè)內(nèi)的每一比特包含下列屬性中的一個(gè)讀取時(shí)始終為0、讀取時(shí)始終為1、讀寫、寫入1清除/寫入 0保留、寫入1設(shè)置/寫入0保留、寫入0清除/寫入1保留、寫入0設(shè)置/寫入1保留、首次讀取之后清零,或首次讀取之后設(shè)為1。再次地,作為示例,指令還可以包括用于執(zhí)行以下操作的指令對(duì)于從配置空間的圖中排除的任何存儲(chǔ)器或?qū)τ趶拇鎯?chǔ)器映射的I/O空間的圖中排除的任何存儲(chǔ)器,用預(yù)定數(shù)據(jù)填充所述任何存儲(chǔ)器1021 ;該預(yù)定數(shù)據(jù)對(duì)應(yīng)于預(yù)定設(shè)備1022 ;定義被排除的存儲(chǔ)器的頁(yè)內(nèi)的比特1023 ;接收截取并使用帶有定義的比特的頁(yè)來處理截取IOM ;以及安裝文件是由設(shè)備的廠商提供的INF,并且可以任選地被數(shù)字簽名1(^6。如上文所描述的,本發(fā)明的各方面可以在編程計(jì)算機(jī)上執(zhí)行。圖Ic以及下面的討論旨在提供其中可以實(shí)現(xiàn)那些方面的合適的計(jì)算環(huán)境的簡(jiǎn)要說明。本領(lǐng)域技術(shù)人員可以理解,在某些實(shí)施例中,圖Ic的計(jì)算機(jī)系統(tǒng)可以實(shí)現(xiàn)圖Ia和Ib的各個(gè)方面。在這些示例實(shí)施例中,服務(wù)器和客戶機(jī)可包括圖Ic中所描述的某些或全部組件,且在某些實(shí)施例中,服務(wù)器和客戶機(jī)可以各自包括被配置成實(shí)例化本發(fā)明的特定方面的電路。在本公開中通篇使用的術(shù)語“電路”可包括專門硬件組件。在相同實(shí)施例或其他實(shí)施例中,電路可包括被配置成通過固件或開關(guān)執(zhí)行功能的微處理器。在相同或其他示例實(shí)施例中,電路可包括一個(gè)或多個(gè)通用處理單元和/或多核處理單元等等,當(dāng)體現(xiàn)可操作以執(zhí)行功能的邏輯的軟件指令被加載到存儲(chǔ)器,例如,RAM和/或虛擬存儲(chǔ)器中時(shí),這些處理單元可以被配置。在其中電路包括硬件和軟件的組合的示例實(shí)施例中,實(shí)施者可以編寫體現(xiàn)邏輯的源代碼,且源代碼可以被編譯為可以由通用處理單元處理的機(jī)器可讀代碼。圖Ic描繪了根據(jù)本發(fā)明的各方面配置的計(jì)算系統(tǒng)的示例。計(jì)算系統(tǒng)可包括計(jì)算機(jī)20等等,其中包括處理單元21、系統(tǒng)存儲(chǔ)器22,以及將包括系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合到處理單元21的系統(tǒng)總線23。系統(tǒng)總線23可以是若干類型的總線結(jié)構(gòu)中的任一種,包括使用各種總線體系結(jié)構(gòu)中的任一種的存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線,以及局部總線。系統(tǒng)存儲(chǔ)器包括只讀存儲(chǔ)器(ROM) M和隨機(jī)存取存儲(chǔ)器(RAM) 25?;据斎?/輸出系統(tǒng)26 (BIOS)被存儲(chǔ)在ROM M中,包含了諸如在啟動(dòng)期間幫助在計(jì)算機(jī)20內(nèi)的元件之間傳輸信息的基本例程。計(jì)算機(jī)20還可以包括用于讀寫硬盤(未示出)的硬盤驅(qū)動(dòng)器27、用于讀寫可移動(dòng)磁盤四的磁盤驅(qū)動(dòng)器28,以及用于讀寫諸如CD ROM或其他光學(xué)介質(zhì)之類的可移動(dòng)光盤31的光盤驅(qū)動(dòng)器30。在某些示例實(shí)施例中,體現(xiàn)本發(fā)明的各方面的計(jì)算機(jī)可執(zhí)行指令可以存儲(chǔ)在ROM 24、硬盤(未示出)、RAM 25、可移動(dòng)磁盤四、光盤31,和/ 或處理單元21的高速緩存中。硬盤驅(qū)動(dòng)器27、磁盤驅(qū)動(dòng)器28,以及光驅(qū)動(dòng)器30分別通過硬盤驅(qū)動(dòng)器接口 32、磁盤驅(qū)動(dòng)器接口 33,以及光驅(qū)動(dòng)器接口 34連接到系統(tǒng)總線23。驅(qū)動(dòng)器以及它們相關(guān)聯(lián)的計(jì)算機(jī)可讀介質(zhì)為計(jì)算機(jī)20提供了對(duì)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊,及其他數(shù)據(jù)的非易失性存儲(chǔ)。雖然此處所描述的環(huán)境使用了硬盤、可移動(dòng)磁盤四、以及可移動(dòng)光盤31,但是,那些本領(lǐng)域普通技術(shù)人員應(yīng)該理解,在操作環(huán)境中也可以使用諸如盒式磁帶、閃存卡、數(shù)字視頻盤、伯努利磁帶盒、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM) 等等之類的可以存儲(chǔ)可由計(jì)算機(jī)進(jìn)行訪問的數(shù)據(jù)的其他類型的計(jì)算機(jī)可讀介質(zhì)??梢杂腥舾蓚€(gè)程序模塊存儲(chǔ)在硬盤、磁盤四、光盤31、ROM 24,和/或RAM 25上, 包括操作系統(tǒng)35、一個(gè)或多個(gè)應(yīng)用程序36、其他程序模塊37、以及程序數(shù)據(jù)38。用戶可以通過諸如鍵盤40和定點(diǎn)設(shè)備42之類的輸入設(shè)備向計(jì)算機(jī)20中輸入命令和信息。其他輸入設(shè)備(未示出)可以包括麥克風(fēng)、游戲桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等等。這些及其他輸入設(shè)備常常通過耦合到系統(tǒng)總線的串行端口接口 46連接到處理單元21,但是,也可以通過其他接口,如并行端口、游戲端口、通用串行總線(USB)端口、來進(jìn)行連接。顯示器 47或其他類型的顯示設(shè)備也可以通過諸如視頻適配器48之類的接口,連接到系統(tǒng)總線23。 除了顯示器47之外,計(jì)算機(jī)通常還包括其他外圍輸出設(shè)備(未示出),如揚(yáng)聲器和打印機(jī)。 圖1的系統(tǒng)也包括主機(jī)適配器55、小型計(jì)算機(jī)系統(tǒng)接口(SCSI)總線56,以及連接到SCSI 總線56的外部存儲(chǔ)裝置62。計(jì)算機(jī)20可以使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)(如遠(yuǎn)程計(jì)算機(jī)49)的邏輯連接來在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)49可以是另一計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其他公共網(wǎng)絡(luò)節(jié)點(diǎn),并且通??砂ㄉ衔膮⒖加?jì)算機(jī)20所描述的許多或全部元件,雖然在圖Ic中只示出了存儲(chǔ)設(shè)備50。圖1中所描繪的邏輯連接可包括局域網(wǎng)(LAN) 51和廣域網(wǎng)(WAN)52。這樣的聯(lián)網(wǎng)環(huán)境在辦公室、企業(yè)范圍的計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)部網(wǎng)和因特網(wǎng)中是普遍現(xiàn)象。當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境中時(shí),計(jì)算機(jī)20可通過網(wǎng)絡(luò)接口或適配器53連接到LAN 51。 當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境中時(shí),計(jì)算機(jī)20通常包括調(diào)制解調(diào)器M,或用于通過廣域網(wǎng)52(如通過因特網(wǎng))建立通信的其他裝置。調(diào)制解調(diào)器54——其可以是內(nèi)置的或外置的,可通過串行端口接口 46連接到系統(tǒng)總線23。在聯(lián)網(wǎng)環(huán)境中,參考計(jì)算機(jī)20所描述的程序模塊,或其某些部分,可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中??梢岳斫?,所示出的網(wǎng)絡(luò)連接只是示例,也可以使用用于在計(jì)算機(jī)之間建立通信鏈路的其他裝置。此外,盡管可以預(yù)想本發(fā)明的很多實(shí)施例特別適合于計(jì)算機(jī)系統(tǒng),但是,本文中沒有任何表述旨在將本公開限制于這樣的實(shí)施例。前述的詳細(xì)描述通過示例和/或操作圖闡述了系統(tǒng)和/或進(jìn)程的各實(shí)施例。在這樣的框圖和/或示例包含一個(gè)或多個(gè)功能和/或操作的范圍內(nèi),本領(lǐng)域技術(shù)人員將理解,這樣的框圖,或示例內(nèi)的每一功能和/或操作可以分別地和/或共同地通過范圍廣泛的硬件、 軟件、固件或幾乎其任何組合來實(shí)現(xiàn)。最后,盡管是結(jié)合如各種圖形所示的優(yōu)選方面來描述本公開的,但是,應(yīng)該理解, 可以使用其他類似的方面,或可以對(duì)所描述的各方面進(jìn)行修改和添加,以便執(zhí)行本公開的相同功能,而不會(huì)產(chǎn)生偏離。例如,在本發(fā)明的各個(gè)方面,公開了用于限制與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)的行為的各種機(jī)制。然而,通過此處的示教還設(shè)想與這些所描述的方面等效的其他機(jī)制。因此,本發(fā)明不應(yīng)該僅限于任何單個(gè)方面,而是應(yīng)該在根據(jù)所附權(quán)利要求書的廣度和范圍內(nèi)解釋。
權(quán)利要求
1.一種用于管理虛擬機(jī)(120)和I/O設(shè)備(430)之間的通信的方法,包括為所述I/O設(shè)備構(gòu)建(602)配置空間的表示,指示對(duì)于所述配置空間內(nèi)的存儲(chǔ)器位置所述虛擬機(jī)可以在所述I/O設(shè)備上執(zhí)行的動(dòng)作;構(gòu)建(603)存儲(chǔ)器映射的I/O空間的表示,其中所述存儲(chǔ)器映射的I/O空間的每一頁(yè)被映射到所述虛擬機(jī)或被從所述虛擬機(jī)中排除;以及根據(jù)所述配置空間的表示和所述存儲(chǔ)器映射的I/O空間的表示,控制對(duì)所述I/O設(shè)備的訪問(604)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述構(gòu)建配置空間的表示還包括將所述配置空間的表示內(nèi)的每一比特與至少一個(gè)讀和寫操作相關(guān)聯(lián)(605)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,對(duì)于從所述配置空間的表示中排除的任何存儲(chǔ)器或?qū)τ趶乃龃鎯?chǔ)器映射的I/O空間的表示中排除的任何存儲(chǔ)器,用表示所述I/ 0設(shè)備的數(shù)據(jù)填充所述任何存儲(chǔ)器(606)。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述讀和寫操作(706)包括只讀、讀取時(shí)始終為0、讀取時(shí)始終為1、讀寫、寫入1清除/寫入0保留、寫入1設(shè)置/寫入0保留、寫入0清除/寫入1保留、寫入0設(shè)置/寫入1保留、首次讀取之后清零,以及首次讀取之后設(shè)為1。
5.如權(quán)利要求3所述的方法,其特征在于,還包括 定義所述被排除的存儲(chǔ)器的頁(yè)內(nèi)的比特(802);以及接收截取并使用帶有所述定義的比特的頁(yè)來處理截取(804)。
6.根據(jù)權(quán)利要求1所述的方法,還包括接收用于構(gòu)建所述圖的信息(806),其特征在于,所述信息是在由所述I/O設(shè)備的廠商提供的文件中接收的,且其中所述構(gòu)建配置空間的表示和所述構(gòu)建存儲(chǔ)器映射的I/O空間的表示還包括根據(jù)所述信息來構(gòu)建所述表示。
7.如權(quán)利要求6所述的方法,其特征在于,還包括 構(gòu)建I/O空間的表示(815);基于所述接收到的信息來填充所述I/O空間的表示(815);以及根據(jù)所述I/O空間的表示來控制對(duì)所述I/O設(shè)備的訪問(825)。
8.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括基于所述接收到的信息來填充所述配置空間的圖和所述存儲(chǔ)器映射的I/O空間的圖(830)。
9.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括從所述虛擬機(jī)中排除I/O空間 (835)。
10.一種適于管理虛擬機(jī)(120)和I/O設(shè)備(430)之間的通信的系統(tǒng),包括 至少一個(gè)處理器;以及通信地耦合到所述至少一個(gè)處理器的至少一個(gè)存儲(chǔ)器,所述存儲(chǔ)器存儲(chǔ)了能夠執(zhí)行以下操作的計(jì)算機(jī)可執(zhí)行指令接收所述設(shè)備的描述,所述描述包括關(guān)于對(duì)所述設(shè)備的哪些操作具有系統(tǒng)范圍的影響以及哪些操作具有所述設(shè)備本地的影響的信息(902); 創(chuàng)建所述描述的表示(904);以及在所述設(shè)備的驅(qū)動(dòng)程序的安裝文件中嵌入所述表示,其中所述表示允許構(gòu)建所述設(shè)備的配置空間的圖和存儲(chǔ)器映射的I/O空間的圖,其中所述配置空間的圖和所述存儲(chǔ)器映射的I/O空間的圖可以被用來訪問所述設(shè)備(906)。
11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述配置空間的圖內(nèi)的每一比特包括下列屬性中的至少一個(gè)(908)只讀、讀取時(shí)始終為0、讀取時(shí)始終為1、讀寫、寫入1清除/寫入0保留、寫入1設(shè)置/寫入0保留、寫入0清除/寫入1保留、寫入0設(shè)置/寫入1保留、 首次讀取之后清零,或首次讀取之后設(shè)為1。
12.—種在其上存儲(chǔ)有用于控制對(duì)PCI、PCI-X或快速PCI設(shè)備的訪問的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(1000),其中所述設(shè)備通信地耦合到主存虛擬機(jī)的物理機(jī)器, 所述計(jì)算機(jī)可執(zhí)行指令包括用于執(zhí)行以下操作的指令接收所述設(shè)備的安裝文件,其中所述安裝文件包括關(guān)于對(duì)所述設(shè)備的哪些操作具有系統(tǒng)范圍的影響以及哪些操作具有所述設(shè)備本地的影響的信息(1010);構(gòu)建所述設(shè)備的配置空間、存儲(chǔ)器映射的I/O空間以及I/O空間的屬性的至少一個(gè)圖, 其中與所述至少一個(gè)圖相關(guān)聯(lián)的每一頁(yè)或每一比特被映射到所述虛擬機(jī),其中靜態(tài)比特頁(yè)可以作為所述設(shè)備的狀態(tài)被提供到虛擬機(jī)中(1012);基于所述接收到的安裝文件來填充所述至少一個(gè)圖(1014);以及使用所述至少一個(gè)圖來管理對(duì)所述設(shè)備的訪問(1014)。
13.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,所述圖或與所述至少一個(gè)圖相關(guān)聯(lián)的頁(yè)內(nèi)的每一比特包含下列屬性中的一個(gè)(1020)只讀、讀取時(shí)始終為0、讀取時(shí)始終為1、讀寫、寫入1清除/寫入0保留、寫入1設(shè)置/寫入0保留、寫入0清除/寫入 1保留、寫入0設(shè)置/寫入1保留、首次讀取之后清零,或首次讀取之后設(shè)為1。
14.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,對(duì)于從所述配置空間的圖中排除的任何存儲(chǔ)器或?qū)τ趶乃龃鎯?chǔ)器映射的I/O空間的圖中排除的任何存儲(chǔ)器,用預(yù)定數(shù)據(jù)填充所述任何存儲(chǔ)器。
15.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括用于執(zhí)行以下操作的指令定義所述被排除的存儲(chǔ)器的頁(yè)內(nèi)的比特;以及接收截取,并使用帶有定義的比特的頁(yè)來處理截取。
全文摘要
此處公開了用于通過創(chuàng)建對(duì)設(shè)備的描述來限制與設(shè)備進(jìn)行交互的非特權(quán)虛擬機(jī)的行為的各個(gè)方面,該對(duì)設(shè)備的描述向特權(quán)機(jī)構(gòu)指示(1)對(duì)設(shè)備的哪些操作可以具有系統(tǒng)范圍的影響,以及(2)哪些操作具有設(shè)備本地的影響。特權(quán)機(jī)構(gòu)可在隨后允許或拒絕這些動(dòng)作。特權(quán)機(jī)構(gòu)也可以將這些動(dòng)作轉(zhuǎn)換為具有良性結(jié)果的其他動(dòng)作。
文檔編號(hào)G06F13/14GK102171666SQ200980139828
公開日2011年8月31日 申請(qǐng)日期2009年9月30日 優(yōu)先權(quán)日2008年10月3日
發(fā)明者A·J·桑頓, B·奧索普, J·奧辛斯 申請(qǐng)人:微軟公司