1.1 Smart-VM 的啓動流程
Smart-VM 目前實現的是硬盤啓動方式。
計算機從硬盤讀取引導扇區到內存的 0x7C00 ,然後將控制權直接交給引導程序。
1. 在引導程序中,將 loader.bin 和 root.bin 讀取到內存中,然後跳轉到保護模式,在保護模式下,將控制權交給 loader.bin ;
2. loader.bin 獲取控制權後,開啓虛擬內存機制,然後跳轉到 root.bin ;
3. root.bin 獲取控制權之後,就開始初始化運行環境,內容包括:
a) 初始化全局描述符、中斷描述符和任務描述符,建立基本的程序運行環境;
b) 初始化控制檯驅動程序;
c) 初始化鍵盤驅動程序;
d) 初始化硬盤驅動程序;
e) 開啓中斷;
f) 從硬盤讀取客戶操作系統的引導程序到內存中;
4. 完成基本的程序運行環境之後,就開始跟 Intel-VT 相關的操作,內容包括:
a) 激活 VMX 模式;
b) 爲運行客戶操作系統做相關的準備;
1.2 引導程序
硬件自動將 boot.bin 加載到 0x7c00 ,然後自動跳轉到 0x7c00 執行第一條指令。引導程序在執行的時候,要注意 PC BIOS 的內存分佈圖(圖 6.1 )。
引導程序的運行流程:
圖 6 . 1 PC BIOS 內存分佈圖
1. boot.bin 將自己拷貝到內存的 0x90000 ;
2. 跳轉到新的位置上的執行點;
3. 從硬盤讀取 loader.bin 到內存的 0x80000 ;
4. 從硬盤讀取 root.bin 到內存的 0x500 ;
5. 將 root.bin 從 0x500 拷貝到 0x0 ;
6. 從實模式跳轉到保護模式 [16][17] ;
從實模式跳轉到保護模式的步驟如下:
1) 加載全局描述符表;
2) 關中斷;
3) 開啓 A20 開關
4) 開啓保護模式;
7. 跳轉到內存的 0x80000 ;
圖 6.2 是引導程序啓動完成的時候的內存分配圖:
圖 6 . 2 引導程序啓動完成的時候的內存分配圖
1.3 加載程序
加載程序的主要功能是建立頁表映射,開啓虛擬內存機制。
圖 6 . 3 加載程序的內存分佈圖
加載程序將頁表放在 0x88000 。
一旦確立了頁表的位置,需要建立頁表映射。將物理內存中的 0~4M 分別映射到虛擬內存空間中的 0~0x400000 和 0xC0000000~0xC0400000 中。如圖 6.4 所示。
圖 6 . 4 加載程序的頁表映射圖
一旦完成了頁表映射的工作,加載程序就開啓虛擬內存機制,跳轉到 root.bin ,將控制權交給內核,這裏跳轉到的地址是 0xC0000000 地址,詳見下一節的進程內存分佈。
1.4 進程管理
1.4.1 進程的內存空間分佈
在 Smart-VM 中,每個進程的內存都是 4G 虛擬內存。但是由於真實的內存不一定有那麼大。因此無法將所有的內存都映射到 4G 的虛擬內存。因此, Smart-VM 的內存管理機制藉助英特爾處理器的頁錯誤機制,採用的是按需分配的算法。
由於 Smart-VM 上有很多的進程,每個進程都需要 Smart-VM 內核的代碼,因此所有的進程都共享 Smart-VM 內核。在 Smart-VM 中,每個進程的 4G 的虛擬內存的最後 1G 是內核佔用。所有的進程的最後 1G 都映射到相同內核中,如圖 6.5 。圖 6.6 是每個進程的內存空間分佈。
圖 6 . 5 進程內存佈局
圖 6 . 6 進程內存佈局
1.4.2 進程調度
Smart-VM 目前的進程調度較爲簡單,採用的是平均分配時間的方法。
1.4.3 進程通信
Smart-VM 的進程通信機制需要處理兩種情況:
a) 進程 A 向進程 B 發送消息的時候,需要等待進程 B 的回覆;
b) 進程 A 向進程 B 發送消息的時候,不需要等待進程 B 的回覆;
1.5 內存管理
在 Smart-VM 中,只支持固定的 32M 容量的內存。
圖 6 . 7 Smart-VM 物理內存劃分
1.5.1 內存管理
由於 VMX 模式需要在開啓分頁機制的情況下才能夠激活,因此 Smart-VM 也提供了虛擬內存的管理方案 [18] 。
Smart-VM 的物理內存劃分見圖 6.7 。 0~8M 用於 Smart-VM ,其餘的用於客戶操作系統。
1.5.1.1 內核物理內存管理
Smart-VM 內核物理內存的使用範圍是 0~8M 空間。
在這 8M 的空間中, 0~0x10000 用於內核的代碼段和數據段, 0x9FC00~0x100000 是內存保留區,具體參見圖 6.1 ,除此之外,用於內核的堆和棧的使用。
內存分配需要提供以下幾點功能:
a) 根據要求的地址對齊方式,分配內存;
b) 不需要按照規定的地址對齊方式,分配內存;
內存回收需要提供以下幾點功能:
a) 檢查回收的內存地址是不是之前分配的地址;
1.5.1.2 虛擬機物理內存 ( 作爲客戶操作系統物理內存 ) 管理
Smart-VM 分配給客戶操作系統的物理內存的方案是一次性分配,內存管理方案的要求:
a) 要爲分配的物理內存建立一張頁表;
b) 分配的物理內存都是按 4K 對齊分配;
c) 當虛擬機關閉的時候,需要回收該客戶操作系統用到的所有內存。
1.5.2 內存管理的其他功能
1.5.2.1 監視內存的使用狀況
要隨時記錄物理內存的使用狀況,監視內容包括:
a) 分別記錄內核物理內存和客戶操作系統的已用內存和未用內存的大小;
b) 單個客戶操作系統使用哪些物理內存;
1.5.2.2 鎖住內存
爲了防止兩個進程同時修改同一塊內存, Smart-VM 提供了鎖住內存的功能。
1.5.2.3 分配粒度
a) 對於內核物理內存的分配粒度不受限制;
b) 對於客戶操作系統物理內存的分配粒度,一般情況下是以 1M 爲單位;
1.6 設備驅動
Smart-VM 根據硬件設備的傳輸速度,將硬件設備分爲兩大類:字符設備和塊設備。
驅動程序藉助於硬件控制器的 DMA 機制,相比於輪詢機制,能夠減輕 CPU 的負載。
1.6.1 字符設備驅動程序
目前只包含鍵盤驅動程序和控制檯顯示程序。
在鍵盤驅動程序之上,有一個終端控制程序,主要功能是翻譯鍵盤編碼和控制輸入輸出;
1.6.2 塊設備驅動程
需要處理當多個進程同時訪問硬件設備的時候的調度問題。
Smart-VM 採用的是先到先處理的算法。當一個進程要訪問一個硬件的時候,如果該硬件空閒,則直接訪問硬件,如果該硬件設備忙,則被插入到該硬件設備的一個等待隊列。
1.7 文件系統
硬件設備作爲文件系統的一個特殊設備,由文件系統管理。
分配給虛擬機的硬盤也作爲一個特殊的文件。
Smart-VM 文件系統需要真實存儲的文件不大,最多可到 32M 。
1.7.1 文件系統結構
圖 6.8 是 Smart-VM 文件系統的結構 [19] :
a) Root :根文件夾節點;
b) Desktop :桌面文件夾,作爲用戶剛進入系統的操作界面,也可存放一些臨時文件;
c) Dev :硬件文件夾,用於管理硬件設備的特殊文件夾。該文件夾除了存放硬件設備等特殊文件外,不能存放其他類型的文件;
d) VMS :虛擬機文件夾,用於管理用戶創建的虛擬機,每個虛擬機所需的配置文件夾等放在 VMS 下的子文件夾。該文件夾只用於存放用戶創建的虛擬機相關的文件,不能存放其他類型的文件,子文件夾的名字是虛擬機名;
e) Temp :臨時文件夾,用於存放臨時文件;
f) Obj :存放一些 Smart-VM 組件的文件夾;
圖 6 . 8 Smart-VM 文件系統結
1.7.2 文件系統功能
1.7.2.1 文件的大小
文件最大爲 32M 。
1.7.2.2 互斥
當一個進程訪問一個文件的時候,需要鎖定該文件,防止另外一個進程修改該文件。
1.8 本章小結
Smart-VM 專用操作系統的模塊包括:
a) 進程管理:實現了進程的內存空間分佈以及進程的調度和通信功能;
b) 內存管理:對內存進行了合理的分配和回收,同時針對小內存塊申請和大內存塊申請進行了優化;
c) 設備驅動:將設備分爲字符設備和塊設備;
d) 文件系統:由於 Smart-VM 操作系統需要存放的文件不需要太大,因此對文件大小的上限做了限制;