虛擬機管理器(Virtual Machine Manager, VMM)是 Windows 95/98/Me 的核心作業系統組件,運行於 Ring 0,負責:
所有 VxD、系統 DLL (KERNEL32, USER32, GDI32) 最終都透過 VMM 服務存取硬體資源。
| 區域 | 範圍 | 用途 | 特性 |
|---|---|---|---|
| V86 區域 | 0 ~ 10FFEFh (1MB + 64KB - 16B) | 當前 VM 的 Real Mode 記憶體映射 | 每個 VM 獨立,切換 VM 時重新映射 |
| 應用程式私有區 | 4MB ~ 2GB | Win32 進程私有位址空間 | 每個進程獨立 2GB (扣除 4MB) |
| 應用程式共享區 | 2GB ~ 3GB | 系統 DLL、Win16 程式、記憶體映射檔、DPMI 記憶體 | 所有 VM 共享,Win16 程式互相可見 |
| 系統共享區 | 3GB ~ 4GB | VMM 核心、VxD、頁表、系統資料結構 | Ring 0 專用,用戶模式不可存取 |
VMMCall Hook_V86_Int_Chain:掛接 V86 (Real Mode) 中斷鏈VMMCall Set_PM_Int:設定保護模式中斷門| 排程器 | 職責 | 觸發時機 | 決策輸出 |
|---|---|---|---|
| 主要排程器 | 選擇最高優先權可執行執行緒 | 中斷返回前、執行緒就緒/封鎖、優先權變更 | 下一個獲得 CPU 的執行緒/VM |
| 時間片管理器 (次要排程器) | 分配 CPU 時間片、實現輪轉 | 時鐘中斷 (約 18.2Hz/55ms 或 1kHz/1ms) | 當前執行緒時間片耗盡 → 提升下一執行緒優先權 |
VMMCall Adjust_Thread_Priority 等服務調整就緒 (Ready) ←→ 執行中 (Running)
↑ ↓
封鎖 (Blocked) — 等待事件 (I/O, 同步物件, 頁面錯誤)
| 服務類別 | 代表服務 | 用途 |
|---|---|---|
| 裝置管理 | Register_Device, Enable_Device, Disable_Device | VxD 註冊與生命週期 |
| 記憶體管理 | _PageAllocate, _PageFree, _PageLock, _PageUnlock, _HeapAllocate | 核心記憶體操作 |
| 中斷/定時器 | Hook_V86_Int_Chain, Set_PM_Int, Set_Global_Time_Out, Cancel_Time_Out | 硬體虛擬化與定時 |
| 執行緒/排程 | Create_Thread, Destroy_Thread, Adjust_Thread_Priority, Get_Cur_Thread_Handle | 多任務控制 |
| 檔案系統 | IFS_Mgr 相關服務 | 虛擬檔案系統介面 |
| 偵錯/追蹤 | Debug_Out, Get_Debug_Options | 核心除錯支援 |
VMM 是微內核思想在單核心架構下的務實實踐:核心極小 (排程、記憶體、中斷),其餘功能 (檔案系統、網路、圖形、音訊) 全部下放到 VxD 模組。這種模組化、服務導向、動態載入的設計,直接影響了後來的:
VMM 以不到 200KB 的核心代碼,支撐了 Windows 9x 整個作業系統人格:多虛擬機隔離、預emptive 多任務、32/16 位混合執行、動態裝置驅動。其三大核心服務——分頁記憶體管理、兩級中斷虛擬化、雙層優先權排程——構成了現代作業系統核心的經典藍圖。研讀 VMM 設計,不僅是考古,更是理解作業系統核心架構永恆原理的捷徑。