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