处理器虚拟化简介
1、處理器虛擬化是VMM(Hypervison)中最核心的部分,因為內(nèi)存或者I/O的指令本身就是敏感指令,所以內(nèi)存虛擬化與IO虛擬化都依賴與處理器虛擬化的正確實現(xiàn)。
1)、指令模擬
VMM運行在最高特權(quán)級,可以控制處理器上所有關(guān)鍵資源;而客戶機操作系統(tǒng)運行在非最高特權(quán)級。所以其敏感指令會陷入到VMM中通過軟件的方式進行模擬。從客戶機操作系統(tǒng)的角度而言,無論是一條指令是直接執(zhí)行在物理處理器上,還是被VMM軟件模擬,其期望的執(zhí)行效果必須正確。所以處理器虛擬化的關(guān)鍵在于正確模擬指令的行為。
在介紹指令模擬之前,我們理解三個概念:虛擬寄存器、上下文和虛擬處理器。它們有助于理解虛擬處理器模擬指令。
從某種程度上來說,物理處理器無非包括了一些存放數(shù)據(jù)的物理寄存器,并且規(guī)定了使用這些寄存器的指令集,然后按照一段預(yù)先寫好的指令流,在給定的部分寄存器來完成某種目的。
在沒有虛擬化的環(huán)境里,操作系統(tǒng)直接訪問物理處理器,處在最高特權(quán)級別,可以控制系統(tǒng)中所有關(guān)鍵資源,包括寄存器、內(nèi)存和I/O外設(shè)等。但是當(dāng)VMM接管物理處理器后,昔日的操作系統(tǒng)稱為客戶機操作系統(tǒng)而降級到非最高特權(quán)級別上,這時,其試圖訪問關(guān)鍵資源的指令就稱為了敏感指令。VMM會通過各種手段,保證這些敏感指令的執(zhí)行能夠觸發(fā)異常,從而陷入到VMM進行模擬,以防對VMM自身的運行造成破壞。
所以,當(dāng)客戶機操作系統(tǒng)試圖訪問關(guān)鍵資源的時候,該請求并不會真正發(fā)生在物理寄存器上,相反,VMM會通過準確的模擬物流處理器的行為,而將其訪問定位到VMM為其設(shè)計與物理寄存器對應(yīng)的“虛擬”的寄存器上。當(dāng)然,從VMM實現(xiàn)來說,這樣的虛擬寄存器往往是在內(nèi)存中。
當(dāng)處理器取下一條指令MOV?CR0,EAX后,發(fā)現(xiàn)特權(quán)級別不符合,則拋出異常,VMM截獲這個異常之后模擬處理器的行為,讀取EAX的內(nèi)容并存放到虛擬的CR0中。由于虛擬的CR0存放在VMM為該虛擬機設(shè)置的內(nèi)存區(qū)域里,因此該指令執(zhí)行的結(jié)果并不會讓物理的CR0的內(nèi)容發(fā)生改變。等到下一次,當(dāng)虛擬機試圖讀CR0時,處理器也會拋出異常,然后由VMM從虛擬的CR0而不是物理的CR0中返回內(nèi)容給虛擬機。
在沒有虛擬化的環(huán)境里,操作系統(tǒng)直接負責(zé)處理器管理,負責(zé)進程間調(diào)度和切換。但是,VMM接管處理器后,客戶機操作系統(tǒng)沒有管理物理處理器的權(quán)利,可以說此時它已經(jīng)運行在VMM為之設(shè)計的虛擬處理器之上,管理虛擬處理器,并在虛擬處理器上負責(zé)該虛擬機內(nèi)進程間調(diào)度和切換。而VMM管理物理處理器,負責(zé)虛擬處理器的調(diào)度和切換,以保證在給定時間內(nèi),每個虛擬處理器上的當(dāng)前進程可以在物理處理器上運行一段時間。但是,不管是何種?調(diào)度切換,必然要涉及到保留現(xiàn)場,這個現(xiàn)場就是上下文狀態(tài),只不過前一種情況是進程上下文,后一種情況是虛擬處理器上下文。為了讓讀者更好地理解,我們從進程上下文開始類比的介紹。
通過之前的內(nèi)存介紹,在某個時刻,物理處理器中的寄存器狀態(tài)構(gòu)成了當(dāng)前進程上下文狀態(tài)。
進程上下文主要是與運算相關(guān)的寄存器狀態(tài),例如EIP寄存器指向進程當(dāng)前執(zhí)行的指令,ESP存放著當(dāng)前進程的堆棧指針等。當(dāng)操作系統(tǒng)進行調(diào)度時,當(dāng)前進程的上下文,即上述寄存器狀態(tài)被保存在進程特定的內(nèi)存區(qū)域中。而下一個進程的上下文被恢復(fù)到相應(yīng)的寄存器中,從進程的角度看,就好像從未被中斷一樣。
虛擬處理器上下文比進程上下文更為復(fù)雜,因為客戶機操作系統(tǒng)本身包含許多敏感指令,會試圖訪問和修改物理處理器上定義的所有寄存器,而這種訪問和修改會被VMM重定位到虛擬處理器上。所以對于虛擬處理器,其上下文包括了更多的系統(tǒng)寄存器,例如CR0、CR3、CR4和各種MSR等。當(dāng)VMM在決定切換虛擬處理器的時候,為了讓虛擬機看來好像也從未被中斷一樣,VMM需要考慮保存與恢復(fù)的上下文也更為復(fù)雜。
我們沒有介紹虛擬處理器,但是上面已經(jīng)談到虛擬處理器,那什么是虛擬處理器?虛擬處理器其實也是一個虛擬的概念,一個邏輯上而非物理上的概念,可以從兩個角度來理解。
首先,從客戶機操作系統(tǒng)來說,其在運行的處理器需要具備與其“期望”的物理處理器一致的功能和行為,這種“期望”的前提條件甚至可以允許客戶機操作系統(tǒng)的修改,例如VMM可以通過修改客戶機操作系統(tǒng)的源代碼,使客戶機操作系統(tǒng)所“期望”的與VMM所呈現(xiàn)的功能集合一致。典型的“期望”包括:
1、指令集合與執(zhí)行效果。
2、可用寄存器集合,包括通用寄存器以及各種系統(tǒng)寄存器。
3、運行模式,例如實模式、保護模式和64位長模式等。處理器的運行模式?jīng)Q定了指令執(zhí)行的效果,尋址寬度與限制以及保護粒度等。VMM必須正確模擬虛擬機期望的運行模式,否則會對虛擬機甚至是VMM自身的運行產(chǎn)生嚴重影響。
4、地址翻譯系統(tǒng),例如頁表級數(shù)。
5、保護機制,例如分段和分頁。
6、中斷/異常機制,例如虛擬處理器必須能夠正確模擬真實處理器的行為,在錯誤的執(zhí)行條件下,為虛擬機注入一個虛擬機的異常。
其次,從VMM的角度來說,虛擬處理器是其需要模擬完成的一組功能集合。虛擬處理器的功能可以由物理處理器和VMM共同完成。對于非敏感指令,物理處理器直接解碼處理其請求,并將相關(guān)的效果直接反映到物理寄存器上;對于敏感指令,VMM負責(zé)陷入再模擬,從程序的角度也就是一組數(shù)據(jù)結(jié)構(gòu)與相關(guān)處理代碼的集合,數(shù)據(jù)結(jié)構(gòu)用于存儲虛擬寄存器的內(nèi)容,而相關(guān)處理代碼負責(zé)按照物理處理器的行為將效果反映到虛擬寄存器上。
值得一提的是,VMM已經(jīng)可以為虛擬機呈現(xiàn)出于實際物理機不一致的功能和行為。例如:虛擬處理器的個數(shù),可以與物理處理器的個數(shù)不一致。在有多個物理處理器的平臺上,VMM可以讓虛擬機看到該平臺好像只有一個物理處理器,而在只有一個物理處理器的平臺上,VMM可以讓虛擬機看到該平臺好像有多個物理處理器。這種效果完全取決于用戶對虛擬環(huán)境的配置,以及VMM自身的策略。
在介紹完以上三個概念之后,基本上也就了解了在處理器虛擬化中,不論是定義虛擬寄存器和虛擬處理器,還是利用上下文進行虛擬處理器調(diào)度切換,其宗旨都是讓虛擬機里執(zhí)行的敏感指令陷入下來后,能被VMM模擬,而不要直接作用在真實的硬件上。
總結(jié)
- 上一篇: 【51单片机快速入门指南】4.3: I2
- 下一篇: 通达信手机版分时图指标大全_通达信手机版