專利名稱:Vex-虛擬擴展框架的制作方法
技術領域:
本發(fā)明一般涉及故障容許擴展,尤其涉及用于為擴展提供故障隔離的虛擬環(huán)境的系統(tǒng)和方法。
背景技術:
一種用于擴展操作系統(tǒng)或應用程序的越來越普及的機制是使用可提供額外的功能并可在個別的基礎上傳送和調用的擴展。例如,現代的操作系統(tǒng)依賴于硬件制造商提供的擴展以在由硬件制造商制造的硬件組件和操作系統(tǒng)軟件之間接口。以此方式,操作系統(tǒng)作者只需提供通用硬件支持,而無需試圖支持每一可想象的硬件設備。當新硬件設備被添加到運行操作系統(tǒng)的計算系統(tǒng)上時,特別地被設計成對在新硬件設備和操作系統(tǒng)之間接口的擴展可由硬件制造商提供,并可由操作系統(tǒng)用于控制新硬件設備和向用戶提供對新硬件設備的功能的訪問。
除操作系統(tǒng)之外,許多其它軟件應用程序依賴于擴展來提供額外的功能,同時降低主機應用程序的復雜性。例如,web瀏覽器應用程序可依賴于擴展來向用戶提供解釋各種數據類型或與其交互的能力。由此,web瀏覽器只需提供處理有限數據類型的能力,如以超文本標記語言(HTML)書寫的網頁或使用聯合攝影專家組(JPEG)編碼格式編碼的圖像。需要額外的瀏覽器應用程序能力的網頁可依賴于瀏覽器應用程序的自定義擴展來提供需要的能力。例如,希望使用以很少使用的格式編碼的圖像的網頁作者可提供一擴展,它可理解該特定的圖像格式,并可與web瀏覽器接口以使web瀏覽器能夠顯示使用該格式編碼的圖像。
其它應用程序也可使用擴展來提供增加的功能。例如,圖像處理應用程序可使用由各種藝術家提供的擴展來允許用戶訪問由那些藝術家開發(fā)的許多不同的藝術圖像處理算法。因此,圖像處理程序能夠提供基本的圖像編輯特征,例如顏色和對比度控制。諸如看似將照片轉換成油畫的效果等更復雜的特征可由單獨可用的擴展來提供。以此方式,圖像處理應用程序的用戶可個別地選擇哪些擴展最適合于其需求,并可選擇僅安裝在給定那些要求時可能有用的那些擴展。
一般而言,擴展通過各種應用程序接口(API)與主機軟件應用程序交互。API定義了訪問各種特征或能力的方法。由此,當一個組件包括用于實現一特定功能的代碼和數據,并規(guī)定該功能以由API定義的方式來調用,且第二組件以由API定義的方式請求該功能時,這兩個組件被認為是通過API交互。
擴展和主機軟件應用程序之間的交互一般通過兩種類型的API發(fā)生服務API和支持API。支持API可由主機軟件應用程序、操作系統(tǒng)或可由擴展用于訪問由主機軟件應用程序提供的功能的任一其它軟件來實現。此外,支持API可被分層或堆疊,使得某些支持API可依賴于其它支持API,以執(zhí)行請求的功能。另一方面,服務API可由擴展實現,并可由主機軟件應用程序用于訪問擴展所提供的功能。作為一個示例,使web瀏覽器能夠顯示以特定格式編碼的圖像的web瀏覽器擴展可展示服務API,web瀏覽器可使用該服務API將圖像數據傳遞到擴展,并請求擴展解釋該圖像數據,而web瀏覽器可提供支持API,該支持API可提供擴展可向web瀏覽器請求的基本服務。
許多擴展,尤其是操作系統(tǒng)擴展,如那些被設計成與硬件設備接口的擴展,可依賴于多個API來適當地與硬件接口。可被添加到現代計算裝置的許多硬件設備通過由專用電路或處理單元控制的端口與計算裝置物理地接口。操作系統(tǒng)的支持API可提供一些機制,通過這些機制,專用電路可由擴展使用以使擴展能夠訪問并控制為其設計它的那些硬件設備。例如,操作系統(tǒng)可提供允許擴展訪問為硬件輸入/輸出通信留出的隨機存取存儲器的特定區(qū)域的支持API?;蛘?,操作系統(tǒng)可提供允許擴展直接訪問硬件輸入/輸出端口的支持API。
另一方面,擴展可提供服務API以允許操作系統(tǒng)或其它軟件應用程序訪問由擴展提供的功能。例如,用于新顯示設備的設備驅動程序可包括用于控制該顯示設備的代碼和數據。該顯示設備驅動程序的代碼和數據可由諸如操作系統(tǒng)代碼或軟件應用程序代碼等其它代碼以預定義的方式通過使用服務API來調用。在顯示設備驅動程序的示例中,服務API可包括用于請求圖像數據的顯示的API、用于請求諸如其當前分辨率等顯示信息的API、以及用于請求顯示的能量節(jié)省特征的激活的API。
不幸的是,由于主機軟件應用程序和擴展一般由不同的個體創(chuàng)作,擴展不能與主機應用程序正確地接口是常見的。例如,某些擴展可能無法正確地使用由主機軟件應用程序提供的支持API,從而傳遞不正確的參數、數據,或者不正確地請求各種功能。其它擴展可能試圖完全繞過支持API,并直接訪問功能而非通過主機軟件應用程序來訪問,如盤訪問、屏幕訪問等等?;蛘撸瑪U展也可試圖訪問并非供擴展使用的支持API,如未被完整證明或僅供在軟件應用程序本身內部使用的API。
不正確地與其主機軟件應用程序接口的擴展可導致整體主機軟件應用程序的故障,甚至是整個計算系統(tǒng)的故障。當主機軟件應用程序的用戶被迫同時依賴于來自多方的多個擴展時,諸如通常由現代操作系統(tǒng)使用的第三方設備驅動程序的混合,則這尤其是有問題的。此外,這類故障通常難以診斷和正確地支持,因為盡管用戶可責備主機軟件應用程序,實際上是擴展導致了這一不穩(wěn)定性。因此,期望創(chuàng)建一種擴展環(huán)境,它可向主機軟件應用程序提供對特征的訪問和擴展的能力,同時將主機軟件應用程序與可由擴展引入的不穩(wěn)定性隔離。
發(fā)明內容
本發(fā)明的實施例允許擴展在受保護的環(huán)境中執(zhí)行,從該環(huán)境中,它們可向主機軟件應用程序提供預期的好處,而同時將主機應用程序與由擴展導致的不穩(wěn)定性隔離。
在一個實施例中,擴展可在一虛擬環(huán)境中執(zhí)行,它提供了擴展可正確地需要的支持API,同時將擴展與主機軟件應用程序隔離。
在另一實施例中,擴展可在一虛擬環(huán)境中執(zhí)行,并且對應的代理擴展可以用代理擴展提供對原始擴展的能力的訪問在主機軟件應用程序的進程空間中執(zhí)行,同時通過使用虛擬環(huán)境將主機軟件應用程序與原始的擴展隔離。擴展和代理可以是類似的,以提供主機軟件應用程序和被設計成與主機軟件應用程序接口的擴展之間的故障隔離,或者擴展和代理可以是不同的,以不僅提供故障隔離,也通過使主機軟件應用程序能夠使用可能未被設計成與主機軟件應用程序接口的擴展來擴展主機軟件應用程序的功能。
在又一實施例中,通過在虛擬環(huán)境中創(chuàng)建代用主機軟件應用程序,或通過改變虛擬環(huán)境中的頁表映射使得用戶模式范圍被映射到虛擬環(huán)境和主機環(huán)境中的同一物理存儲器,需要用戶模式環(huán)境的擴展可在虛擬環(huán)境中執(zhí)行,或者作為另一替換方案,用戶模式環(huán)境可被復制到虛擬環(huán)境中。為維持故障隔離,可以只讀方式,或通過寫復制(copy-on-write)技術來訪問主機環(huán)境的物理存儲器。
在再一實施例中,通過引導具有擴展所需要的功能或功能的超集(superset),然后在需要虛擬環(huán)境的時間中隨后的一點,克隆引導的原始虛擬環(huán)境的狀態(tài)以創(chuàng)建需要的虛擬環(huán)境,可有效地創(chuàng)建其中可安全地執(zhí)行擴展的虛擬環(huán)境。
在另外一個實施例中,可在主機環(huán)境的初始啟動序列期間,通過向主機環(huán)境指示在計算系統(tǒng)上存在第二處理單元,然后在主機環(huán)境完成了第二處理單元的相干狀態(tài)的創(chuàng)建之后,向主機環(huán)境指示第二處理單元發(fā)生故障,隨后向虛擬環(huán)境指示存在第二處理單元并使用在主機環(huán)境的啟動期間創(chuàng)建的第二處理單元的相干狀態(tài)來啟動虛擬環(huán)境,可有效地創(chuàng)建其中可安全地執(zhí)行擴展的虛擬環(huán)境。
在還有一個實施例中,在主機環(huán)境的初始啟動序列期間,通過向主機環(huán)境指示在計算系統(tǒng)中存在第二處理單元,允許主機環(huán)境創(chuàng)建第二處理單元的相干狀態(tài),并允許主機環(huán)境將第二處理單元綁定到設計擴展來控制的硬件設備,可有效地創(chuàng)建其中被設計成控制硬件設備的擴展可安全地執(zhí)行的虛擬環(huán)境。在主機環(huán)境完成了第二處理單元的相干狀態(tài)的創(chuàng)建,并綁定到適當的硬件設備之后,主機環(huán)境可接收第二處理單元發(fā)生故障的指示,同時可使用在主機環(huán)境的啟動期間創(chuàng)建的第二處理單元的相干狀態(tài)來啟動虛擬環(huán)境,從而向虛擬環(huán)境以及在其中執(zhí)行的任何擴展提供了對綁定到第二處理單元的硬件設備的簡化訪問。
當參考附圖閱讀以下說明性實施例的詳細描述時,可以清楚本發(fā)明的其它特征和優(yōu)點。
盡管所附權利要求書以細節(jié)陳述了本發(fā)明的特征,然而,結合附圖閱讀以下詳細描述,可以最好地理解本發(fā)明及其目的和優(yōu)點,附圖中圖1是概括地示出了其中可實現本發(fā)明的各實施例的示例性設備體系結構的框圖;圖2是概括地示出了依照本發(fā)明的各實施例用于隔離擴展的示例性環(huán)境的框圖;圖3是概括地示出了依照本發(fā)明的一個實施例對用戶模式環(huán)境的訪問的框圖;圖4是概括地示出了依照本發(fā)明的一個實施例對用戶模式環(huán)境的另一訪問的框圖;
圖5是概括地示出了依照本發(fā)明的一個實施例的相干狀態(tài)的創(chuàng)建的流程圖;圖6是概括地示出了依照本發(fā)明的一個實施例的相干狀態(tài)的另一創(chuàng)建的流程圖;以及圖7是概括地示出了依照本發(fā)明的一個實施例用于向主宿在虛擬機器中的擴展提供對物理硬件的直接訪問的示例性環(huán)境的框圖。
具體實施例方式
許多軟件應用程序和操作系統(tǒng)依賴于擴展來向終端用戶提供額外的功能、服務或能力。一種經常使用的擴展被稱為設備驅動程序,它可提供主機軟件應用程序(一般是操作系統(tǒng))和硬件設備之間的接口。其它擴展包括用于web瀏覽器軟件應用程序的小應用程序和插件、過濾器、用于圖像編輯軟件應用程序的效果和插件、以及用于音頻/視頻軟件應用程序的編解碼器。
由于擴展與其主機軟件應用程序緊密地協同操作,因此由擴展引入的不穩(wěn)定性會使整個主機軟件應用程序變得不可使用。一般而言,擴展通過可由主機軟件應用程序使用的一個或多個應用程序接口(API)提供了對其能力的訪問。擴展通過其來展示其功能的API一般被稱為“服務API”。如果擴展需要額外的信息、資源等,則擴展可通過一般被稱為“支持API”的一個或多個API向主機軟件應用程序請求這些額外信息、資源等。萬一擴展或主機軟件應用程序不正確地使用了服務或支持API,或者試圖訪問無事實證明的或不支持的API,則任何導致的錯誤或無意識的人為因素將導致不穩(wěn)定性。由于擴展一般在與其主機軟件應用程序相同的進程內操作,因此當運行在該進程中的一個或多個擴展引入不穩(wěn)定性時,主機軟件應用程序很難繼續(xù)正確運作。
如果擴展可以在單獨的進程中執(zhí)行,使得由該擴展引入的任何不穩(wěn)定性可以被隔離到與主機軟件應用程序的進程無關的進程,則主機軟件應用程序即使在面對不穩(wěn)定的擴展時也能夠繼續(xù)正確運作。對于諸如操作系統(tǒng)等可主宿許多擴展的軟件應用程序,隔離每一擴展可很大程度上提高操作系統(tǒng)的總體可靠性,因為故障的可能性與所使用的每一附加擴展成指數地增長。此外,隔離擴展允許應用程序作者全神貫注于識別和消除其自己的算法內的不穩(wěn)定性來源。因此,本發(fā)明的實施例將擴展與其主機軟件應用程序隔離,而繼續(xù)對主機軟件應用程序提供擴展的好處。
盡管并非所需,但本發(fā)明將在諸如由計算裝置執(zhí)行的程序模塊等計算機可執(zhí)行指令的一般上下文環(huán)境中描述。一般而言,程序模塊包括例程、程序、對象、組件、數據結構等等,它們執(zhí)行特定的任務或實現特定的抽象數據類型。在分布式計算環(huán)境中,任務可由通過通信網絡連接的遠程處理設備來執(zhí)行。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程計算機存儲設備和/或介質中。本領域的技術人員可以理解,本發(fā)明可使用許多不同的計算裝置單獨地或作為分布式計算環(huán)境的一部分來實施,其中,這類設備可包括手持式設備、多處理器系統(tǒng)、基于微處理器或可編程消費者電子設備、網絡PC、小型機、大型機等等。
轉向圖1,示出了可在其中實現本發(fā)明的示例性計算裝置100。計算裝置100僅為合適的計算裝置的一個示例,并非暗示對本發(fā)明的使用范圍或功能的局限。此外,也不應將計算裝置100解釋為對圖1所示的外圍設備的任一個或其組合具有任何依賴或需求。
計算裝置100的組件可包括但不限于,處理單元120、系統(tǒng)存儲器130以及將包括系統(tǒng)存儲器的各類系統(tǒng)組件耦合至處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若干種總線結構類型的任一種,包括存儲器總線或存儲器控制器、外圍總線以及使用各類總線體系結構的局部總線。作為示例而非局限,這類體系結構包括工業(yè)標準體系結構(ISA)總線、微通道體系結構(MCA)總線、增強ISA(EISA)總線、視頻電子技術標準協會(VESA)局部總線以及外圍部件互連(PCI)總線,也稱為Mezzanine總線。此外,處理單元120可包含一個或多個物理處理器。
計算裝置100通常包括各種計算機可讀介質。計算機可讀介質可以是可由計算裝置100訪問的任一可用介質,包括易失性和非易失性介質、可移動和不可移動介質。作為示例而非局限,計算機可讀介質包括計算機存儲介質和通信介質。計算機存儲介質包括以用于儲存諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息的任一方法或技術實現的易失性和非易失性,可移動和不可移動介質。計算機存儲介質包括但不限于,RAM、ROM、EEPROM、閃存或其它存儲器技術、CD-ROM、數字多功能盤(DVD)或其它光盤存儲、磁盒、磁帶、磁盤存儲或其它磁存儲設備、或可以用來儲存所期望的信息并可由計算裝置100訪問的任一其它介質。通信介質通常表現為以諸如載波或其它傳輸機制等已調制數據信號形式的計算機可讀指令、數據結構、程序模塊或其它數據,并包括任一信息傳送介質。術語“已調制數據信號”指以對信號中的信息進行編碼的方式設置或改變其一個或多個特征的信號。作為示例而非局限,通信介質包括有線介質,如有線網絡或直接連線連接,以及無線介質,如聲學、RF、紅外和其它無線介質。上述任一的組合也應當包括在計算機可讀介質的范圍之內。
系統(tǒng)存儲器130包括易失性和/或非易失性存儲器形式的計算機存儲介質,如只讀存儲器(ROM)131和隨機存取存儲器(RAM)132?;据斎?輸出系統(tǒng)133(BIOS)包括如在啟動時幫助在計算機110內的元件之間傳輸信息的基本例程,通常儲存在ROM 131中。RAM 132通常包含處理單元120立即可訪問或者當前正在操作的數據和/或程序模塊。作為示例而非局限,圖1示出了操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數據137。
計算裝置100也可包括其它可移動/不可移動、易失性/非易失性計算機存儲介質。僅作示例,圖1示出了對不可移動、非易失性磁介質進行讀寫的硬盤驅動器141、對可移動、非易失性磁盤152進行讀寫的磁盤驅動器151以及對可移動、非易失性光盤156,如CD ROM或其它光介質進行讀寫的光盤驅動器155??梢栽谑纠圆僮鳝h(huán)境中使用的其它可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限于,磁帶盒、閃存卡、數字多功能盤、數字視頻帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅動器141通常通過不可移動存儲器接口,如接口140連接到系統(tǒng)總線121,磁盤驅動器151和光盤驅動器155通常通過可移動存儲器接口,如接口150連接到系統(tǒng)總線121。
上文討論并在圖1示出的驅動器及其關聯的計算機存儲介質為計算裝置100提供了計算機可讀指令、數據結構、程序模塊和其它數據的存儲。例如,在圖1中,示出硬盤驅動器141儲存操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147。注意,這些組件可以與操作系統(tǒng)134、應用程序135、其它程序模塊136和程序數據137相同,也可以與它們不同。這里對操作系統(tǒng)144、應用程序145、其它程序模塊146和程序數據147給予不同的標號來說明至少它們是不同的副本。
用戶可以通過輸入設備,如鍵盤162和定點設備161(通常指鼠標、跟蹤球或觸摸板)向計算裝置100輸入命令和信息。其它輸入設備(未示出)可包括麥克風、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等等。這些和其它輸入設備通常通過耦合至系統(tǒng)總線的用戶輸入接口160連接至處理單元120,或者可以通過其它接口和總線結構連接,如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器191或其它類型的顯示設備也通過接口,如視頻接口190連接至系統(tǒng)總線121。除監(jiān)視器之外,計算機也可包括其它外圍輸出設備,如揚聲器197和打印機196,它們通過輸出外圍接口195連接。
由于接口技術可隨著時間的推移而改進,某些計算裝置可包含傳統(tǒng)的接口以提供與傳統(tǒng)設備的向后兼容性。圖1的計算裝置100被示出為具有傳統(tǒng)接口198,它可以是包括串行端口、并行端口、調制解調器端口等的多種接口中的任一種。傳統(tǒng)接口198可使計算裝置100能夠與諸如傳統(tǒng)設備199等傳統(tǒng)設備進行通信,傳統(tǒng)設備199可以是打印機、掃描儀、示波器、函數發(fā)生器或任何其它類型的輸入或輸出設備。如本領域的技術人員所已知的,大多數現代輸入或輸出設備通過諸如USB端口或IEEE 1394端口等依賴于新開發(fā)的標準的接口來連接。然而,傳統(tǒng)設備可能沒有這樣的接口,因此必須依賴于傳統(tǒng)接口以與計算裝置100通信。
計算裝置100可以在使用到一個或多個遠程計算機的邏輯連接的網絡化環(huán)境中操作。圖1示出了到遠程計算裝置180的通用網絡連接171。通用網絡連接171可以是各種不同類型的網絡和網絡連接的任一種,包括局域網(LAN)、廣域網(WAN)無線網絡、符合以太網協議、令牌環(huán)協議的網絡、或包括因特網或萬維網的其它邏輯、物理或無線網絡。
當在網絡環(huán)境中使用時,計算裝置100通過網絡接口或適配器170連接至通用網絡連接171,網絡接口或適配器可以是有線或無線網絡接口卡、調制解調器或類似的聯網設備。在網絡化環(huán)境中,相對于計算裝置420所描述的程序模塊或其部分可儲存在遠程存儲器存儲設備中。可以理解,示出的網絡連接是示例性的,也可以使用在計算機之間建立通信鏈路的其它裝置。
在以下描述中,將參考由一個或多個計算裝置執(zhí)行的動作和操作的符號表示來描述本發(fā)明,除非另外指明。由此,可以理解,這類動作和操作,有時稱為計算機執(zhí)行的,包括計算裝置的處理單元對以結構化形式表示數據的電信號的操縱。這一操縱轉換了數據或在計算裝置的存儲器系統(tǒng)中的位置上維護它,從而以本領域的技術人員都理解的方式重配置或改變了計算機的操作。維護數據的數據結構是存儲器的物理位置,具有由數據的格式所定義的具體特性。然而,盡管在上述的上下文環(huán)境中描述本發(fā)明,它并不意味著限制,如本領域的技術人員所理解的,后文所描述的動作和操作的各方面也可以用硬件實現。
轉向圖2,示出了本發(fā)明的實施例所構想的用于將擴展與主機軟件應用程序隔離的一種機制。如圖2所示,主機進程201可調用代理205而非擴展215本身。擴展215可被主宿在不同于主機進程201的虛擬進程211中。虛擬進程211可試圖至少在可提供類似于主機軟件應用程序可提供的支持API 203的虛擬支持API 213的程度上,仿真主機進程201。因此,運行在虛擬進程211中的擴展215可以用使用原始支持API 203的同一方式來使用虛擬支持API 213。
本發(fā)明的一個實施例所構想的對代理205的一種設計可以是,至少在代理205可提供類似于擴展215所提供的服務API的服務API的程度上仿真擴展215。主機進程201然后可使用由代理205提供的API來以它使用擴展215本身提供的服務API的同一方式訪問擴展的功能。然而,如圖2所示,當代理205使用這種服務API從主機進程201接收請求時,代理205可從主機收集相關信息,并將該信息轉發(fā)到在虛擬進程211內執(zhí)行的擴展215。
本發(fā)明的一個實施例構想的對代理205的另一種設計可以是,與主機進程201接口,并轉換或截取主機進程的某些功能,并使用擴展215來擴展主機進程201的功能。例如,擴展215可提供對諸如使用非尋?;騻鹘y(tǒng)文件系統(tǒng)格式的文件存儲等特定類型的文件存儲的訪問。在這一情況下,代理205可被設計成檢測主機進程201內的文件訪問指令,并截取這些指令。代理205然后可將適當的信息轉發(fā)到擴展215,擴展215可訪問使用傳統(tǒng)文件系統(tǒng)格式的文件存儲中的文件。信息然后可從擴展215返回到代理205,并且代理205可向主機進程201呈現該信息。由此,代理205可擴展主機進程201的功能,諸如通過使主機進程201能夠訪問以傳統(tǒng)文件系統(tǒng)格式保存的數據,即使主機進程未被設計成啟用這一擴展的功能也能如此。由此,代理205不需要基于被設計成與主機進程201接口的預先存在的擴展,但是相反可被設計成擔當主機進程和任一擴展之間的填補(shim)。
不論代理205是被設計成仿真預先存在的擴展,還是擔當任一擴展的填補,代理205都可將適當的信息轉發(fā)到擴展215,以使擴展能夠執(zhí)行主機進程201的工作。本發(fā)明的一個實施例所構想的將信息從代理205轉發(fā)到擴展215的一種方法要求代理205直接與擴展215通信。在這一情況下,代理205本身可調用擴展215的適當服務API。本發(fā)明的一個實施例所構想的轉發(fā)請求的一種替換方法要求代理205與在虛擬進程211內執(zhí)行的占位程序(stub)217通信。占位程序217然后可調用擴展215的適當服務API。如本領域的技術人員所已知的,某些擴展可能無法正確地處理通過進程間通信接收的請求。為避免這種困難,可使用虛擬進程211內諸如占位程序217等占位程序來提供一種機制,擴展215可使用該機制,通過其服務API經由進程內通信而非進程間通信來接收請求。
一旦擴展215從主機進程201接收了請求,它可繼續(xù)響應該請求。取決于請求的特性,擴展215可訪問一個或多個功能,這些功能通常由主機進程201通過支持API 203來提供,但是現在由虛擬進程211通過虛擬支持API 213來提供。如下文更詳細地解釋的,取決于主機請求的特性,擴展215可能需要直接訪問計算系統(tǒng)100的資源,或者以直接的方式訪問連接到計算系統(tǒng)的硬件設備。在這一情況下,可以作出規(guī)定(provision),以向擴展215授予對這類資源的訪問權限,而同時將擴展215與主機進程210隔離。
為實現預期的隔離,僅具有兩個單獨的進程,如主機進程201和虛擬進程211可能是不夠的。因此,本發(fā)明的實施例構想代理205可以用防止來自擴展215的不正確響應或部分擴展上的不正確行為影響主機進程201的方式來設計。例如,在本發(fā)明的一個實施例所構想的一種機制中,代理205可被設計成嚴格地遵守由擴展215呈現的服務API。因此,如果擴展215試圖向主機進程201返回不是主機所期望的形式或類型的數據,則代理205可識別潛在的問題,并且不將該數據傳遞到主機進程。
在本發(fā)明的一個實施例構想的另一種機制中,代理205可向要返回的數據應用進一步的智能來避免向主機進程201引入不穩(wěn)定性。例如,如果擴展215遭受致命的錯誤并且發(fā)生故障,則代理205可維持一超時計數器或類似的機制,以檢測擴展的故障,并可諸如通過提供錯誤響應或讓主機進程溫和地退化而不會例如丟失用戶的工作產品,來向主機進程201通知該錯誤。代理205也可返回主機進程201給予擴展215的任一控制,以防止擴展的故障阻止主機進程的執(zhí)行。例如,代理205可請求底層操作系統(tǒng)終止虛擬進程211,并將控制返回給主機進程201?;蛘?,代理205可使用作為虛擬進程211的一部分的專用代碼,來通知主機進程明顯發(fā)生了故障,并請求虛擬進程終止并將控制返回給主機進程201。
然而,如果擴展215正確地完成了向它請求的任何任務,則它可以服務API所指定的方式返回主機進程201預期的任何結果。由此,例如,如果結果是請求成功的指示,并且要在預定義的變量中返回給作出調用的程序,則擴展215可將該變量傳遞回占位程序217,或直接傳遞給代理205。從那里,該變量可由代理205返回給最初作出調用的主機進程。以此方式,至少在涉及主機進程201前,代理205可能變得無法從擴展215中區(qū)分出來。當然,如本領域的技術人員所已知的,某些擴展可能不需要返回任何結果,在這一情況下,不需要實施用于接受返回值的任何規(guī)定。
如圖2所示,擴展215在虛擬進程211中操作。因此,如果擴展215的行動導致不穩(wěn)定性,則該不穩(wěn)定性很可能包含在虛擬進程211內。在這一情況下,操作系統(tǒng)或某一其它代碼,如代理205,可檢測到虛擬進程211中的錯誤,并可終止它,或試圖重新啟動它。在任一情況下,不穩(wěn)定性不太可能影響主機進程201,并且因此將不會導致對用戶的有害故障。因此,上文描述的機制允許主機進程201即使在主機進程所使用的擴展215發(fā)生故障或變得不穩(wěn)定時也能夠正確地運作。
如上文詳細描述的,代理205可以擴展215就如在主機進程中運行時一樣的方式向主機進程呈現服務API。在本發(fā)明的一個實施例構想的一種機制中,代理205可基于由擴展215實現的預定義服務API來創(chuàng)建。如本領域的技術人員已知的,擴展和主機軟件應用程序能夠通過其互操作的服務API一般在事先已知,因為軟件應用程序的作者和擴展的作者通常是不同的實體。當安裝擴展時,它可向主機軟件應用程序或適當的信息存儲,如注冊數據庫221注冊其自身,并指示它支持哪些服務API。使用這一信息,主機軟件應用程序或底層操作系統(tǒng)能夠在主機軟件應用程序試圖使用服務API之一時查找適當的擴展。這一信息也可用于創(chuàng)建代理205,因為它指示了擴展215支持的服務API的完整組。代理205的創(chuàng)建也可以用后文更詳細描述的方式改變例如注冊數據庫221中的條目。
本發(fā)明的一個實施例構想的另一種機制是基于預定義服務API的整個組創(chuàng)建可接受請求的的“超級代理”。這一超級代理然后可被調用,而不論主機應用程序試圖使用哪一特定服務API。在這一情況下,擴展215可在安裝時執(zhí)行的任何注冊可包括向超級代理或底層支持體系結構的注冊,使得超級代理可在主機軟件應用程序使用特定的服務API時調用正確的擴展215。
本發(fā)明的一個實施例構想的又一種機制是代理205可基于代理試圖提供給主機進程201的擴展功能來創(chuàng)建。由此,代理205可被創(chuàng)建以檢測、截取或連接主機進程201使用或主機進程201內的一個或多個功能,使得代理可向主機進程提供擴展215的功能的好處。使用上文描述的示例,如果代理205被設計成允許主機進程201通過擴展215訪問傳統(tǒng)文件系統(tǒng),則代理可被設計成檢測并截取主機進程使用的文件訪問和類似的功能。代理205還可被設計成將相關信息從那些文件訪問功能轉發(fā)到擴展215,使得擴展可與傳統(tǒng)文件系統(tǒng)接口。類似地,代理205可被設計成從擴展215接受響應,并將其轉換成可由主機進程201識別為與主機進程的所截取的文件訪問功能相關聯的適當響應的格式。
在某些情況下,可能期望修改虛擬支持API,以更準確地反映支持API 203。例如,如果向虛擬支持API 213查詢進程標識符,則它可返回虛擬進程211的標識符。然而,可能期望虛擬支持API 213返回主機進程201的標識符。在這一情況下,可使用“后向通道(back channel)”或“側向通道(side channel)”通信來使虛擬支持API 213能夠訪問來自主機進程201的信息。
為確保對所請求的特定擴展調用了正確的代理,可使用注冊數據庫或類似的信息存儲來將代理205鏈接到擴展215。如上所述,注冊數據庫221或類似的信息存儲可由主機進程201或操作系統(tǒng)來咨詢,以確定用于調用擴展215的參數。然而,與標識擴展215本身相反,注冊數據庫221可指向代理205。
一旦主機進程201調用了代理205,代理205可繼續(xù)調用或協調虛擬進程211內的擴展215的調用。如后文更詳細地描述的,虛擬進程211可以已經是可操作的,或者可以處于各種就緒狀態(tài)。如果虛擬進程211尚未可操作,則代理205可協調對虛擬進程211所必需的任何步驟的完成,以達到可操作狀態(tài)。一旦虛擬進程211可操作,代理205可指令虛擬進程211調用擴展215。例如,代理205可提供指向擴展215的位置的指針,并可傳遞該指針或主機進程201使用的類似參數。另外,如果確定擴展215使用了后向通道或側向通道通信,則擴展所使用的任何附加資源也可在虛擬進程211內調用。
一旦虛擬進程211調用了擴展215,和擴展215使用的任何其它代碼,代理205就能夠在必要時協調占位程序217的調用?;蛘?,代理205可與擴展215直接建立通信鏈接。如果將使用占位程序217,則代理205可向虛擬進程211提供占位程序217的位置以及調用占位程序時要使用的參數。一旦調用了占位程序217,占位程序本身可與擴展215建立通信鏈接,并與代理205建立通信鏈接。代理205和占位程序217或擴展215之間的通信可使用任一類型的進程間或進程內通信協議,包括例如,已知的遠程過程調用(RPC)機制。盡管可能事先決定所使用的通信協議,然而可實現同步交換(handshaking)過程,以確保代理205和占位程序217或擴展215能夠適當地通信。
由于某些擴展可能依賴于用戶模式環(huán)境來執(zhí)行主機進程向它們請求的功能,因此可能必須提供虛擬環(huán)境中的擴展用于提供用戶模式環(huán)境的機制。用戶模式環(huán)境一般指的是進程資源的總體狀態(tài),包括存儲器、文件、注冊表條目等等,使得給定用戶模式環(huán)境中特定資源的引用是準確的,而當被傳遞到特定用戶模式環(huán)境外時,這些相同引用可能涉及不正確的存儲器位置,或者是不準確的。對于可接受或返回大量數據的擴展,發(fā)送和接收假定公用用戶模式環(huán)境的存儲器引用,通常比發(fā)送和接收數據本身更有效。因此,如果要正確運作使用這種數據傳遞方案的擴展,則在虛擬進程211和主機進程201之間維持公用用戶模式環(huán)境是需要的。
轉向圖3,示出主機進程201已經以上文詳細描述的方式調用了在虛擬進程211和311內執(zhí)行的兩個擴展,即分別為擴展215和擴展315。代理205可以是如上文詳細描述的超級代理,并且可將來自主機進程201的請求定向到擴展215或擴展315?;蛘?,可使用第二代理(未在圖3示出),使得擴展215和315的每一個可具有與主機進程201內的代理的一對一關系。
操作系統(tǒng)134也在圖3中示出,它包括主機進程存儲器301和虛擬進程存儲器302和303,它們分別對應于主機進程201、虛擬進程211和虛擬進程311。盡管圖3和4示出的機制可依賴于主機進程201和虛擬進程211和311之下的公用操作系統(tǒng),然而下文將更詳細地描述的另外的機制也可提供主機進程和虛擬進程之間的公用用戶模式,即使虛擬進程是與主機進程之下的操作系統(tǒng)134無關地執(zhí)行的。當主機進程201和虛擬進程211及311的確共享公用操作系統(tǒng)134時,如圖3所示的,操作系統(tǒng)也可包括頁表映射320的集合,該頁表映射將主機進程存儲器301和虛擬進程存儲器302和303映射到物理RAM 13的各段。盡管圖3示出了段321、322和323分別對應于主機進程存儲器301和虛擬進程存儲器302和303,本領域的技術人員可以理解,段321、322和323僅為說明性的,RAM的物理段可能被分散,并且可能不是以所示的方式為連續(xù)的。
為在主機進程201和虛擬進程211和311之間維持公用用戶模式環(huán)境,操作系統(tǒng)134或其它支持軟件可向虛擬進程211和311提供對構成主機進程201的用戶模式環(huán)境的某些或所有資源的訪問。盡管以下描述集中在用于提供對用戶模式環(huán)境的存儲器資源方面的公用訪問的機制上,然而本領域的技術人員將認識到,這些機制可適用于構成用戶模式的其它資源,包括注冊表資源、文件資源等等。
在本發(fā)明的一個實施例所構想的用于提供對用戶模式環(huán)境的存儲器資源方面的公用訪問的一種機制中,操作系統(tǒng)134或類似的支持軟件可將主機進程存儲器301復制到虛擬進程存儲器302和303。如圖3所示,將主機進程存儲器301復制到虛擬進程存儲器302和404可導致將RAM段312物理復制到新的RAM段322和323。或者,I/O管理器可將主機進程301復制到系統(tǒng)存儲器的常駐非分頁池(pool)中,并可向虛擬進程211或311提供對該非分頁池的訪問。
一旦擴展215或315完成了其任務,虛擬進程存儲器302或303可向后與主機進程存儲器301合并。例如,代理205可執(zhí)行不同的功能,它可以是位置322和323中的虛擬進程存儲器和位置321中的主機進程存儲器之間的逐字節(jié)比較或更大級別的比較,以確定任何差異。那些差異可被驗證為正確的,或者符合擴展215或315的預期行為,然后可被復制回主機進程存儲器301,或通過代理205變得對主機進程201可用。或者,如果I/O管理器僅將主機進程存儲器301復制到系統(tǒng)存儲器的常駐非分頁池中,則I/O管理器可將非分頁池復制回主機進程存儲器。一般而言,這一復制可在每一請求的基礎上完成。因此,與復制整個主機進程存儲器301相反,本發(fā)明的一個實施例構想的一種更有效的機制要求操作系統(tǒng)132或其它支持軟件僅復制主機進程存儲器301中擴展215或315執(zhí)行所請求的任務所需的那些緩沖區(qū)。當由操作系統(tǒng)134的I/O管理器執(zhí)行時,這一到系統(tǒng)存儲器的非分頁池的緩沖區(qū)專用復制被稱為“緩沖的I/O(Buffered I/O)”或“緩沖的I/O方法(I/OMethod Buffered)”。
轉向圖4,示出了本發(fā)明的一個實施例構想的一種用于提供對用戶模式環(huán)境的存儲器資源方面的公用訪問的替換機制。具體地說,如圖4所示,與復制主機進程存儲器301的某一些或全部相反,可修改由操作系統(tǒng)134維護的頁表映射320,以將虛擬進程存儲器302和303定向到RAM 132中的物理位置321,其中儲存了代表主機進程存儲器301的數據。由于消除了對復制數據的需要,圖4所示的機制可以比圖3所示的機制更有效。
然而,如果擴展215和315可影響構成主機進程存儲器301的物理段321,則擴展的一部分上的錯誤或不穩(wěn)定性將導致主機進程201本身中的錯誤或不穩(wěn)定性。因此,為將這一可能性最小化,可以“只讀”方式修改頁表映射,使得虛擬進程211和311可指向物理存儲器321,以讀取它,但不允許修改它。因此,運行在虛擬進程211和311中的擴展的一部分上的任何錯誤或不穩(wěn)定性不能將錯誤或不穩(wěn)定性引入到主機進程201中,因為虛擬進程不允許修改主機進程存儲器。
如上所述,由圖4的機制所構想的對頁表映射320的修改可在每一請求的基礎上完成。然而,如果僅存在一個虛擬進程,則頁表映射320可繼續(xù)指向RAM 132的物理段321,即使對不需要用戶模式環(huán)境的請求也是如此。上述頁表映射的修改一般被稱為“即非緩沖也非直接I/O(Neither Buffered Nor Direct I/O)”或“也不是I/O方法(I/O Method Neither)”。
本發(fā)明的一個實施例構想的用于提供對用戶模式環(huán)境的存儲器方面的公用訪問的另一替換機制可以是圖3和圖4中示出的替換方案的混合。具體地,如上所述,可向虛擬進程211和311提供對物理存儲器321的只讀訪問。然而,如果擴展215或擴展315的任一個需要將數據寫回存儲器,則可執(zhí)行“寫復制(copy-on-write)”。如本領域的技術人員已知的,寫復制可在向數據寫入修改之前將正在修改的數據復制到新位置。由此,如果擴展215或擴展315需要將數據寫回存儲器321,則存儲器321的某一些或全部可被復制到一新位置,如圖3所示的322或323,并且擴展215或擴展315然后可修改存儲器322或323中復制的數據。以此方式,運行在虛擬進程211和311中的擴展引入的錯誤或不穩(wěn)定性將不會影響主機進程201,因為虛擬進程將不被允許修改主機進程存儲器。
代理205可跟蹤可能由擴展215或擴展315使用上述寫復制的機制來編輯的那些存儲器段。當訪問那些存儲器段時,代理可適當地引用位置322或323,而非位置321。如果儲存在位置322或323中的數據符合擴展215或315的預期行為,則代理205可諸如通過將數據復制到主機進程存儲器301中,或通過向主機進程傳遞位置322或323,來允許數據在主機進程201內使用。因此,可實現上述隔離,而同時允許代理205訪問修改的數據。
如上所述,諸如圖2的虛擬進程211等可主宿擴展的虛擬進程的初始化可在主機進程201調用了代理來替代擴展215之后由代理205協調。本發(fā)明的一個實施例構想的一種類型的虛擬進程是在與主機進程相同的操作系統(tǒng)134上執(zhí)行的主機進程201的副本。這一虛擬進程可通過派生(fork)主機進程,然后使用克隆的進程作為虛擬進程來創(chuàng)建?;蛘撸芍噶畈僮飨到y(tǒng)再一次啟動最初被調用來創(chuàng)建主機進程201的軟件應用程序。由此,例如,如果主機進程201是web瀏覽器,則虛擬進程211可通過再一次啟動web瀏覽器應用程序來創(chuàng)建單獨的進程或通過派生當前運行的web瀏覽器進程來創(chuàng)建。
本發(fā)明的一個實施例構想的另一種類型的虛擬進程可以在虛擬機器環(huán)境的上下文中創(chuàng)建。如果擴展215是操作系統(tǒng)使用的設備驅動程序或其它擴展,則虛擬機器可提供最優(yōu)解決方案。盡管諸如通過派生或重新執(zhí)行使用操作系統(tǒng)來創(chuàng)建其本身的另一副本以擔當虛擬進程是可能的,然而更高檔的解決方案可以是啟動虛擬機器,并引導虛擬機器環(huán)境中的操作系統(tǒng),以擔當用于主宿一個或多個擴展的虛擬進程。這一機制可能提供更好的隔離,并可允許一個操作系統(tǒng)使用為不同的操作系統(tǒng)設計的擴展。例如,可能未對操作系統(tǒng)的較新版本更新的傳統(tǒng)驅動程序可主宿于運行在虛擬機器環(huán)境內的操作系統(tǒng)的較舊版本內。以此方式,可使擴展的特征和能力仍對較新操作系統(tǒng)的用戶可用,而同時對可能由傳統(tǒng)擴展導致的不穩(wěn)定性屏蔽了較新的操作系統(tǒng)。通過使用虛擬機器,或通過執(zhí)行上述派生或重新執(zhí)行,虛擬進程211可提供與主機進程201等效的支持API,而無需在個別的基礎上考慮支持功能。
與接收來自底層操作系統(tǒng)134的支持的虛擬進程211和311不同,如本領域的技術人員所已知的,虛擬機器一般不以此方式利用操作系統(tǒng)。相反,為避免令每一虛擬機器指令通過完整的操作系統(tǒng)而導致的性能惡化,虛擬機器可僅依賴于系統(tǒng)管理程序,它可提供有限的操作系統(tǒng)功能,并可為運行在虛擬機器環(huán)境中的任何操作系統(tǒng)抽象計算裝置的底層硬件。通過使用這一系統(tǒng)管理程序,虛擬機器可更有效地運作。然而,作為使用系統(tǒng)管理程序的結果,在虛擬機器進程能夠在計算裝置的處理器上執(zhí)行之前,該計算裝置的操作系統(tǒng)可被移除,并且該操作系統(tǒng)的基礎可被儲存。隨后,當虛擬機器進程完成了任務時,它可從硬件中移除其基礎,并且原始的操作系統(tǒng)可被再次儲存。計算裝置的操作系統(tǒng)和虛擬機器進程之間的這一硬件使用的交換可以每秒發(fā)生多次。由此,盡管用戶可能察覺虛擬機器僅為使用操作系統(tǒng)的另一應用程序,然而虛擬機器進程一般僅與操作系統(tǒng)分時操作計算裝置硬件。
為實現上述交換,虛擬機器可包括可由計算裝置的操作系統(tǒng)調用的虛擬機器設備驅動程序或類似的擴展。虛擬機器設備驅動程序可提供必要的指令,用于從計算裝置硬件中移除操作系統(tǒng)的基礎,并高速緩存它們,直到允許操作系統(tǒng)恢復執(zhí)行的時刻。另外,虛擬機器設備驅動程序可協調虛擬機器進程的調用。例如,當操作系統(tǒng)在執(zhí)行時,它可接收令虛擬機器進程執(zhí)行一項任務的用戶命令。操作系統(tǒng)然后可向虛擬機器設備驅動程序發(fā)出一命令,以令虛擬機器進程執(zhí)行所請求的任務,并將以有效的方式向操作系統(tǒng)返回控制。由此,操作系統(tǒng)可將向虛擬機器進程傳遞控制作為它將控制傳遞給當前由操作系統(tǒng)協調的任一其它線程來處理。虛擬機器設備驅動程序在接收這一命令后,可從計算裝置的硬件中移除操作系統(tǒng)的基礎、允許系統(tǒng)管理程序安裝其基礎、并將命令傳遞到虛擬機器進程。隨后,當虛擬機器進程完成時,虛擬機器設備驅動程序可重新安裝操作系統(tǒng)的基礎,并允許它在計算裝置硬件上恢復執(zhí)行。
如上文詳細描述的,代理205可檢測虛擬進程211內的故障,并可試圖防止該故障將不穩(wěn)定性引入到主機進程201中。然而,如果虛擬進程211是運行在由虛擬機器創(chuàng)建的環(huán)境中的虛擬操作系統(tǒng)進程,則代理205可能很難檢測或控制這種虛擬操作系統(tǒng)進程,因為代理205所依賴的操作系統(tǒng)不在計算裝置硬件上執(zhí)行,但是相反被儲存并等待虛擬機器完成其執(zhí)行。因此,本發(fā)明的一個實施例構想的用于隔離錯誤的一種機制要求系統(tǒng)管理程序監(jiān)視在由虛擬機器創(chuàng)建的環(huán)境中執(zhí)行的軟件,并檢測該環(huán)境內的故障。如果檢測到故障,則系統(tǒng)管理程序可停止執(zhí)行、重新安裝操作系統(tǒng)的基礎、并允許它在計算裝置硬件上恢復執(zhí)行。系統(tǒng)管理程序也可提供適當的響應,以允許操作系統(tǒng)或依賴于虛擬環(huán)境中的擴展的其它軟件溫和地退化。
另外,由于操作系統(tǒng)在由系統(tǒng)管理程序允許它恢復執(zhí)行之前一般無法恢復執(zhí)行,因此系統(tǒng)管理程序也可維持一定時器或類似的機制,以確保虛擬機器環(huán)境中的故障不會阻止控制被返回到操作系統(tǒng)。盡管可以用上述方式使用定時器機制來檢測故障,然而如果虛擬機器用于創(chuàng)建主宿一個或多個擴展的環(huán)境,則定時器機制可具有進一步的重要性,因為如果在虛擬機器環(huán)境中出現故障,可能沒有用于將控制返回到操作系統(tǒng)的任何其它機制。
或者,與在系統(tǒng)管理程序中維護諸如定時器機制等用于檢測故障的機制相反,這類機制可在計算裝置100的硬件中維護,如果在由虛擬機器創(chuàng)建的環(huán)境中檢測到故障,它可提示系統(tǒng)管理程序將控制返回給操作系統(tǒng)。例如,操作系統(tǒng)可在允許系統(tǒng)管理程序在硬件上執(zhí)行之前,在硬件中設置一定時器。隨后,如果在由虛擬機器創(chuàng)建的環(huán)境中發(fā)生了故障,則由硬件維護的定時器可超時,并提示系統(tǒng)管理程序將控制返回給操作系統(tǒng)。為將控制返回給操作系統(tǒng),如果由硬件維護的定時器超時,可修改系統(tǒng)管理程序以中止任何執(zhí)行,并將控制返回給操作系統(tǒng)。系統(tǒng)管理程序也可指示錯誤的存在,或可在控制以此方式返回時指示執(zhí)行尚未完成。
如果虛擬進程211是在由虛擬機器創(chuàng)建的環(huán)境中運行的虛擬操作系統(tǒng)進程,則另一新增的問題是代理205和虛擬進程211或擴展215之間的通信可能無法依賴于進程間通信或RPC機制,如上所詳細描述的。相反,代理205和虛擬操作系統(tǒng)進程211之間的通信可由系統(tǒng)管理程序或其它機制來協調,這些其它機制由虛擬機器設置用于與主機進程201之下的操作系統(tǒng)進程通信。這種機制可包括,例如,將消息儲存在預定義的存儲器位置中,以使當虛擬機器和操作系統(tǒng)的每一個在計算裝置硬件上執(zhí)行時,該消息對兩者都是可訪問的,或者,作為另一示例,當虛擬機器和操作系統(tǒng)都在計算裝置硬件上執(zhí)行時,提供保留在存儲器內的線程。
另外,上文詳細描述的可提供虛擬進程211或311和主機進程201之間的公用用戶模式的機制也可能需要某些修改,以在虛擬進程211或311是運行在虛擬機器環(huán)境中的虛擬操作系統(tǒng)進程的環(huán)境中實現。例如,與依賴于公用操作系統(tǒng)134來執(zhí)行對頁表映射的修改相反,修改可在由虛擬機器的系統(tǒng)管理程序維護的頁表映射中作出。由此,如果復制主機進程存儲器301以創(chuàng)建虛擬進程存儲器302和303,這種復制可由系統(tǒng)管理程序而非圖3所示的操作系統(tǒng)134來執(zhí)行。更具體地,即使主機操作系統(tǒng)不再執(zhí)行并且虛擬機器進程正在執(zhí)行時,主機進程存儲器301也可保留在物理存儲器位置321中。系統(tǒng)管理程序可物理虛擬存儲器位置321,并可將該位置的內容復制到處于系統(tǒng)管理程序控制之下的物理存儲器位置322或323中。
以類似的方式,如果主機進程201和虛擬進程211及311之間的公用用戶模式是通過以上文參考圖4詳細描述的方式修改頁表映射來實現的,則對頁表映射的修改可由系統(tǒng)管理程序來執(zhí)行。由此,即使主機操作系統(tǒng)當前不在執(zhí)行,主機進程存儲器301也可保留在物理存儲器位置321中,并且系統(tǒng)管理程序可將虛擬進程存儲器302和303映射到物理存儲器位置321。重要的是,需要被映射大物理位置321的虛擬進程存儲器兩者,如虛擬存儲器302或303,將處于系統(tǒng)管理程序的控制之下。因此,由于主機進程存儲器301不需要任何修改,上述機制將不需要來自操作系統(tǒng)134的任何支持,因此該操作系統(tǒng)134可以是任一標準操作系統(tǒng)。
如果虛擬進程存儲器被映射到由主機進程存儲器使用的物理存儲器位置,并且使用諸如上文詳細描述的寫復制方案,則系統(tǒng)管理程序也可執(zhí)行必要的復制。例如,系統(tǒng)管理程序可留出儲存作為寫復制的一部分而寫入的值的額外的物理存儲器位置。此外,如上所述,可修改代理205以引用主機進程存儲器301和用于寫復制的額外位置兩者。然而,由于由系統(tǒng)管理程序留出的額外存儲器可能不是由代理205之下的操作系統(tǒng)使用的存儲器,因此可修改代理,以使即使存儲器位置不被底層操作系統(tǒng)正確地訪問,也可特別地引用這些存儲器位置?;蛘?,由系統(tǒng)管理程序留出的存儲器位置還可被進一步復制到代理205之下的操作系統(tǒng)可訪問的存儲器位置,作為虛擬機器停止在計算裝置上執(zhí)行并允許操作系統(tǒng)恢復執(zhí)行的過程的一部分。
本發(fā)明的一個實施例構想的用于提供公用用戶模式環(huán)境的另一替換機制要求代用主機進程在虛擬操作系統(tǒng)進程內運行。例如,類似于主機進程,代用主機進程可運行在虛擬機器環(huán)境內虛擬操作系統(tǒng)的頂層。代用主機進程的用戶模式環(huán)境可以與處于虛擬機器環(huán)境外的主機進程的用戶模式環(huán)境相同,由此自動提供了公用用戶模式。該公用用戶模式可由主機進程和代用主機進程之間的通信如使用上述技術來維護,而無需明確地訪問或復制主機進程存儲器301。
本發(fā)明的一個實施例構想的用于創(chuàng)建虛擬操作系統(tǒng)進程的一種機制是調用主機計算裝置100上的虛擬機器軟件應用程序,然后引導在執(zhí)行虛擬機器軟件應用程序時創(chuàng)建的環(huán)境的上下文中的適當操作系統(tǒng)。如本領域的技術人員所已知的,虛擬機器軟件應用程序一般包括一操作系統(tǒng)擴展,它可用于從計算裝置硬件移除操作系統(tǒng)134的基礎,并將它們儲存到臨時存儲中。虛擬機器軟件應用程序也可包括一系統(tǒng)管理程序,在移除了操作系統(tǒng)134的基礎之后,它可將其自己的基礎安裝在計算裝置硬件上,并以適當的方式抽象該硬件以創(chuàng)建虛擬環(huán)境。虛擬操作系統(tǒng)可以與操作系統(tǒng)134相同或不同,它可在由系統(tǒng)管理程序提供的抽象硬件上引導。由此,系統(tǒng)管理程序可創(chuàng)建一虛擬機器環(huán)境,其中,虛擬操作系統(tǒng)進程可與操作系統(tǒng)134無關地執(zhí)行。盡管這一虛擬操作系統(tǒng)進程可提供上文列舉的好處,然而對虛擬機器軟件應用程序的調用,包括所描述的對操作系統(tǒng)134的移除以及對虛擬機器環(huán)境內適當操作系統(tǒng)的引導,可以是慢得驚人的進程。
為避免由啟動虛擬機器軟件應用程序然后引導虛擬機器環(huán)境內的操作系統(tǒng)而引入的低效率,本發(fā)明的一個實施例構想的另一種機制要求在虛擬機器環(huán)境內初始化虛擬機器并引導操作系統(tǒng),然后將所得的虛擬機器環(huán)境的最終狀態(tài)保存并克隆,用于將來的使用。由此,例如,在計算裝置100的初始設置過程中,在引導了操作系統(tǒng)134之后,可自動啟動虛擬機器軟件應用程序,并可在由虛擬機器創(chuàng)建的環(huán)境內引導虛擬操作系統(tǒng)。一旦這一虛擬操作系統(tǒng)被引導,可保存該虛擬機器環(huán)境的狀態(tài)。如本領域的技術人員所已知的,這一狀態(tài)可被容易地保存,因為虛擬機器軟件應用程序可能在計算裝置100的存儲介質上僅創(chuàng)建包括虛擬機器環(huán)境的狀態(tài)的少數文件。那些文件可被訪問和復制,并且虛擬機器軟件應用程序然后可保留在可操作狀態(tài),或者它可以預定的狀態(tài)放置,例如睡眠模式,或者它甚至可被完全關閉。
隨后當主機進程(可以是操作系統(tǒng)134或應用程序145的任一個)試圖執(zhí)行將導致使用擴展的操作時,這或者是被設計得如此,或者是因為代理作出這樣的調停,則可復制保存的虛擬機器環(huán)境的狀態(tài),并且可以用有效的方式創(chuàng)建一新的虛擬機器環(huán)境。由于虛擬機器環(huán)境的狀態(tài)已包括引導的虛擬操作系統(tǒng),因此可容易地創(chuàng)建可主宿請求的擴展的虛擬進程。例如,如果所請求的擴展是操作系統(tǒng)擴展,則用于該擴展的虛擬進程已經以虛擬操作系統(tǒng)的形式存在。另一方面,如果請求的擴展是軟件應用程序擴展,則可在虛擬操作系統(tǒng)上執(zhí)行適當的軟件應用程序,由此創(chuàng)建了一適當的虛擬進程。因此,通過在虛擬機器環(huán)境內引導了虛擬操作系統(tǒng)之后保存由虛擬機器軟件應用程序創(chuàng)建的狀態(tài),然后在必要時克隆該保存的狀態(tài),可有效地創(chuàng)建用于主宿操作系統(tǒng)和軟件應用程序擴展兩者的虛擬進程。
為提供對虛擬進程創(chuàng)建的適當支持,虛擬機器軟件應用程序可被設計成抽象硬件的超集(superset),它可以大于虛擬機器軟件應用程序正常抽象的硬件集。類似地,在虛擬機器環(huán)境內引導的虛擬操作系統(tǒng)可實現一完整的操作系統(tǒng)API集。通過抽象這一硬件超集,并提供完整的操作系統(tǒng)API集,由虛擬機器創(chuàng)建的狀態(tài)很可能可用于生成用于所請求的擴展的適當虛擬進程。因此,通過克隆保存的狀態(tài),可生成更多數量的有用虛擬進程,并且更少的虛擬進程將需要使用更大成本的機制來創(chuàng)建。
轉向圖5,示出了本發(fā)明的一個實施例構想的用于創(chuàng)建虛擬操作系統(tǒng)進程的另一種機制。流程圖400一般示出了諸如計算裝置100等許多現代計算裝置的啟動過程。流程圖400并非特定的計算裝置或操作系統(tǒng)的啟動過程的詳細描述,而是相反,旨在提供通常在啟動過程中找到的元素的一般說明,以更好地解釋由本發(fā)明的一個如可從圖5中見到的,啟動過程通過在步驟405向計算裝置提供電源開始。在隨后的步驟410,中央處理單元(CPU)可開始執(zhí)行只讀存儲器(ROM)基本輸入/輸出系統(tǒng)(BIOS)中找到的指令。ROM BIOS可執(zhí)行基本硬件測試,以確保計算設備的中央硬件元素正確地運作。在步驟415,BIOS可讀取配置信息,它一般儲存在互補金屬氧化物半導體(COMS)存儲器中。如本領域的技術人員所已知的,CMOS存儲器可以是一個小范圍的存儲器,當計算裝置不在操作時,其內容由電池來維持。CMOS存儲器可標識可連接到計算裝置的一個或多個計算機可讀介質。如步驟420所指示的。BIOS可檢查各個計算機可讀介質中的第一個扇區(qū),以找出主引導記錄(MBR)。
一般而言,MBR包含某些或所有的分區(qū)加載器,它可以是用于查找引導記錄并開始操作系統(tǒng)的引導的計算機可執(zhí)行指令。由此,在步驟425,在MBR處找到的分區(qū)加載器可取代BIOS,并可檢查計算機可讀介質上的分區(qū)表或類似的記錄,以確定要加載的適當操作系統(tǒng)。每一操作系統(tǒng)可具有與其相關聯的引導記錄,并且在步驟430,如果引導記錄沒有任何問題,則分區(qū)加載器可啟動操作系統(tǒng)的引導。
作為引導操作系統(tǒng)的一部分,分區(qū)加載器可調用硬件檢測例程,該例程可開始執(zhí)行硬件檢測,如由步驟435所指示的。一般而言,在步驟435執(zhí)行的硬件檢測僅是初步的,并非必要地啟用硬件,步驟435的硬件檢測可以僅創(chuàng)建硬件設備的列表供以后使用。例如,這一列表可以儲存在注冊數據庫或類似的信息存儲中。在步驟440,分區(qū)加載器可調用另一操作系統(tǒng)進程或子系統(tǒng),以提供到計算裝置的各個硬件設備的通信和控制鏈接。有時候這一子系統(tǒng)被稱為“硬件抽象層(HAL)”。另外,在步驟440,分區(qū)加載器也可加載操作系統(tǒng)的內核和注冊表,或包含必要的硬件和軟件信息的類似數據庫。
由分區(qū)加載器在步驟440加載的注冊表或類似的數據庫也可包含操作系統(tǒng)內核訪問諸如硬盤驅動器或存儲器等需要的硬件所需要的設備驅動程序的列表。因此,在步驟445,分區(qū)加載器可加載這些設備驅動程序,以提供對操作系統(tǒng)內核的適當支持。一旦加載了設備驅動程序,分區(qū)加載器在步驟445也可將計算裝置的控制傳遞到操作系統(tǒng)內核。
盡管流程圖400的步驟405到445一般示出了大多數啟動例程的元素,然而步驟450示出了本發(fā)明的一個實施例所構想的用于創(chuàng)建可主宿操作系統(tǒng)擴展或軟件應用程序的虛擬操作系統(tǒng)進程的機制的第一部分。具體地,在步驟450,與引導記錄相關聯的HAL或信息可向操作系統(tǒng)內核指示在計算裝置上存在比實際上物理存在更多的CPU。由此,例如,在僅具有單個CPU的計算裝置中,操作系統(tǒng)內核可在步驟445接收在計算裝置上存在兩個或多個CPU的指示。類似地,對于已經具有兩個CPU的計算裝置,操作系統(tǒng)內核可接收在計算裝置上存在三個或多個CPU的指示。如下文更詳細地描述的,通過指示實際上不存在的CPU的存在,可更容易且有效地創(chuàng)建虛擬操作系統(tǒng)進程。
轉向流程圖400,在步驟455,操作系統(tǒng)內核可調用HAL來初始化操作系統(tǒng)內核相信在計算裝置中存在的每一CPU。因此,初始化CPU的請求可包括實際上在計算裝置中不存在的CPU。一旦HAL完成了所有CPU的初始化,在步驟460可保存系統(tǒng)的狀態(tài),用于隨后以下文詳細描述的方式有效地創(chuàng)建虛擬操作系統(tǒng)進程。然后,操作系統(tǒng)的引導可以用標準啟動操作來繼續(xù),包括例如,初始化操作系統(tǒng)的各個子系統(tǒng)、激活構成計算裝置100的硬件設備、以及加載適當的設備驅動程序,如步驟465所指示的。盡管步驟465特別地列出了輸入/輸出(I/O)子系統(tǒng)的初始化,然而操作系統(tǒng)內核也可在步驟465初始化存儲器管理器、進程管理器、對象管理器、操作系統(tǒng)的各個內核、以及類似的子系統(tǒng)。另外,操作系統(tǒng)內核可重新啟用硬件中斷,并可激活作為計算裝置100的一部分被檢測的各個硬件設備。如上所述,作為各個硬件設備的激活的一部分,操作系統(tǒng)內核也可加載用于那些設備的適當設備驅動程序。如本領域的技術人員所已知的,由于許多操作系統(tǒng)最初是為具有單個CPU的計算裝置而設計的,因此這類操作系統(tǒng)一般僅用單個CPU執(zhí)行圖5所示的大部分步驟,并僅在幾乎完成了所有的啟動過程之后才激活任何額外的CPU。因此,主CPU一般維護所有的硬件綁定,而其它CPU的任務可以被賦予將在計算裝置上執(zhí)行的各種進程的任務。
如上所述,在步驟450,向操作系統(tǒng)內核通知額外的CPU,即使CPU可能不在計算裝置內物理地存在。由此,在步驟470,可向操作系統(tǒng)內核通知,在步驟450所指示的,但不物理地存在的那些CPU發(fā)生故障。步驟470處這一發(fā)生故障的CPU的指示實際上撤消了步驟450處對額外CPU的指示,并允許操作系統(tǒng)內核使用與計算裝置100上物理地存在的相同數目的CPU完成操作系統(tǒng)的引導過程。如上所述,由于各操作系統(tǒng)可在不同的時刻初始化額外的CPU,因此步驟470并不意味著局限于在執(zhí)行了步驟465所示的所有元素之后發(fā)生。相反,這意味著步驟470在額外的CPU被初始化,并且建立了適當的硬件綁定之后執(zhí)行,只要它可以發(fā)生。繼續(xù)流程圖400,在步驟475,操作系統(tǒng)內核可啟動適當的子系統(tǒng)來創(chuàng)建用戶模式環(huán)境,并且在步驟480,一旦創(chuàng)建了用戶模式環(huán)境,操作系統(tǒng)可完成引導過程。
一旦在步驟480完成了引導過程,可引導虛擬環(huán)境,這可諸如通過經由其引導在步驟480完成的操作系統(tǒng)輸入命令來執(zhí)行虛擬機器而實現。為更有效地創(chuàng)建虛擬環(huán)境,可使用在步驟460引導操作系統(tǒng)期間保存的狀態(tài)。由于保存的狀態(tài)反映了在步驟450存在多個CPU,并且不考慮步驟470處次級CPU的故障指示,因此虛擬環(huán)境可如同存在多個CPU那樣被引導。因此,虛擬機器環(huán)境能夠以下文示出的方式利用由主機操作系統(tǒng)建立的機制來更有效地啟動。
如上所述,由于許多操作系統(tǒng)在引導過程幾乎完成之前僅使用單個CPU,因此該CPU一般被賦予處理大多數或所有系統(tǒng)設備的任務,包括處理諸如硬件中斷等來自那些系統(tǒng)設備的任何通信。因此,具有多個物理CPU的計算裝置上的操作系統(tǒng)一般提供引導過程期間未使用的CPU上執(zhí)行的進程用于與引導過程期間使用的CPU進行通信的機制,以向那些進程提供與硬件通信的能力。圖5示出了可充分利用這一能力以允許虛擬機器環(huán)境與底層硬件通信,而無需對硬件設備的任何運行時綁定的機制。具體地,當將保存的狀態(tài)提供給虛擬環(huán)境時,可配置虛擬環(huán)境,使得在引導過程期間使用的CPU不被使用,或至少不被允許與輸入/輸出硬件通信。相反,虛擬環(huán)境可使用操作系統(tǒng)的機制以通過如同計算裝置包括多個CPU那樣運作來充分利用已對操作系統(tǒng)執(zhí)行的硬件綁定。
作為一個示例,在僅具有單個CPU的計算裝置中,虛擬操作系統(tǒng)進程將如同至少有第二CPU那樣地運作,因為盡管操作系統(tǒng)在步驟470接收到了第二CPU發(fā)生故障的指示,然而虛擬環(huán)境未接收到任何這樣的指示。由此,盡管計算裝置中的單個物理CPU仍執(zhí)行所有的工作,虛擬機器的環(huán)境如同存在兩個CPU系統(tǒng)那樣運作,其中一個CPU具有對硬件設備的所有運行時綁定,而第二CPU主宿虛擬操作系統(tǒng)進程,由于第一CPU的存在,該虛擬操作系統(tǒng)進程不需要用對硬件的任何運行時綁定來初始化。結果,由于不需要初始化任何硬件,可有效地引導虛擬操作系統(tǒng),并且由于不需要抽象任何硬件,虛擬機器本身可被十分有效地引導。如果主宿在虛擬操作系統(tǒng)進程中的擴展需要與硬件設備通信,則可使用上述為在多CPU系統(tǒng)中使用而建立的機制,從虛擬操作系統(tǒng)進程向主機操作系統(tǒng)作出請求。由此,擴展可以用標準方式來運作,并且可有效地創(chuàng)建虛擬環(huán)境。
然而,如本領域的技術人員已知的,對于某些擴展,例如操作系統(tǒng)設備驅動程序,上述機制可能無法提供令人滿意的解決方案。特別地,如果主機操作系統(tǒng)遇到傳統(tǒng)硬件,如傳統(tǒng)設備199,它可能無法找到適當的驅動程序,并且可能無法正確地識別硬件。由此,盡管適當的虛擬操作系統(tǒng)進程可主宿傳統(tǒng)設備驅動程序,如傳統(tǒng)接口198,然而可能沒有方法來與傳統(tǒng)硬件通信,因為使用上述機制,操作系統(tǒng)將處理所有的硬件通信,并且操作系統(tǒng)將不能正確地連接到傳統(tǒng)硬件。此外,即使底層操作系統(tǒng)的確正確地連接到計算裝置的所有硬件,然而,即使使用上述機制將最小量的延遲引入到硬件通信中,某些擴展,如視頻設備驅動程序也無法正確地運作。
因此,本發(fā)明的一個實施例構想的上述機制的一個變異要求其設備驅動程序將被主宿在虛擬操作系統(tǒng)進程中的硬件設備在底層操作系統(tǒng)的引導序列中標識,并且不綁定到底層操作系統(tǒng),而是綁定到虛擬操作系統(tǒng)進程,從而向設備驅動程序提供了對該硬件設備的直接訪問。更具體地,硬件設備的中斷可被發(fā)送到被指示、但物理地不存在的次級CPU。隨后,當虛擬機器創(chuàng)建假定次級CPU的確存在的環(huán)境時,它能夠初始化對硬件設備的運行時綁定,從而允許虛擬操作系統(tǒng)進程直接與硬件設備通信。由此,如圖5所示,在步驟499完成虛擬環(huán)境的引導之前,可任選的步驟495可插入傳統(tǒng)設備199的硬件配置,并可將正確的設備驅動程序,如傳統(tǒng)接口198加載到虛擬環(huán)境中。
或者,虛擬機器可創(chuàng)建具有兩個或多個虛擬CPU的環(huán)境,而不依賴于上述引導優(yōu)化。不管用于創(chuàng)建多CPU虛擬環(huán)境的過程如何,其設備驅動程序由虛擬操作系統(tǒng)進程主宿的硬件設備可如同硬件設備向作為虛擬CPU的次級CPU發(fā)送中斷那樣被綁定。由此,在操作系統(tǒng)的初始引導期間,其驅動程序應當被主宿在虛擬環(huán)境中的硬件設備可被隱藏或延遲,如下文更詳細地討論的,使得硬件設備不被綁定到加載操作系統(tǒng)的物理CPU。然而,作為引導過程的一部分,虛擬環(huán)境可被綁定到硬件設備。如上所述,虛擬環(huán)境可如同至少一個第二CPU存在且虛擬環(huán)境正在使用它那樣被創(chuàng)建。由此,對硬件設備的綁定將如同硬件設備向第二CPU發(fā)送中斷那樣被執(zhí)行。由于僅存在單個物理CPU,因此它可從硬件設備接收通信。然而,那些通信可被定向到虛擬環(huán)境而非主機操作系統(tǒng),從而向虛擬環(huán)境提供了對硬件設備的直接訪問。
本發(fā)明的實施例構想若干機制,其驅動程序應當主宿在虛擬操作系統(tǒng)進程中的硬件設備在流程圖400的步驟465通過這些機制可被隱藏或延遲。本發(fā)明的一個實施例構想的一種機制要求捕捉可在步驟465被發(fā)送到應當主宿在虛擬操作系統(tǒng)進程中的設備驅動程序的任何控制信息。這一控制信息可被延遲,直到在步驟490建立了虛擬操作系統(tǒng)進程,然后被中繼到設備驅動程序。本發(fā)明的一個實施例構想的另一種機制要求設備驅動程序的代理,它可由操作系統(tǒng)進程以上文參考主機進程201和代理205所描述的方式在步驟465調用,以返回“OK”指示,隨后高速緩存發(fā)送到它的任何輸入/輸出請求分組(IRP),直到在步驟490建立虛擬操作系統(tǒng)進程。然后代理可將IRP轉發(fā)到虛擬操作系統(tǒng)進程中的設備驅動程序。或者,代理可簡單地延遲,直到建立了虛擬操作系統(tǒng)進程,然后可將任何IRP直接傳遞到設備驅動程序,而無需高速緩存。
本發(fā)明的一個實施例構想的又一種機制要求在步驟465硬件設備最初被綁定到操作系統(tǒng),然后發(fā)送一“休眠”或類似的命令,它可干凈地清洗隊列中的任何IRP,并保持硬件處于方便的狀態(tài)。虛擬操作系統(tǒng)進程中的設備驅動程序然后可在步驟495試圖與來自虛擬操作系統(tǒng)進程內的設備建立直接通信。本發(fā)明的一個實施例構想的這一機制的變異在步驟465要求從操作系統(tǒng)隱藏硬件設備,而非如上所述的綁定然后休眠。可通過向HAL或諸如即插即用管理器等各種其它子系統(tǒng)發(fā)送適當的命令來隱藏硬件設備。隨后,在步驟480引導了操作系統(tǒng)并且建立的虛擬操作系統(tǒng)進程之后,可在步驟495激活硬件設備或令其可見,因此將其自身綁定到虛擬操作系統(tǒng)進程和其中主宿的設備驅動程序。
與以上文詳細描述的方式試圖仿真額外的CPU來充分利用多CPU操作系統(tǒng)的能力相反,本發(fā)明的一個實施例構想的用于有效地創(chuàng)建虛擬進程的一種替換機制在圖6中概括地示出。圖6所示的流程圖500包含上文參考圖5詳細描述的許多相同的步驟。特別地,步驟405到445以及465到475概括地示出了上文詳細描述的同樣的基本啟動過程。另外,盡管未在圖6中具體示出,在步驟445和465之間,操作系統(tǒng)內核可獲知計算裝置的CPU,然后可調用HAL來初始化那些CPU。然而,與圖5所示的步驟450和455不同,上述步驟不導致向操作系統(tǒng)內核呈現比計算裝置內實際存在的更多數量的CPU。在步驟475之后,可執(zhí)行新的步驟505,由此可保存計算裝置的狀態(tài)。
在步驟485完成了操作系統(tǒng)引導之后,可啟動虛擬機器,并且該虛擬機器可利用通過觀察和記錄代碼收集的信息。由此,在步驟485,虛擬機器可開始引導過程,并且在步驟510,虛擬機器可使用在步驟505記錄的狀態(tài)來更有效地引導虛擬操作系統(tǒng)進程。更具體地,虛擬環(huán)境可僅使用它需要虛擬化的特定硬件設備的參數,從而允許它跳過其它硬件設備。此外,由于在操作系統(tǒng)引導期間,諸如在步驟505,參數已被建立并記錄,因此虛擬機器可更有效地虛擬化那些硬件設備。然而,如果諸如傳統(tǒng)設備199等硬件設備未在步驟465被正確地初始化,則它可在可任選步驟495以上文詳細描述的方式在虛擬環(huán)境中初始化。最終,由于虛擬機器可選擇硬件設備的有限組來虛擬化,并可更有效地虛擬化它們,因此可更有效地創(chuàng)建虛擬環(huán)境。然而,本領域的技術人員可以認識到,如果引導的操作系統(tǒng)和虛擬操作系統(tǒng)是相同的,或者至少在其與硬件的接口方面是相似的,則上述優(yōu)化將是最有效的。
在某些情況下,包括可由虛擬操作系統(tǒng)進程主宿的某些硬件設備驅動程序擴展,由虛擬操作系統(tǒng)進程提供的支持API的語義可能不是有用的。例如,某些硬件設備驅動程序可需要對物理硬件的訪問,以正確地控制它。因此,在這些情況下,需要虛擬操作系統(tǒng)進程向主宿的設備驅動程序提供對物理硬件的訪問。盡管上述某些機制可提供必要的直接訪問,然而本發(fā)明的實施例構想了另外的機制,它可應用于任何虛擬進程,以允許主宿在該進程內的擴展能夠直接訪問硬件。
因此,可使用下文描述的機制,不僅提供擴展和主機進程之間的故障隔離,也可使虛擬機器在抽象硬件可能低效率或不可能的情況下能夠提供對硬件的直接訪問。例如,上述機制可允許虛擬機器主宿依賴于以下硬件的軟件,即虛擬機器未被設計成抽象這些硬件。由此,上述機制向虛擬機器設計者和作者提供了縮小他們需要考慮的硬件的范圍的能力,而同時向消費者提供了使用獨特或傳統(tǒng)硬件的能力。
轉向圖7,示出了虛擬機器進程617,它使用了系統(tǒng)管理程序613來與底層硬件620接口,并包括主宿擴展615的虛擬操作系統(tǒng)進程611。如黑色箭頭所指示的,本發(fā)明的實施例構想了一種虛擬機器環(huán)境,使得擴展615可直接從虛擬機器環(huán)境內訪問硬件620,從而繞過了由系統(tǒng)管理程序613執(zhí)行的任何抽象。如上所述,系統(tǒng)管理程序,如系統(tǒng)管理程序613可以是計算機可執(zhí)行指令,它通過提供有限的操作系統(tǒng)功能,并通過提供對底層硬件,如硬件620的抽象訪問,來管理虛擬機器環(huán)境。由此,系統(tǒng)管理程序613可用于將虛擬機器環(huán)境從底層硬件的細節(jié)屏蔽,從而允許虛擬機器軟件應用為打算在其中執(zhí)行的任何代碼創(chuàng)建適當的虛擬機器環(huán)境。系統(tǒng)管理程序可在虛擬機器環(huán)境和底層硬件之間轉換。
作為一個示例,虛擬機器環(huán)境可向虛擬操作系統(tǒng)進程611以及可在該進程中執(zhí)行的任何程序呈現特定類型的CPU,而同時,底層硬件620實際上包括一個完全不同類型的CPU。系統(tǒng)管理程序613可被賦予將對虛擬機器環(huán)境內一種類型的CPU作出的請求轉換成適當的請求,以與底層硬件620中存在的不同類型的CPU通信。然而,如上所述,由于某些操作系統(tǒng)擴展,如設備驅動程序,可能需要直接與底層硬件設備通信,因此由系統(tǒng)管理程序執(zhí)行的抽象可阻止這類操作系統(tǒng)正確運作。因此,本發(fā)明的實施例構想了用于繞過系統(tǒng)管理程序并允許主宿在虛擬操作系統(tǒng)進程611中的擴展直接訪問硬件的各種機制。
除虛擬機器進程617之外,圖7也示出了主機操作系統(tǒng)進程601,它也可使用硬件620。硬件620被分割成兩個塊,以示出主機操作系統(tǒng)進程610和虛擬機器進程617之間的分時。由此,盡管虛擬機器進程617是通過系統(tǒng)管理程序613在硬件620上執(zhí)行的,然而硬件620也不同時執(zhí)行主機操作系統(tǒng)進程601。相反,主機操作系統(tǒng)進程601的基礎可被移除,并置于臨時存儲中。盡管未在圖7中示出,這一基礎可包括注冊表條目、各種控制寄存器、中斷分派例程、CPU特權數據等等。一旦虛擬機器進程617結束了在硬件620上的執(zhí)行,虛擬機器進程的基礎可被移除,并置于臨時存儲中,并且主機操作系統(tǒng)進程601可被恢復,并允許在硬件上執(zhí)行。
盡管圖7的確示出了主機操作系統(tǒng)進程601,然而采用代理605,本發(fā)明的一個實施例構想的用于提供從虛擬環(huán)境內對硬件的直接訪問的機制可在擴展故障隔離的環(huán)境外使用。具體地,上述機制可應用于一般的虛擬機器技術,從而允許虛擬機器主宿依賴于傳統(tǒng)硬件設備、自定義硬件設備或非典型硬件設備的擴展和其它軟件。通過消除了為這類設備設計抽象的需要,本發(fā)明的實施例提供了更簡單的系統(tǒng)管理程序,以及更有效的虛擬機器設計。
本發(fā)明的一個實施例構想的用于提供從虛擬機器環(huán)境內對硬件的直接訪問的一種機制要求系統(tǒng)管理程序修改頁表映射,以允許訪問對應于一個或多個硬件設備的物理存儲器。如本領域的技術人員已知的,應用程序或擴展可通過訪問適當的物理存儲器來與硬件設備通信,這些適當的物理存儲器通常可以是寄存器或位于硬件設備本身或另一接口卡上的類似硬件。由此,例如,圖1所示的說明性計算裝置100通過向鍵盤設備驅動程序提供對用戶輸入接口60的物理存儲器寄存器的訪問,可允許鍵盤設備驅動程序與鍵盤162通信。或者,鍵盤設備驅動程序可訪問RAM132中的特定位置,并且可將額外的進程從鍵盤162傳輸到RAM中的該位置,以供設備驅動程序讀取。
當虛擬機器環(huán)境中的代碼,如虛擬機器進程617中的擴展615試圖訪問底層硬件時,系統(tǒng)管理程序613可執(zhí)行對底層硬件適當的轉換,并可訪問物理寄存器本身,或將數據儲存在虛擬機器進程存儲器空間中,從該空間中,數據可由專用硬件或其類似物讀取并復制到適當的物理寄存器中。為提供從虛擬機器環(huán)境內對底層硬件設備的直接訪問,系統(tǒng)管理程序可避免執(zhí)行任何轉換,因為這類轉換可能是不正確的,而是相反,系統(tǒng)管理程序可以用可將必要的物理存儲器位置映射到諸如虛擬操作系統(tǒng)進程611所使用的存儲器空間等適當的存儲器空間中的方式,來修改頁表映射。如上所述,頁表映射確定了哪些物理存儲器位置被分配給給定的進程。由此,通過修改頁表映射以將對應于一個或多個設備的物理存儲器位置放置到虛擬操作系統(tǒng)進程存儲器空間中,系統(tǒng)管理程序使用虛擬操作系統(tǒng)可允許的擴展和應用程序直接訪問硬件設備。
在一個示例中,擴展615可以是硬件設備驅動程序,并可由虛擬操作系統(tǒng)進程611主宿,它可使用已知的存儲器讀和寫操作,可獲得對作為硬件620的一部分的對應硬件設備的直接訪問。提供硬件抽象的系統(tǒng)管理程序613可被設計成將來自擴展615的存儲器讀和寫操作識別為應當被轉換或被抽象的操作,并可允許他們通過以到達底層硬件。此外,由于系統(tǒng)管理程序613可在適當時修改頁表映射,因此存儲器讀和寫操作可在對應于擴展615試圖控制的硬件設備的預期的寄存器或其它物理存儲器位置上物理地執(zhí)行。因此,擴展615具有對與硬件設備相對應的存儲器寄存器或其它物理存儲器位置的直接控制,并且由此,即使從虛擬機器環(huán)境內也可直接控制這些設備。
然而,通過改變頁表映射,并允許擴展從虛擬機器環(huán)境內直接訪問硬件,主機操作系統(tǒng)進程601可變得受由擴展引入的不穩(wěn)定性的更多影響。例如,盡管虛擬機器進程617在硬件620上執(zhí)行,然而擴展615可以用不正確的方式直接訪問硬件620的某些組件,導致硬件組件不正確地運作,或甚至變得不可操作。隨后,在主機操作系統(tǒng)進程601恢復在硬件620上執(zhí)行之后,所訪問的硬件組件可繼續(xù)不正確地運作,并可能將不穩(wěn)定性引入到主機操作系統(tǒng)進程中,或者它可保持不可操作,并由此阻止主機操作系統(tǒng)進程執(zhí)行所需要的任務。因此,本發(fā)明的一個實施例構想的一種機制提供了對上述頁表映射修改的限制。例如,一種限制可以是僅在擴展所需的程度上修改頁表映射。由此,如果擴展僅需要訪問非常有限的地址范圍,可能包括物理地位于硬件設備上或對設備的接口上的存儲器寄存器的地址,則可僅在將有限的地址范圍映射到虛擬機器進程存儲器空間所需的程度上修改頁表映射。另一中限制可以是臨時限制,由此,可以僅在允許擴展完成其任務時修改頁表映射。例如,當擴展615試圖直接與硬件設備通信時,它可向系統(tǒng)管理程序613作出請求,指示它期望直接訪問的時間的長度。這一請求可以直接作出,或通過主宿擴展615的虛擬操作系統(tǒng)進程611來作出。一旦系統(tǒng)管理程序613接收到該請求,它可為所請求的時間長度修改頁表映射。
如本領域的技術人員所已知的,許多硬件設備通過接口硬件,如接口卡或其類似物連接到計算裝置。通常,這類接口硬件被附加到已知的總線機制上,諸如上文描述的那些總線機制??偩€地址可被映射到物理存儲器,它可進一步由運行在計算裝置上的軟件來訪問。因此,連接到總線的接口卡或其類似物的寄存器通常被稱為“存儲器映射的寄存器”,并可被映射到存儲器的一個或多個物理頁。然而,由于一組存儲器映射的寄存器很少與另一組存儲器映射的寄存器共享物理頁,因此對頁表映射的上述修改可在每一設備的基礎上作出。
此外,本發(fā)明的一個實施例構想的一種機制要求使用虛擬地址轉換,以允許某些存儲器映射的寄存器僅對虛擬機器進程617可用。以此方式,主機操作系統(tǒng)進程601可避免處理對其它沒有正確設備驅動程序的硬件,并且主宿在虛擬操作系統(tǒng)進程中的正確設備驅動程序可被授予對特定硬件設備的永久訪問權限。
本發(fā)明的一個實施例構想的用于提供對硬件的虛擬機器直接訪問的另一種機制允許從虛擬機器環(huán)境內訪問輸入/輸出(I/O)端口,而不需要由系統(tǒng)管理程序613執(zhí)行的仿真或其它修改。如本領域的技術人員所已知的,I/O端口一般由地址或端口號來標識,并可通過已知的“IN”或“OUT”命令來訪問。對于使用I/O端口來訪問硬件設備的設備驅動程序或其它軟件應用程序,IN和OUT命令可以通過軟件被轉發(fā)到命令中指定的硬件設備上的物理端口或寄存器,或者它們可直接從發(fā)出命令的設備驅動程序或其它應用程序傳遞到所標識的端口或寄存器。某些類型的CPU允許通過使用任務段中的I/O位圖來選擇性地通過或直接訪問,其中,I/O位圖指定了對其可通過軟件來傳遞指令的地址,以及對其可直接將指令發(fā)送到物理端口或寄存器的地址。
在正常的操作中,虛擬機器的系統(tǒng)管理程序,如系統(tǒng)管理程序613將俘獲I/O指令,或仿真I/O指令,以對虛擬機器環(huán)境內的軟件正確地抽象底層硬件620。如果系統(tǒng)管理程序613使用例如保護位圖俘獲了I/O指令,則本發(fā)明的一個實施例構想的一種機制要求修改保護位圖,以提供“突破口(hole)”,或系統(tǒng)管理程序將不會俘獲的I/O地址。由此,例如,如果擴展615(可以是設備驅動程序)需要使用特定I/O地址直接訪問硬件,則保護位圖可從虛擬機器進程617內,如從擴展615內檢測指定該I/O地址的I/O指令,并且保護位圖可允許那些I/O指令通過系統(tǒng)管理程序而不被俘獲。
然而,如果系統(tǒng)管理程序613仿真I/O指令,則本發(fā)明的一個實施例所考慮的機制要求修改系統(tǒng)管理程序,使得可在仿真前作出核查,并且對于指定特定地址的I/O指令不執(zhí)行仿真。由此,例如,如果擴展615需要直接訪問特定I/O地址處的硬件,系統(tǒng)管理程序613可核查接收的I/O指令中指定的I/O地址,并且如果接收到的I/O指令指定了擴展使用的特定地址,則系統(tǒng)管理程序可允許那些I/O指令通過而不被仿真。以此方式,即使從虛擬機器環(huán)境內,擴展也能直接訪問硬件。
如可以見到的,上述機制可向擴展和其它軟件應用程序提供甚至從虛擬機器內通過I/O端口對硬件的直接訪問。然而,如果擴展或其它軟件應用程序不被設計成通過I/O端口直接訪問硬件,而是相反依賴于操作系統(tǒng)來執(zhí)行這類硬件訪問,則本發(fā)明的一個實施例構想的一種機制提供了系統(tǒng)管理程序613的修改,使得當虛擬操作系統(tǒng)進程611檢測到來自擴展615或需要虛擬操作系統(tǒng)進程的其它軟件應用程序對通過I/O端口直接訪問硬件620的請求時,它可將請求傳遞到系統(tǒng)管理程序,后者然后可代表擴展或其它軟件應用程序執(zhí)行適當的I/O指令。或者,虛擬操作系統(tǒng)進程611可以自己執(zhí)行I/O指令,并且系統(tǒng)管理程序613可諸如通過使用上文詳細描述的機制讓指令通過。
通常用于與硬件通信的另一種機制被稱為直接存儲器訪問(DMA)。如本領域的技術人員已知的,DMA可允許設備驅動程序或其它軟件應用程序將數據傳遞到硬件設備或從硬件設備傳遞,而不對CPU形成負擔。更具體地,DMA提供了數據從一個或多個物理存儲器段到硬件設備本身的物理寄存器或相似元件的傳輸。這一傳輸由計算裝置上的電路協調,如專用DMA芯片,但是不需要CPU的協調。
一般而言,DMA請求可以是由操作系統(tǒng)或軟件應用程序提供給擴展的支持API的一部分。然而,由于上述虛擬支持API可由運行在虛擬機器環(huán)境內的虛擬操作系統(tǒng)進程提供,因此由虛擬機器環(huán)境內始發(fā)的DMA指定的存儲器地址可能不是應當向其定向硬件設備的正確物理地址。這可以由于眾多因素,最值得注意的是,DMA地址可能由系統(tǒng)管理程序作為系統(tǒng)管理程序執(zhí)行的硬件抽象的一部分來修改。因此,對于要正確執(zhí)行的DMA,可在虛擬機器環(huán)境中使用正確的物理地址。
本發(fā)明的一個實施例構想的用于為DMA提供正確的物理地址的一種機制要求系統(tǒng)管理程序613或虛擬操作系統(tǒng)進程611向擴展615提供適合硬件的DMA訪問的存儲器區(qū)域。另外,為免于惡意或不正確的DMA請求,系統(tǒng)管理程序613也可阻擋或偏轉到指向應當被保護的地址的任何DMA的正確地址。保護的地址可以例如在硬件620上首次執(zhí)行系統(tǒng)管理程序613時事先確定。保護的地址也可僅僅是無法提供與其它硬件設備的DMA通信所必須的支持的那些存儲器地址。作為又一替換方案,保護的地址可以是不參與當前DMA請求的地址的任一個或所有。通常,避免在DMA中使用受保護的地址可由計算裝置100本身上的專用DMA芯片、存儲器總線或類似的電路來實現。在這一情況下,系統(tǒng)管理程序613可獲知這些塊并使用它們,而非試圖通過軟件解決方案來阻擋或偏轉DMA。
為向擴展615提供適合DMA的存儲器地址,本發(fā)明的一個實施例構想的一種機制要求系統(tǒng)管理程序613監(jiān)視擴展615的操作,并檢測即將到來的DMA?;蛘撸摂M操作系統(tǒng)進程611可監(jiān)視擴展的操作,并向系統(tǒng)管理程序613提供相關信息,或虛擬操作系統(tǒng)本身可檢測即將到來的DMA。如上所述,擴展一般使用支持API來獲取對各種資源的訪問。因此,即將到來的DMA可通過監(jiān)控由擴展615通過虛擬操作系統(tǒng)進程提供的虛擬支持API調用的功能來檢測。某些已知的功能一般用于設置DMA,如,建立存儲器塊的請求,或對存儲器的物理地址的請求。因此,向虛擬服務API請求這些功能的擴展可被確定為可能準備執(zhí)行DMA。
與連續(xù)地監(jiān)視由擴展615作出的虛擬服務API功能調用相反,系統(tǒng)管理程序613或虛擬操作系統(tǒng)進程611可通過在調用一般用于設置DMA的已知功能時修改虛擬支持API以包括非法指令,來更有效地檢測可能的DMA。這一非法指令然后可生成俘獲,并向系統(tǒng)管理程序或虛擬操作系統(tǒng)進程警告即將到來的DMA。
一旦系統(tǒng)管理程序613或虛擬操作系統(tǒng)進程611諸如通過使用上述機制知道了即將到來的DMA,則它可向擴展615提供適當的存儲器地址范圍,從而允許DMA正確地繼續(xù)。在某些情況下,系統(tǒng)管理程序613可執(zhí)行存儲器交換或類似的存儲器管理,以能夠提供適當的存儲器地址范圍?;蛘?,系統(tǒng)管理程序613可依賴于主機計算裝置的已知分散/收集能力,以將要通過DMA發(fā)送到硬件設備或從硬件設備接收的信息放置到適當的存儲器范圍中。然而,因為擴展615由于一般由系統(tǒng)管理程序613執(zhí)行的轉換而期望非尋常地址,上述的進一步圖謀將不可能對擴展產生不利影響。
一旦向擴展615提供了存儲器地址,可能必須防止額外的進程訪問那些地址處的存儲器,直到DMA完成。如本領域的技術人員已知的,在計算裝置的正常操作期間,適合DMA的物理存儲器一般不被映射出去。然而,虛擬機器環(huán)境內的存儲器幾乎總是通常由系統(tǒng)管理程序映射出去。因此,有必要以通常不需要對分配給虛擬機器環(huán)境中的其它進程的存儲器完成的方式保護傳遞到擴展的存儲器地址。這一保護可由系統(tǒng)管理程序來完成,它可使用一種通常被稱為“鎖定(pinning)”的機制來“鎖定”指定的存儲器地址,直到DMA完成。
當然,一旦DMA完成,系統(tǒng)管理程序可釋放或“解鎖(unpin)”指定的存儲器位置。DMA的完成可以用與上文詳細描述的檢測即將到來的DMA非常相同的方式來檢測。例如,系統(tǒng)管理程序613或虛擬操作系統(tǒng)進程611可監(jiān)視由擴展615調用的功能。諸如解除分配指定的存儲器位置等功能可指示DMA已完成,并可用作對系統(tǒng)管理程序613能夠解鎖指定的存儲器位置的指示。
本發(fā)明的實施例解決的與硬件的直接通信的另一方法涉及將硬件中斷傳送到在虛擬機器環(huán)境內執(zhí)行的代碼。如本領域的技術人員已知的,硬件中斷可以是來自硬件設備、發(fā)送到適當的設備驅動程序或其它軟件應用程序的信號,它一般需要某一類型的響應或確認。如上所述,由于主機操作系統(tǒng)可能無法支持特定硬件設備的正確的設備驅動程序或其它控制軟件,因此需要將中斷定向到在虛擬機器環(huán)境內執(zhí)行的擴展。例如,圖1的計算裝置100被示出為連接到傳統(tǒng)設備199。如果操作系統(tǒng)134是現代操作系統(tǒng),則它可能無法正確地支持傳統(tǒng)設備199的設備驅動程序。因此,為使計算裝置100的用戶能夠使用傳統(tǒng)設備199,可在虛擬環(huán)境內執(zhí)行設備驅動程序或類似的控制軟件。因此,從傳統(tǒng)設備199接收到的任何中斷可僅當它們被定向到虛擬機器進程時被正確地處理,并允許通過以到達設備驅動程序。
本發(fā)明的一個實施例構想的用于將中斷定向到諸如擴展615等擴展的一種機制要求將接收到的中斷與表或類似的結構進行比較,以確定虛擬機器進程617是應當處理該中斷還是將其傳遞到主機操作系統(tǒng)進程601。更具體地,在僅具有單個CPU的計算裝置中,當虛擬機器進程617在CPU上執(zhí)行時,或者當主機操作系統(tǒng)進程601在CPU上執(zhí)行時,可接收中斷。本發(fā)明的機制可應用于中斷到達而虛擬機器進程617在CPU上執(zhí)行的情況。在這一情況下,系統(tǒng)管理程序613可確定中斷的原因或目標。系統(tǒng)管理程序613然后可確定中斷是否由虛擬機器環(huán)境中的擴展,如擴展615,通過例如執(zhí)行表查找來適當地處理。如果中斷由擴展615適當地處理,則系統(tǒng)管理程序613可將中斷傳遞到虛擬機器進程617,并由此傳遞到擴展。如果中斷由與主機操作系統(tǒng)進程601相關聯的擴展或其它軟件應用程序適當地處理,則系統(tǒng)管理程序613可完成硬件20上的虛擬機器進程617的執(zhí)行,并允許主機操作系統(tǒng)進程恢復硬件上的執(zhí)行,并以適當的方式中斷。
如果系統(tǒng)管理程序613將中斷傳遞到虛擬機器進程617,它可修改中斷所到達的中斷線的數量,以維持與虛擬操作系統(tǒng)進程611的兼容性。由此,當啟用中斷線時,系統(tǒng)管理程序613可驗證中斷線信息對應于物理中斷線。系統(tǒng)管理程序613然后可在物理中斷線和仿真的中斷線之間轉換。
由于虛擬機器可仿真不同于其上執(zhí)行虛擬機器進程617的硬件620的硬件,因此系統(tǒng)管理程序613可能需要將單個虛擬機器指令仿真為主機硬件上的多個指令。例如,如果虛擬機器正在仿真正在執(zhí)行其上的物理CPU的不同類型的CPU,則當由正在被仿真的CPU執(zhí)行時可能僅需要單個CPU周期的指令在由物理CPU執(zhí)行時可能需要多個CPU周期。在這一情況下,對系統(tǒng)管理程序613重要的是以單一的方式處理物理CPU的多個CPU周期,以維持與仿真的CPU的兼容性。由此,如果當系統(tǒng)管理程序613在執(zhí)行物理CPU上與仿真的CPU的單個周期相關的一系列周期的中間時硬件中斷到達,則系統(tǒng)管理程序可忽略、排隊或延遲該中斷,直到該CPU周期序列完成。
本發(fā)明的一個實施例構想的用于將中斷定向到虛擬機器進程中的擴展的另外的機制要求主機操作系統(tǒng)進程在將控制傳遞到虛擬機器進程之前延遲中斷、一旦接收中斷就將控制傳遞到虛擬機器進程、或試圖在主機進程內用指向虛擬機器進程的適當指針來執(zhí)行擴展。如上所述,在僅具有單個CPU的計算裝置內,當虛擬機器進程617在CPU上執(zhí)行時,或者當主機操作系統(tǒng)進程601在CPU上執(zhí)行時,可接收中斷。本發(fā)明的機制可應用于當主機操作系統(tǒng)進程601在CPU上執(zhí)行時中斷到達的情況。最初,主機操作系統(tǒng)可能已經預定義了用于將中斷定向到適當設備驅動程序的過程。例如,這類過程可在主機操作系統(tǒng)的引導過程期間建立,如當加載設備驅動程序時。因此,擴展615的調用可試圖充分利用這些預定義的過程,并指示主機操作系統(tǒng)進程601,從特定硬件設備接收到的中斷應當被定向到虛擬機器進程617。
因此,當主機操作系統(tǒng)進程601在CPU上執(zhí)行時接收到應當被發(fā)送到擴展615的中斷,主機操作系統(tǒng)進程可執(zhí)行類似于當它接收任何其它中斷時所執(zhí)行的過程,而它可確定處理該中斷的適當軟件正在虛擬機器進程617內執(zhí)行的情況除外。主機操作系統(tǒng)進程601然后可試圖例如通過禁用中斷、完成一個或多個任務、將執(zhí)行切換到虛擬機器進程617以及然后重新啟用中斷,將中斷傳遞到擴展615。由于當重新啟用中斷時虛擬機器進程617因此將會在CPU上執(zhí)行,中斷可由虛擬機器進程617接收,并由其以上文詳細描述的方式來處理。
如本領域的技術人員所已知的,硬件設備一般可使用兩種不同類型的中斷保持活動直到它被處理或響應的永久中斷,以及可拋出閉鎖然后結束的瞬時中斷。使用上述機制,虛擬機器進程617可在一旦重新啟用中斷后就檢測到永久中斷,因為永久中斷從未被去激活。由此,對于永久中斷,虛擬機器進程617可使用上文詳細描述的機制來以如同當虛擬機器進程在CPU上執(zhí)行時它最初到達的相同方式來處理該中斷。然而,對于瞬時中斷,指示中斷出現的閉鎖會變得未完成。因此,除非出現另一中斷以重新拋出閉鎖,否則如果當主機操作系統(tǒng)進程601在CPU上執(zhí)行時出現中斷,虛擬機器進程617將從未獲知該中斷。由此,主機操作系統(tǒng)進程601可跟蹤或儲存在將執(zhí)行傳遞到虛擬機器進程617之前出現的一個或多個瞬時中斷。主機操作系統(tǒng)進程601可將信息傳遞到系統(tǒng)管理程序613,以通知系統(tǒng)管理程序出現了瞬時中斷,并可在適當時提供瞬時中斷的數量。一旦虛擬機器進程617在CPU上執(zhí)行,系統(tǒng)管理程序613然后可依次仿真瞬時中斷,并允許擴展615以同樣的方法響應它們。一旦系統(tǒng)管理程序613完成了對瞬時中斷的仿真,它然后可重新啟用中斷。
在某些情況下,可能需要用高于上述過程可提供的速度來處理或響應硬件中斷。在這一情況下,本發(fā)明的一個實施例構想的一種機制要求當檢測到由諸如擴展615等運行在虛擬機器進程中的擴展正確處理的中斷,主機操作系統(tǒng)進程601立即將執(zhí)行傳遞到虛擬機器進程617,而非禁用中斷,并試圖使用上述機制來完成一個或多個任務。然后,系統(tǒng)管理程序613可以是單線程的,它可延遲中斷的檢測,并且如果系統(tǒng)管理程序正在等待響應或某一其它信息,可因此延遲中斷的服務。
為避免由于系統(tǒng)管理程序的單線程而引起的延遲,本發(fā)明的一個實施例構想的上述機制的變異要求系統(tǒng)管理程序613仿真多個CPU計算設備,并且虛擬操作系統(tǒng)進程611能夠在多CPU環(huán)境中操作。另外,系統(tǒng)管理程序613可以至少一個被仿真的CPU保持在可接受中斷的狀態(tài)中的方式構造指令的執(zhí)行。例如,如上所述,可通過將命令傳遞到虛擬機器進程,然后高速緩存主機操作系統(tǒng)進程的基礎并在硬件620上執(zhí)行虛擬機器進程,來從主機操作系統(tǒng)進程601調用虛擬機器進程617。系統(tǒng)管理程序613可通過將從主機操作系統(tǒng)進程601接收到的命令傳遞到其它仿真的CPU,將一個仿真的CPU保持在可接受中斷的狀態(tài)。因此,由于被保持的CPU不被允許來處理來自主機操作系統(tǒng)進程601的命令,它可維持它可立即處理接收到的中斷的狀態(tài)。
因此,如果中斷要到達,而底層主機操作系統(tǒng)進程601正在硬件620上執(zhí)行,并且中斷需要低等待時間,則主機操作系統(tǒng)進程盡可能快地將控制傳遞到虛擬機器進程617。一旦虛擬機器進程617開始在硬件620上執(zhí)行,虛擬機器進程的至少一個仿真的CPU處于它可接受中斷的狀態(tài)。由此,即使其它仿真的CPU處于它們可執(zhí)行功能或等待響應的狀態(tài),中斷可以由被保留用于中斷的至少一個仿真的CPU以有效的方式來處理。系統(tǒng)管理程序613和虛擬操作系統(tǒng)進程611然后可以用上文詳細描述的方式執(zhí)行必要的步驟以將中斷傳送到適當的軟件,如擴展615。此外,同樣如上所述,由于系統(tǒng)管理程序613可能需要物理存儲器被鎖定,因此可允許接收中斷的仿真的CPU在將控制返回到另一仿真的CPU或另一進程之前完成對中斷的處理。以此方式,至少一個仿真的CPU可被保存用于及時處理中斷。
本發(fā)明的一個實施例構想的提供硬件中斷的低等待時間處理的另一種機制要求主機操作系統(tǒng)進程601從擴展615中取出用于中斷服務例程的代碼,并用指回虛擬機器進程617的適當數據指針自己執(zhí)行該代碼。例如,主機操作系統(tǒng)進程601可從虛擬機器進程617的存儲器空間的起始跟蹤適當的中斷服務例程。一旦被定位,那些中斷服務例程可被復制到主機操作系統(tǒng)進程601中,并在那里被執(zhí)行以用非常低的等待時間來處理中斷。
由于中斷服務例程旨在虛擬機器進程617的處理空間內執(zhí)行,因此主機操作系統(tǒng)進程601在它復制那些例程并執(zhí)行它們時,可提供指回虛擬機器進程的數據指針,使得例程可正確地運作。例如,主機操作系統(tǒng)進程601可改變中斷服務例程或頁表映射的適當指令,以引用虛擬機器進程617內的存儲器。可使用已知的軟件故障隔離技術來修改適當的指令并提供故障隔離的措施。如本領域的技術人員所已知的,軟件的執(zhí)行可通過在被監(jiān)視的軟件的命令之間插入適當的命令來監(jiān)視。為避免對重新編譯被監(jiān)視的軟件的需求,插入的命令可以是可被插入到已編譯代碼的低級命令。例如,諸如通過將地址與已知的地址范圍比較來核查要訪問的存儲器位置的地址的插入的指令可以優(yōu)于通過將位置的內容復制到寄存器來訪問特定存儲器位置的低級指令。如果存儲器位置是不正確的位置,例如,如果它位于適當的地址范圍之外,則可作出修改以將適當的地址替代到訪問請求中。以此方式,每一存儲器訪問指令可被修改,以訪問正確的存儲器位置,盡管事實是中斷處理例程可以在主機操作系統(tǒng)進程601而非虛擬機器進程617中執(zhí)行。
如上所述,盡管中斷處理例程直接在主機操作系統(tǒng)進程601中執(zhí)行,軟件故障隔離技術也可提供故障隔離的措施。例如,軟件故障隔離的一方面通過在每一存儲器寫指令前插入低級指令以確保寫執(zhí)行所定向的位置是正確的位置來實現。如本領域的技術人員所已知的,由于故障緣由數據被寫入到不正確存儲器位置的數據中導致的故障,軟件故障經常導致不穩(wěn)定性。此外,這一不正確的寫指令是很難檢測到的,因為在完成直接前一指令之前,向其寫入數據的地址可能無法被確定。通過緊靠任何存儲器寫之前插入上述指令,可例如通過將這些寫指令所定向的存儲器地址與已知的存儲器地址范圍進行比較,來核查這些存儲器地址。因此,寫被定向到已知范圍之外的存儲器位置的指示可表明寫指令是不正確的,且可能導致不穩(wěn)定性。因此,寫指令可被修改或中止,并可實現故障隔離措施。也可使用故障隔離措施的其它方面,包括沙箱(sandbox)控制流、特權指令的使用等等。關于軟件故障隔離的各方面的額外信息,包括上述信息,可在Wahbe等人的美國專利號5,761,477中找到,其內容通過整體引用結合于此,以進一步解釋或描述包含在本發(fā)明中與其揭示相一致的任何教導或建議。
然而,某些計算裝置可具有多個物理CPU,在這一情況下,上述機制中的某一些可能不是必需的。例如,在具有多個物理CPU的計算裝置中,單個CPU可能總是執(zhí)行虛擬機器進程617。在這一情況下,本發(fā)明的一個實施例所構想的一種機制要求硬件中斷的控制機制(通常是作為計算裝置本身的一部分的專用電路)將需要諸如擴展615等擴展的所有中斷定向到虛擬機器進程617總是在其上運行的物理CPU。即使虛擬機器進程617與其它進程共享物理CPU,但是總是共享同一物理CPU,將需要擴展615的所有中斷定向到該物理CPU仍可在與上述用于將中斷傳遞到適當的虛擬機器進程的機制相組合時提供最優(yōu)的解決方案,即使它當前不在物理CPU上執(zhí)行也是如此。
然而,如果虛擬機器進程617可以在多個物理CPU上的任何一個上執(zhí)行,則可使用處理器間消息來允許任一處理器響應硬件中斷。例如,如果虛擬機器進程617碰巧在第一物理CPU上執(zhí)行,而可由擴展615處理的中斷到達第二物理CPU,則第二物理CPU可將相關信息傳遞到第一物理CPU,以允許擴展處理硬件中斷。如本領域的技術人員所已知的,很難物理地將硬件中斷從一個物理CPU轉發(fā)到另一個。因此,通過使用處理器間消息,中斷可如同它到達正確的物理CPU那樣被處理。
鑒于可應用本發(fā)明的原理的許多可能的實施例,應當認識到,此處相對于附圖所描述的實施例僅意味著說明性的,并不應當作為對本發(fā)明的范圍的限制。例如,本領域的技術人員可以認識到,所示的實施例中以軟件示出的某些元素可以用硬件來實現,反之亦然,或者所示的實施例可以在不脫離本發(fā)明的精神的情況下在排列和細節(jié)上作出修改。類似地,應當認識到,在虛擬機器環(huán)境中所描述的機制可以應用于在公用操作系統(tǒng)之上創(chuàng)建的虛擬環(huán)境,反之亦然。例如,上文結合虛擬機器環(huán)境描述的軟件故障隔離技術可等效地應用于其中可能不期望過多環(huán)境變換的任何情況,包括即使兩個進程共享一個公用的底層操作系統(tǒng),也將擴展例程從虛擬進程復制到主機進程的情況。因此,此處所描述的本發(fā)明構想所有這樣的實施例落入所附權利要求書及其等效技術方案的范圍之內。
權利要求
1.一種用于隔離由主機進程使用的擴展的方法,其特征在于所述方法包括以下步驟檢測所述主機進程的操作,其中,所述操作與所述擴展的功能有關;為所述擴展標識一代理,其中,所述代理支持與所述操作有關的功能;將所述代理加載到所述主機進程中;將所述擴展加載到一虛擬進程中,其中,所述虛擬進程是所述主機進程的虛擬實例;將與所述操作相關聯的請求從所述主機進程中的代理轉發(fā)到所述虛擬進程中的擴展;以及將來自所述擴展的響應轉發(fā)到所述主機進程中的代理,其中,所述響應可由所述代理用于支持所述主機進程的操作。
2.如權利要求1所述的方法,其特征在于,還包括以下步驟檢測所述虛擬進程中的錯誤;以及用錯誤指示將控制返回給所述主機進程。
3.如權利要求1所述的方法,其特征在于,所述操作是對所述擴展的調用,并且其中,所述代理向所述主機進程展示與所述擴展相關聯的服務API。
4.如權利要求1所述的方法,其特征在于,所述虛擬進程向所述擴展提供與所述主機進程相關聯的支持API。
5.如權利要求1所述的方法,其特征在于,轉發(fā)所述請求包括將來自所述主機進程的請求轉發(fā)到所述虛擬進程中的一占位程序,其中,如果所述擴展已被加載到所述主機進程中,則所述擴展以與所述擴展接收來自所述主機進程的請求一樣的方式接收來自所述占位程序的請求。
6.如權利要求1所述的方法,其特征在于,轉發(fā)所述響應包括檢測所述擴展或所述虛擬進程的非相容響應或故障;并且由所述代理向所述主機進程提供令所述主機進程提供的功能能夠溫和地退化的適當指示。
7.如權利要求1所述的方法,其特征在于,還包括以下步驟通過將用戶模式環(huán)境從所述主機進程復制到所述虛擬進程,在所述虛擬進程中提供所述主機進程的用戶模式環(huán)境。
8.如權利要求1所述的方法,其特征在于,還包括以下步驟通過將主機進程存儲器和虛擬進程存儲器映射到一公用物理存儲器,在所述虛擬進程中提供所述主機進程的用戶模式環(huán)境;以及保護所述公用物理存儲器不受所述虛擬進程的寫訪問。
9.如權利要求1所述的方法,其特征在于,所述虛擬進程是使用一保存的相干狀態(tài)創(chuàng)建的虛擬機器進程,所保存的相干狀態(tài)通過執(zhí)行以下步驟來創(chuàng)建引導一初始虛擬機器;以及保存由所述初始虛擬機器的引導所創(chuàng)建的相干狀態(tài)。
10.如權利要求1所述的方法,其特征在于,所述主機進程是操作系統(tǒng)進程,而所述虛擬進程是使用所保存的相干狀態(tài)創(chuàng)建的虛擬機器進程,所保存的相干狀態(tài)通過記錄所述操作系統(tǒng)進程的引導期間的狀態(tài)來創(chuàng)建。
11.一種有效地創(chuàng)建虛擬操作系統(tǒng)環(huán)境的方法,其特征在于,所述方法包括以下步驟在具有至少一個處理器的計算裝置上開始一操作系統(tǒng)環(huán)境的引導;在所述操作系統(tǒng)環(huán)境的引導期間,向所述至少一個處理器指示所述計算裝置具有一個或多個額外的處理器;在所述至少一個處理器和所述一個或多個額外處理器被初始化之后,保存所述操作系統(tǒng)環(huán)境引導期間的狀態(tài);在所述操作系統(tǒng)環(huán)境完成了與所述至少一個處理器相關聯的至少一個組件綁定之后,向所述操作系統(tǒng)環(huán)境指示所述一個或多個額外處理器發(fā)生故障;向所述虛擬操作系統(tǒng)環(huán)境提供所保存的狀態(tài);使用所保存的狀態(tài)引導所述虛擬操作系統(tǒng)環(huán)境,其中,引導所述虛擬操作系統(tǒng)環(huán)境包括防止所述至少一個處理器訪問與所述至少一個組件綁定相關聯的至少一個組件;以及使用用于向所述一個或多個額外處理器提供對與所述至少一個處理器相關聯的至少一個組件綁定的訪問的預先存在的支持,向所述虛擬操作系統(tǒng)環(huán)境提供對所述至少一個組件綁定的訪問。
12.如權利要求11所述的方法,其特征在于,引導所述虛擬操作系統(tǒng)環(huán)境還包括依賴于與所述至少一個處理器相關聯的至少一個組件綁定;以及使用所述一個或多個額外處理器來完成所述虛擬操作系統(tǒng)環(huán)境的引導。
13.如權利要求11所述的方法,其特征在于,還包括創(chuàng)建所述虛擬操作系統(tǒng)環(huán)境中對一指定組件的指定組件綁定,其中,所述指定組件與主宿在所述虛擬操作系統(tǒng)環(huán)境中的設備驅動程序接口。
14.如權利要求13所述的方法,其特征在于,創(chuàng)建所述指定組件綁定包括在所述主機操作系統(tǒng)環(huán)境的引導期間高速緩存與所述指定組件有關的通信;以及向所述虛擬操作系統(tǒng)環(huán)境提供高速緩存的通信。
15.如權利要求13所述的方法,其特征在于,創(chuàng)建所述指定組件綁定包括將所述指定組件綁定到所述主機操作系統(tǒng)環(huán)境;從所述主機操作系統(tǒng)環(huán)境內休眠所述指定組件,其中,所述休眠清楚地清洗了與所述指定組件有關的通信隊列;以及將所述指定組件綁定到所述虛擬操作系統(tǒng)環(huán)境。
16.一種具有計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令用于隔離由一主機進程使用的擴展,所述計算機可讀介質包括計算機可執(zhí)行指令,用于檢測所述主機進程的操作,其中,所述操作與所述擴展的功能有關;為所述擴展標識一代理,其中,所述代理支持與所述操作有關的功能;將所述代理加載到所述主機進程中;將所述擴展加載到一虛擬進程中,其中,所述虛擬進程是所述主機進程的實例;將與所述操作相關聯的請求從所述主機進程中的代理轉發(fā)到所述虛擬進程中的擴展;以及將來自所述擴展的響應轉發(fā)到所述主機進程中的代理,其中,所述響應可由所述代理用于支持所述主機進程的操作。
17.如權利要求16所述的計算機可讀介質,其特征在于,所述主機進程不被設計成調用所述擴展。
18.如權利要求16所述的計算機可讀介質,其特征在于,還包括計算機可執(zhí)行指令,用于檢測所述虛擬進程中的錯誤;以及用一錯誤指示將控制返回給所述主機進程。
19.如權利要求16所述的計算機可讀介質,其特征在于,所述操作是對所述擴展的調用,并且其中,所述代理向所述主機進程展示與所述擴展相關聯的服務。
20.如權利要求16所述的計算機可讀介質,其特征在于,還包括用于使用軟件故障隔離技術執(zhí)行所述主機進程中的擴展的通常被調用的輕量級功能的計算機可執(zhí)行指令。
21.如權利要求16所述的計算機可讀介質,其特征在于,所述虛擬進程向所述擴展提供與所述主機進程相關聯的支持API。
22.如權利要求16所述的計算機可讀介質,其特征在于,用于轉發(fā)所述請求的計算機可執(zhí)行指令包括用于將來自所述主機進程的請求轉發(fā)到所述虛擬進程中一占位程序的計算機可執(zhí)行指令,其中,如果所述擴展已被加載到所述主機進程中,則所述擴展以與所述擴展接收來自所述主機進程的請求的同一方式接收來自所述占位程序的請求。
23.如權利要求16所述的計算機可讀介質,其特征在于,用于轉發(fā)所述響應的計算機可執(zhí)行指令包括計算機可執(zhí)行指令,用于檢測所述擴展或所述虛擬進程的非相容響應或故障;以及由所述代理向所述主機進程提供令所述主機進程提供的功能能夠溫和地退化的適當指示。
24.如權利要求16所述的計算機可讀介質,其特征在于,還包括計算機可執(zhí)行指令,用于通過將用戶模式環(huán)境從所述主機進程復制到所述虛擬進程,在所述虛擬進程中提供所述主機進程的用戶模式環(huán)境。
25.如權利要求16所述的計算機可讀介質,其特征在于,還包括計算機可執(zhí)行指令,用于通過將主機進程存儲器和虛擬進程存儲器映射到一公用物理存儲器,在所述虛擬進程中提供所述主機進程的用戶模式環(huán)境;以及保護所述公用物理存儲器不受所述虛擬進程的寫訪問。
26.如權利要求25所述的計算機可讀介質,其特征在于,保護所述公用物理存儲器包括實現一存儲器保護方案,它選自包括只讀訪問、寫復制訪問和核對寫回訪問的存儲器保護方案組。
27.如權利要求16所述的計算機可讀介質,其特征在于,所述虛擬進程是使用一保存的相干狀態(tài)創(chuàng)建的虛擬機器進程,所保存的相干狀態(tài)由用于執(zhí)行以下步驟的計算機可執(zhí)行指令來創(chuàng)建引導一初始虛擬機器;以及保存由所述初始虛擬機器的引導創(chuàng)建的相干狀態(tài)。
28.如權利要求16所述的計算機可讀介質,其特征在于,所述主機進程是操作系統(tǒng)進程,而所述虛擬進程是使用一保存的相干狀態(tài)創(chuàng)建的虛擬機器進程,所保存的相干狀態(tài)通過記錄所述操作系統(tǒng)進程的引導期間的狀態(tài)來創(chuàng)建。
29.一種具有計算機可執(zhí)行指令的計算機可讀介質,所述計算機可執(zhí)行指令用于有效地創(chuàng)建一虛擬操作系統(tǒng)環(huán)境,所述計算機可讀介質包括計算機可執(zhí)行指令,用于在具有至少一個處理器的計算裝置上開始一操作系統(tǒng)環(huán)境的引導;在所述操作系統(tǒng)環(huán)境的引導期間,向所述至少一個處理器指示所述計算裝置具有一個或多個額外處理器;在所述至少一個處理器和所述一個或多個額外處理器被初始化之后,保存所述操作系統(tǒng)環(huán)境引導期間的狀態(tài);在所述操作系統(tǒng)環(huán)境完成了與所述至少一個處理器相關聯的至少一個組件綁定之后,向所述操作系統(tǒng)環(huán)境指示所述一個或多個額外處理器發(fā)生故障;向所述虛擬操作系統(tǒng)環(huán)境提供所保存的狀態(tài);使用所保存的狀態(tài)引導所述虛擬操作系統(tǒng)環(huán)境,其中,引導所述虛擬操作系統(tǒng)環(huán)境包括防止所述至少一個處理器訪問與所述至少一個組件綁定相關聯的至少一個組件;以及使用用于向所述一個或多個額外處理器提供對與所述至少一個處理器相關聯的至少一個組件綁定的訪問的預先存在的支持,向所述虛擬操作系統(tǒng)環(huán)境提供對所述至少一個組件綁定的訪問。
30.如權利要求29所述的計算機可讀介質,其特征在于,引導所述虛擬操作系統(tǒng)環(huán)境還包括依賴于與所述至少一個處理器相關聯的至少一個組件綁定;以及使用所述一個或多個額外處理器完成所述虛擬操作系統(tǒng)環(huán)境的引導。
31.如權利要求29所述的計算機可讀介質,其特征在于,還包括計算機可執(zhí)行指令,用于創(chuàng)建所述虛擬操作系統(tǒng)環(huán)境中對一指定組件的指定組件綁定,其中,所述指定組件與主宿在所述虛擬操作系統(tǒng)環(huán)境中的設備驅動程序接口。
32.如權利要求31所述的計算機可讀介質,其特征在于,用于創(chuàng)建所述指定組件綁定的計算機可執(zhí)行指令包括計算機可執(zhí)行指令,用于在所述主機操作系統(tǒng)環(huán)境引導期間捕捉所述指定組件的控制信息;以及向主宿在所述虛擬操作系統(tǒng)環(huán)境中的設備驅動程序提供所述控制信息。
33.如權利要求31所述的計算機可讀介質,其特征在于,用于創(chuàng)建所述指定組件綁定的計算機可執(zhí)行指令包括計算機可執(zhí)行指令,用于在所述主機操作系統(tǒng)環(huán)境中建立對應于所述虛擬操作系統(tǒng)環(huán)境中的設備驅動程序的代理;由所述代理高速緩存被傳送到所述主機操作系統(tǒng)環(huán)境的輸入/輸出分組;以及由所述代理將所高速緩存的輸入/輸出分組發(fā)送到所述虛擬操作系統(tǒng)環(huán)境中的設備驅動程序。
34.如權利要求31所述的計算機可讀介質,其特征在于,用于創(chuàng)建所述指定組件綁定的計算機可執(zhí)行指令包括計算機可執(zhí)行指令,用于將所述指定組件綁定到所述主機操作系統(tǒng)環(huán)境;從所述主機操作系統(tǒng)環(huán)境內休眠所述指定組件,其中,所述休眠清楚地清洗了與所述指定組件有關的通信隊列;以及將所述指定組件綁定到所述虛擬操作系統(tǒng)環(huán)境。
35.一種計算裝置,包括一個或多個處理器;以及一存儲器存儲,所述存儲器存儲包括計算機可執(zhí)行指令,用于創(chuàng)建一主機進程,其中,所述主機進程執(zhí)行一操作;創(chuàng)建一虛擬進程,其中,所述虛擬進程是所述主機進程的實例,并且其中,所述虛擬進程還支持與所述操作相關聯的擴展;將與所述操作相關聯的代理加載到所述主機進程中;將所述擴展加載到所述虛擬進程中;將來自所述代理的請求轉發(fā)到所述擴展;以及將來自所述擴展的響應轉發(fā)到所述代理,其中,所述響應可由所述代理用于支持所述操作。
36.如權利要求35所述的計算裝置,其特征在于,所述存儲器存儲還包括計算機可執(zhí)行指令,用于檢測所述擴展或所述虛擬進程的非相容響應或故障;以及由所述代理向所述主機進程提供令所述主機進程提供的功能能夠溫和地退化的適當指示。
37.如權利要求35所述的計算裝置,其特征在于,所述存儲器存儲還包括計算機可執(zhí)行指令,用于通過將用戶模式環(huán)境從所述主機進程復制到所述虛擬進程,或者通過將主機進程存儲器或虛擬進程存儲器映射到一公用物理存儲器,在所述虛擬進程中提供所述主機進程的用戶模式環(huán)境。
38.如權利要求35所述的計算裝置,其特征在于,所述主機進程是操作系統(tǒng)進程,而所述虛擬進程是使用所保存的相干狀態(tài)創(chuàng)建的虛擬機器進程,所保存的相干狀態(tài)由執(zhí)行以下步驟的計算機可執(zhí)行指令創(chuàng)建引導一初始虛擬機器,并保存由所述初始虛擬機器的引導所創(chuàng)建的狀態(tài);所保存的相干狀態(tài)或者由執(zhí)行以下步驟的計算機可執(zhí)行指令創(chuàng)建保存由所述操作系統(tǒng)進程的引導所創(chuàng)建的狀態(tài)。
39.如權利要求35所述的計算裝置,其特征在于,所述主機進程是操作系統(tǒng)進程,而所述虛擬進程是虛擬機器進程,所述存儲器存儲還包括計算機可執(zhí)行指令,用于在所述操作系統(tǒng)進程引導期間,指示所述計算裝置具有一個或多個額外處理器;在所述一個或多個處理器以及所述一個或多個額外處理器被初始化之后,保存所述操作系統(tǒng)進程的引導期間的狀態(tài);在所述操作系統(tǒng)進程完成了與所述一個或多個處理器相關聯的所述至少一個組件綁定之后,向所述操作系統(tǒng)進程指示所述一個或多個額外處理器發(fā)生故障;向所述虛擬機器進程提供所保存的狀態(tài);使用所保存的狀態(tài)引導所述虛擬機器進程,其中,引導所述虛擬機器進程包括防止所述一個或多個處理器訪問與所述至少一個組件綁定相關聯的至少一個組件;以及使用用于向所述一個或多個額外處理器提供對與所述一個或多個處理器相關聯的至少一個組件綁定的訪問的預先存在的支持,向所述虛擬機器進程提供對所述至少一個組件綁定的訪問。
40.如權利要求39所述的計算裝置,其特征在于,所述存儲器存儲還包括計算機可執(zhí)行指令,用于創(chuàng)建所述虛擬機器進程中對一指定組件的指定組件綁定;其中,所述指定組件與主宿在所述虛擬進程中的設備驅動程序接口。
全文摘要
操作系統(tǒng)或軟件應用程序的擴展可被主宿在虛擬環(huán)境中,以對擴展進行故障隔離。由主機進程調用的一般代理擴展可協調提供與主機進程相同的支持API的虛擬進程中適當擴展的調用。此外,可通過存儲器復制或頁表修改將用戶模式環(huán)境提供給虛擬進程中的擴展。另外,虛擬進程,尤其是運行在虛擬機器上的虛擬操作系統(tǒng)進程,可通過克隆一相干狀態(tài)來有效地創(chuàng)建。相干狀態(tài)可以在虛擬機器啟動時,或者在計算裝置啟動且觀察并保存了適當的參數時起動。或者,操作系統(tǒng)在引導過程中可通過相信存在額外的CPU來創(chuàng)建相關狀態(tài)。
文檔編號G06F9/445GK1722092SQ20051007012
公開日2006年1月18日 申請日期2005年4月29日 優(yōu)先權日2004年4月30日
發(fā)明者E·P·沃伯, P·巴勒姆, T·羅德, U·埃林松 申請人:微軟公司