雖說是結語,我們的 HV 其實只走到一半。一路走來,我把大量時間花在實作硬體抽象層,讓 Guest 的行為對齊真機的中斷處理、I/O 觸發與裝置模擬。這條路過於發散,使得我 30 天走完仍卡在 16 位元實模式下。回頭看,這是有些捨本逐末。我們讓系統跑起來,卻還沒能展現虛擬化有趣的部分。
真正有趣的部分是 Hypervisor 的機制設計。比如早期 HV 為什麼靠 shadow paging 起家,它解的是什麼痛點?後來 EPT 如何把地址轉換下放到硬體(先前我們只談到皮毛),再到哪些指令必須 VM-Exit、哪些能 pass-through、哪些需要 trap-and-emulate。這些在調度、隔離與效能間的取捨,才是虛擬化好玩的地方。HV 就像是 CPU 的硬體抽象層,我們不需要逐一理解每張網卡、每顆磁碟的所有細節,卻能在一致的「攔截-轉譯-虛擬」框架下,讓 Guest 安全、快速,且可觀測、可管控地運行。
我想一開始若從 KVM 程式碼出發會是更好的選擇,我們可以做 trace-driven 的理解與驗證,或者參照現行系統 (如 kvmtool)的設計,甚至去討論 VM-exit 攔截點的成本,去討論實作方法的取捨。
不過呢,既然選定 Type-2 HV 當作題目,就應該把這個題目做完。接下來數週,我會慢慢完善這個系統,讓 Guest 可以從 Real Mode 一路切到 Long Mode 走完正常開機流程,跑起簡單的作業系統。