第5章 總體設計方案
目前的虛擬機器監控器,大多都是直接執行在作業系統之上的,例如 VMware workstation, KVM, Virtual PC 等。只有 Xen 和 VMware ESX 提供執行在硬體上的機制。
但是, Xen 虛擬機器監控器使用的是 Linux 核心,因此程式碼量過於龐大,維護起來非常的困難,而且由於程式碼量過大,其安全性也相對地較難得到保障。 VMware ESX 雖然提供了它自己設計和實現的一個精簡的作業系統核心,可以說,它是目前市面上最為優秀的虛擬機器監控器,但是它是閉源的,無法獲取原始碼,而且需要昂貴的授權費用。
基於以上原因,我們提出了設計一個輕量級的虛擬機器監控器的方案,即
Smart-VM 是一個輕量級的虛擬機器,提供了一個專用的作業系統核心。它的主要目標功能包括:
a) 簡單的使用者互動:即命令列控制檯;
b) 虛擬硬體平臺:針對每個客戶作業系統,虛擬出一套硬體裝置;
c) 管理虛擬機器:當同時執行多個虛擬機器的時候,需要協調多個虛擬機器之間的執行;
d) 管理硬體資源:由於 Smart-VM 是直接執行在硬體上的,因此需要管理硬體資源。
Smart-VM 是在 PC 機上執行的虛擬化技術平臺,它提供了同時執行多個客戶作業系統的機制。對於每個虛擬計算機,
圖 5 . 1 Smart-VM 總體結構
Smart-VM 虛擬化層:為客戶作業系統虛擬出一套硬體平臺供其使用;
Smart-VM 作業系統:負責管理硬體資源,同時還要協調好客戶作業系統對硬體資源的訪問;
1.3 客戶作業系統
相對於半虛擬化來說, Intel-VT 技術的優點就是不需要修改客戶作業系統的核心,因此,客戶作業系統在虛擬平臺上的運作模型也沒有改變 ( 客戶作業系統的運作模型如圖 5.2
圖 5 . 2 Smart-VM 客戶作業系統運作模型
圖 5 . 3 作業系統運作模型
中間著色的部分就是 Smart-VM 虛擬機器監控器。它也是我們的工作。
Smart-VM 虛擬機器監控器的功能包括:
a) 為每個客戶作業系統虛擬出一套虛擬平臺;
b) 管理真實的硬體資源;
基於以上的需求,我們將 Smart-VM 分為兩個大模組,一個是 Smart-VM 虛擬化層,另外一個是 Smart-VM 作業系統。
Smart-VM 虛擬化層的主要功能是為上層客戶作業系統虛擬出一套硬體平臺:
a) 處理器虛擬化:包括真實模式虛擬化和保護模式虛擬化;
b) 中斷虛擬化:能夠處理異常,軟體中斷和外部中斷;
c) 記憶體虛擬化:現在,我們是通過虛擬記憶體的形式實現的;
d) I/O 虛擬化:能夠與外圍裝置進行通訊;
Smart-VM 虛擬化層的架構圖如下(如圖 5.5 ):
圖 5 . 4 Smart-VM 虛擬化層
虛擬服務分發器:虛擬服務分發器根據客戶作業系統退出時得到的資訊,將服務請求分發到虛擬化層的各個模組,然後收集各個模組執行完請求後的反饋資訊,交給客戶作業系統處理。
真實模式虛擬化: Smart-VM 的真實模式虛擬化,是利用虛擬 8086 模式實現的。主要還是要處理好 BIOS 虛擬化和特權級虛擬化。
保護模式虛擬化:能夠執行 32 位客戶作業系統的核心,包含三個子模組:
a) 中斷虛擬化:主要是處理好保護模式下的中斷;
b) 記憶體虛擬化:使用的是影子頁表;
c) I/O 虛擬化:能夠與外圍裝置進行互動;
1.4.1.1 處理器虛擬化
處理器虛擬化包括真實模式虛擬化和保護模式虛擬化兩個主要的模組。在處理器執行的過程中,由於各種各樣的原因,需要不斷地進行 VMX 根操作模式和 VMX 非根操作模式的切換。
圖 5 . 5 Smart-VM 狀態轉換圖
圖 5.5 顯示了 Smart-VM 的狀態轉換關係:
1. 計算機剛啟動的時候,處理器處於真實模式;
2. 當處理器處於真實模式的時候,初始化保護模式所需要的環境之後,就可以進入保護模式;
3. 當處理器處於保護模式的時候,可以通過執行 VMXON 指令進入 VMX 的根模式,當處理器處於 VMX 根操作模式的時候,可以通過執行 VMXOFF ,退出到保護模式;
4. 當處理器啟用 VMX 模式是,需要處理好三種子模式之間的轉換:
a) VMX 根模式:在 VMX 的根操作模式下執行的是 Smart-VM 虛擬機器監控器。通過執行 VMLAUNCH 或者 VMRESUME 指令,處理器可以進入 VMX 非根操作模式;
b) VMX 非根操作模式下的保護模式:實際上,處理器進入非根模式的時候,只能進入 VMX 非根模式下的保護模式, VMX 非根操作模式下的虛擬 8086 模式,只是 VMX 非根操作模式下的保護模式的一個子模式。
i. 當 eflages 暫存器的 VM 位置 1 是,處理器就處於虛擬 86 模式,從保護模式進入虛擬 86 模式,可以通過執行 iret 指令或者任務切換來完成;
ii. 從 VMX 非根模式下的保護模式退出到 VMX 根模式,有很多種情況,主要分為條件退出和無條件退出兩大類;
c) VMX 非根模式下的虛擬 86 模式:到處理器處於 VMX 非根模式下的虛擬 86 模式,執行的是 16 位的程式;
i. 從 VMX 非根模式下的虛擬 86 模式退出到 VMX 根模式,同樣分為條件退出和無條件退出兩大類;
ii. 從 VMX 非根模式下的虛擬 86 模式退出到 VMX 非根模式下的保護模式,一般通過異常 / 中斷,或者任務切換;
圖 5 . 6 Smart-VM 作業系統的整體結構
Smart-VM 虛擬機器監控器設計的目標就是儘可能保持最精簡的程式碼,但是又考慮到效能的原因,因此, Smart-VM 的核心採用了巨集核心和微核心的折中處理方法(如圖 5.6[15] ),即將一部分與效能密切相關的功能放在核心,其他的功能放在核心之外,作為服務程序來執行。
1.4.2.1 程序管理
程序管理的功能包括:
a) 程序通訊:實現兩個程序之間的本地通訊;
b) 程序排程:能夠公平合理地為每個程序分配處理器資源;
c) 記憶體管理:實現記憶體的動態分配;
1.4.2.2 記憶體管理
記憶體管理需要高效的處理兩種情況:
a) 小塊的記憶體管理:比如說幾個位元組的記憶體申請;
b) 大塊的記憶體管理:比如說一次性申請幾十兆,甚至上百兆的記憶體塊;
1.4.2.3 裝置驅動
裝置驅動程式用於控制硬體。所有針對裝置的訪問,都是通過裝置驅動程式來完成了。
裝置驅動程式主要分為兩大類:
a) 字元裝置驅動程式:這類裝置訪問速度較慢,例如鍵盤等;
b) 塊裝置驅動程式:這類裝置的訪問速度較快,例如硬碟,顯示卡等;
1.4.2.4 檔案系統
與 Linux 類似,採用所有的裝置皆檔案的方法。
該檔案檔案系統主要支援的功能包括:
a) 虛擬機器監控器的日誌;
b) 各個虛擬機器的相關資料,包括虛擬機器的配置檔案,虛擬機器的硬體資源 ( 比如說劃分給虛擬機器的硬碟也當作一個檔案來管理 ) 等;
c) 外部裝置;
本章介紹了 Smart-VM 的總體設計方案。
從邏輯上, Smart-VM 分為兩層:
a) Smart-VM 虛擬化層,主要是通過虛擬服務分發器分發客戶作業系統的服務請求。
b) Smart-VM 作業系統,用於硬體資源管理,功能包括:
i. 程序管理
ii. 記憶體管理
iii. 裝置驅動
iv. 檔案系統