虛擬化原理

1、虛擬化概念(Virtualization)

虛擬化是值計算機元件在虛擬的基礎上運行,用邏輯表示資源,擺脫物理的限制。虛擬化在系統中加入一個虛擬化層,虛擬化層將下層資源封裝,抽象爲另一種形式的資源,提供給上層使用。虛擬化可以將一份資源抽象爲多份,也可以將多份資源抽象成一份(通常爲前者)。
在虛擬化的世界裏,要分清Host和Guest,真實的操作系統稱爲Host,虛擬的操作系統稱爲Guest。

2、虛擬機(Virtual Machine)

虛擬機是由虛擬化層提供的高效、獨立的計算機系統,擁有自己的虛擬硬件(CPU,內存,網絡設備,存儲設備等),對於上層軟件,虛擬機就是真實的計算機,虛擬機監控器(VMM Virtual Machine Monitor)負責Host和Guest之間的通信,其示意圖如下:


VM有如下特徵:

  • 同質:量可以不同,但質與物理機本質相同,例如CPU的ISA(指令集架構,Instruction Set Architecture)必須相同;
  • 高效:性能與物理機接近,大多數指令應在硬件直接執行,只有少量由VMM模擬處理),因此wine這類模擬器不是VM
  • 資源可控,VMM對物理機,虛擬機的資源絕對可控;

3、完全虛擬化和半虛擬化(Full Virtualization & Paravirtualization)

  • 完全虛擬化是指所抽象的 VM 具有完全的物理機特性,OS 在其上運行不需要任何修改,非常方便,但它的缺點是效率不高(特別是在Intel VT & AMD-V 硬件虛擬化支持前)。典型的有 VMWare, Virtualbox, Virtual PC, KVM-x86等。
  • 半虛擬化需 OS 協助的 虛擬化,在其上運行OS 需要修改。起初採用主是爲了解決 x86 體系結構上完全虛擬化的困難(沒有 Intel VT & AMD-V 硬件虛擬化支持前;且不屑於動態掃描指令修補之方法的性能),後來則主要是爲了提高虛擬化效率。典型有 Xen, KVM-PowerPC 等。
之所有會有這兩個流派,是因爲處理器把指令分爲特權態(supervisor mode)和用戶態(user mode)(如下圖所示),大部分的指令都可以運行在用戶態上,但一些敏感指令,如可以讀寫系統關鍵資源(影響處理器和設備狀態行爲的寄存稱關鍵資源或特權資源)的指令,必須運行在特權態上。如果執行特權指令時處理器的狀態不在內核態,通常會引發一個異常而交由系統軟件來處理這個“非法訪問”(陷入)。
引入了VMM之後,示意圖如下:

從上圖可以看出,Guest OS是運行在用戶態上,當執行到特權指令時,會陷入到 VMM 模擬執行(陷入-模擬)。從這個角度上來說,完全虛擬化是指當Guest OS運行到特權指令時,VMM將特權指令”翻譯“成陷入指令,這個”翻譯“過程對系統性能有損耗。而半虛擬化是指事先修改 Guest OS 的代碼,避免Guest OS執行特權執行的過程,因此它的性能接近於物理機。


4、主要虛擬化流派

瞭解了完全虛擬化和半虛擬化的本質之後,下來再來看看主要的虛擬化流派。

  • 基於二進制翻譯的全虛擬化:其主要思想是在執行時將 VM 上執行的 Guest OS 之指令,翻譯成 x86 ISA 的一個子集,其中的特權指令被替換成陷入指令;翻譯過程與指令執行交叉進行,不含特權指令的用戶態程序可以不經翻譯直接執行,該技術爲 VMWare Workstation,VMWare ESX Server 早期版本,Virtual PC 以及 QEMU 所採用。
  • 基於掃描和修補的全虛擬化:VMM 會在 VM 運行每塊指令之前對其掃描,查找敏感指令;補丁指令塊會在 VMM 中動態生成,通常每一個需要修補的指令會對應一塊補丁指令;特權指令被替換成一個外跳轉,從 VM 跳轉到 VMM,在 VMM 中執行動態生成的補丁指令塊;當補丁指令塊執行完後,執行流再跳轉回 VM 的下一條指令處繼續執行;Oracle 的 Virtualbox 即採用該技術。
  • OS協助的半虛擬化:通過修改 Guest OS 的代碼,將含有敏感指令的操作,替換爲對 VMM 的超調用 (Hypercall,類似 OS 的系統調用,可將控制權轉移到 VMM);該技術的優勢在於 VM 的性能能接近於物理機,缺點在於需要修改 Guest OS;該技術因 Xen 項目而廣爲人知。
  • 硬件協助的虛擬化:引入新的處理器運行模式和新的指令,使得 VMM 和 Guest OS 運行於不同的模式下,Guest OS 運行於受控模式,原來的一些特權指令在受控模式下全部會陷入 VMM,這樣就解決了部分非特權的敏感指令的陷入 — 模擬難題,而且模式切換時上下文的保存恢復由硬件來完成,這樣就大大提高了陷入 — 模擬時上下文切換的效率。該技術的引入使 x86 可以很容易地實現完全虛擬化。故皆被幾乎所有之前分歧流派各方所採用,如: KVM-x86,新版 VMWare ESX Server 3,Xen 3.0。


5、VMM模型(Virtual Machine Monitor)


1)宿主模型(OS-hosted VMM)

VMM 通過調用 Host OS 的服務來獲得資源,實現 CPU,內存和 I/O 設備的虛擬化,VMM 創建出 VM 後,通常將 VM 作爲 Host OS 的一個進程參與調度;VMM 模塊負責 CPU 和內存虛擬化,由 ULM 請求 Host OS 設備驅動,實現 I/O 設備的虛擬化。
優點:可以充分利用現有 OS 的設備驅動,VMM 無需自己實現大量的設備驅動,輕鬆實現 I/O 設備的虛擬化。
缺點:資源受 Host OS 控制,VMM 需調用 Host OS 的服務來獲取資源進行虛擬化,其效率和功能會受到一定影響。
採用該結構的 VMM 有:VMware Workstation, VMWare Server (GSX), Virtual PC,Virtual Server, KVM(早期)

2)Hypervisor 模型 (Hypervisor VMM)

該結構中,VMM 可以看作一個爲虛擬化而生的完整 OS,掌控有所有資源(CPU,內存,I/O 設備),VMM 承擔管理資源的重任,其還需向上提供 VM 用於運行 Guest OS,因此 VMM 還負責虛擬環境的創建和管理。

優點:因 VMM 同時具有物理資源的管理功能和虛擬化功能,故虛擬化的效率會較高;安全性方面,VM 的安全只依賴於 VMM 的安全。

缺點:因 VMM 完全擁有物理資源,因此,VMM 需要進行物理資源的管理,包括設備的驅動,而設備驅動的開發工作量是很大的,這對 VMM 是個很大的挑戰。

採用該結構的 VMM 有:VMWare ESX Server, WindRiver Hypervisor, KVM(後期)

3)混合模型((Hybrid VMM)

該結構是上述兩種模式的混合體,VMM 依然位於最底層,擁有所有物理資源,但 VMM 會主動讓出大部分 I/O 設備的控制權,將它們交由一個運行在特權 VM 上的特權 OS 來控制。VMM 只負責 CPU 和內存的虛擬化,I/O 設備的虛擬化由 VMM 和特權 OS 共同完成.

優點:可利用現有 OS 的 I/O 設備驅動;VMM 直接控制 CPU 和內存等物理資源,虛擬化效率較高;若對特權 OS 的權限控制得當,虛擬機的安全性只依賴於 VMM。
缺點:因特權 OS 運行於 VM 上,當需要特權 OS 提供服務時,VMM 需要切換到特權 OS,這裏面就產生上下文切換的開銷。
採用該結構的 VMM 有:Xen, SUN Logical Domain35



轉自:http://blog.csdn.net/dbanote/article/details/8938106

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章