1.1 硬件虛擬機概述
早在上世紀 70 年代, IBM 就實現了硬件抽象層的虛擬機技術,例如 System 360 、 370 、 CP-40 、 CP-67 。它最初是爲了彌補系統架構上的不足而發展起來的。後來,隨着虛擬機技術的成熟,對虛擬機需求的不斷增加以及硬件性能的逐步提高,硬件抽象層虛擬機在強隔離功能和安全控制方面的優點使它得到了人們的青睞而得以被推廣開來 [6] 。
目 前的硬件虛擬機一般都是利用虛擬機監視器作爲隔離代碼運行環境的中間層。虛擬機監控器的功能是爲其上運行的客戶操作系統提供硬件映射。從操作系統的角度 看,運行在虛擬機上與運行在其對應的物理計算機系統上是一樣的。虛擬機監視器是能夠爲計算機系統創建高效、隔離的副本的軟件。這些副本即爲虛擬機。
對 硬件虛擬機來說,平臺複製是虛擬機監控器的重要功能,而關鍵問題是在多個客戶操作系統之間分配唯一的底層硬件資源。虛擬機監控器管理着硬件資源,所有的客 戶操作系統及其上的應用程序都需要經過虛擬機監控器的控制。當執行某些指令,特別是涉及到共享硬件資源的指令,會通過虛擬機監控器解釋這些指令,檢查指令 的正確性並執行相關操作,客戶軟件不會感覺到虛擬機監控器的操作。
目前,學術界針對硬件虛擬機的劃分方法主要有兩種 [6] :
a) 一種是按照虛擬機監控器在計算機中所處的抽象層的位置劃分;
b) 一種是按照虛擬機監控器的實現方式劃分;
1.1.1 按照虛擬機監控器所處的位置分類
按照虛擬機監控器在計算機系統中所處的抽象層位置來劃分,可以分爲兩種:
a) 一種是虛擬機監控器直接運行在硬件之上;
b) 一種是虛擬機監控器運行在操作系統之上;
1.1.1.1 運行在硬件之上的虛擬機監控器
直接運行在硬件之上的虛擬機 監控器 ,可以獲取訪問硬件的最高權限。因此,虛擬機 監控器 可以直接獲取並且執行客戶操作系統中包括特權級指令在內的所有指令。如圖 2.1[6] 所示:
圖 2 . 1 基於硬件的虛擬機
這種架構的優點是:
a) 虛擬機監控器以幾乎相同的方式支持所有的客戶操作系統;
而缺點是:
a) 至少對於個人計算機的用戶來說,安裝虛擬機監控器之前必須完全擦除現有的系統,並且在安裝虛擬機監控器之後安裝客戶操作系統,這給用戶帶來了極大的不便;
b) 需要爲虛擬機監控器的輸入輸出設備編寫驅動程序,因爲虛擬機監控器直接和輸入輸出設備交互;
1.1.1.2 運行在操作系統之上的虛擬機監控器
另外一種方法是虛擬機監控器放在已存在的宿主操作系統之上,這個虛擬機監控器也被稱爲宿主虛擬機,如圖 2.2[6] 所示。
這樣做的優點是:
a) 安裝虛擬機監控器的過程就類似於安裝一個典型的應用程序的過程;
b) 虛擬軟件能夠利用宿主操作系統提供設備驅動和其他基本服務;
缺點則是:
a) 會帶來一些性能的損失,因爲操作系統的服務要通過更多的軟件層次來實現;
宿主虛擬機方式被使用在 VMware 的實現中,它是一個現代的硬件虛擬機,運行於 IA-32 硬件平臺之上。
圖 2 . 2 基於操作系統的虛擬機
1.1.2 按照虛擬機監控器的實現方式分類
按照虛擬機監控器的實現方式分類,可以分爲:
a) 全虛擬化;
b) 半虛擬化;
1.1.2.1 全虛擬化
虛擬機監控器模擬完整的硬件,使一個未修改的操作系統可以在各種完全不同的微處理器上運行。例如 Bochs 等。
全 虛擬化的實現方法包括直接指令解釋和二進制翻譯。全虛擬化最直接的實現方法是直接指令解釋。但是直接指令解釋,對於客戶操作系統的性能損失極其嚴重。二進 制翻譯是指把一段二進制指令轉換成一段具有同等功能的目標指令。翻譯過程本身可能會有相當大的開銷,但是如果一段源指令被翻譯後的目標指令能夠被緩存下 來,以後重複執行該段源指令就會比直接解釋執行快得多。因此,對於頻繁執行的指令,或者關鍵指令,可以通過採用二進制翻譯的方法來提高虛擬機的性能 ( 例如 QEMU[7] ) 。
目前,市場上許多商業的硬件虛擬機採用了基於動態指令轉換的完全虛擬化技術,例如 EMC 公司的 VMware ESX Server 、 VMware Workstation 和 Microsoft 的 Virtual Server 系列產品。由於完全虛擬化不需要修改客戶操作系統,因此具有很好的兼容性,而完全虛擬化技術的性能也主要依賴於動態指令轉換引擎的設計和實現。
1.1.2.2 半虛擬化
效率最高的虛擬化方法是半虛擬化( paravirtualization )。在半虛擬化中,子操作系統使用一個專門的 API (半虛擬化接口)與虛擬機監控器通信,虛擬機監控器則負責處理虛擬化請求,並將這些請求遞交到硬件上。由於有了這個特殊的 API ,虛擬機監控器不需去做耗費資源的指令翻譯工作。而且,使用半虛擬化 API 時,虛擬操作系統能夠發出更有效的指令 ( 例如 Lguest[8] ) 。然而,半虛擬化也有一個缺點,就是需要修改包含這個特殊 API 的操作系統。而且,這個缺點對於某些操作系統(主要是 Windows )來說更要命,因爲它們沒有這種 API[6] 。
現 在,半虛擬化是獲得最佳性能的方法,因爲虛擬操作系統發出的指令不需要翻譯。遺憾的是,在某些操作系統中不能完全使用半虛擬化,因爲它需要一個特殊版本的 操作系統。在這樣環境下,爲了確保高性能,可以半虛擬化個別的設備。這意味着,可以通過硬件虛擬化來處理某些指令(如, CPU 發出的指令)。不過,有些特殊設備發出的指令(如, network board 或 graphical interface card )在離開虛擬機之前可以通過準虛擬化驅動被修改。有些廠商提供專門操作系統的準虛擬化驅動包,這些驅動包經常可以單獨購買。通常,這些專門的驅動包都物有所值,能夠大大地提高設備性能,如網板( network board )和硬盤 [6] 。
1.1.2.3 硬件輔助虛擬化
硬件輔助虛擬化結合全虛擬化和半虛擬化的優點, Intel 和 AMD 提出了通過修改 x86 CPU 指令的語義使其直接支持虛擬化的方案。英特爾公司推出了 VT-i( 支持 Ltanium 架構 ) VT-x (支持 X86 架構)引入新的處理器操作,稱爲 VMX(Virtual Machine Extensions) 來支持虛擬化。 AMD 推出了新的處理器模式和新的內存管理模式支持虛擬化技術。目前最新版的 Xen , VMware Workstation 等,都已經支持 Intel-VT 和 AMD-V 技術。
1.2 本章小結
硬件虛擬機劃分一般按照虛擬機監控器在計算機中所處的位置或者虛擬機監控器的實現方法來劃分。
按照虛擬機監控器在計算機抽象層中所處的位置來分,可以分爲:
a) 運行在硬件之上的虛擬機監控器;
b) 運行在操作系統之上的虛擬機監控器;
按照虛擬機監控器的實現方法,可以分爲:
a) 全虛擬化;
b) 半虛擬化;
硬件輔助虛擬化;