2.1 普佩克與戈德堡:用嚴格的數學形式定義「什麼才是真正的虛擬機」#
從工程奇蹟到形式理論#
CP-40/67 的成功(1967)證明虛擬機可以做得到,但它沒有回答一個更根本的問題:
什麼樣的機器架構,才「值得被」虛擬化?
如果每種新 CPU 都要靠試錯才能知道能不能做 hypervisor,虛擬化永遠只是大型機的特權。要讓它成為普適的工程學科,需要一條形式化的判決標準。
兩位關鍵人物#
傑拉爾德·普佩克(Gerald J. Popek):加州大學洛杉磯分校(UCLA)教授,同時是 Xerox PARC 的顧問,日後創辦 Security Dynamics 等公司。羅伯特·戈德堡(Robert P. Goldberg):哈佛大學教授,虛擬化理論與安全作業系統的先驅,學生遍布後世的作業系統與安全界。
1974 年 7 月,兩人在《ACM 作業系統原理通訊》(CACM)發表經典論文 《Formal Requirements for Virtualizable Third Generation Architectures》(第三代電腦架構可虛擬化的形式化需求)。同一年,戈德堡另外發表了 《Survey of Virtual Machine Research》,系統梳理虛擬化的三大用途:共享、模擬、安全。
三條鐵律#
論文指出,要成為合格的 VMM(虛擬機監視器),必須同時滿足:
鐵律一【等效性】Equivalence Property
guest 軟體在任何虛擬機上執行,其行為必須與直接跑在
真實硬體上完全相同——差異只允許來自資源分配與時間。
鐵律二【資源控制】Resource Control Property
guest 不得直接改變任何實體資源的分配狀態;
VMM 必須對 CPU、記憶體、I/O 保持最終控制權。
鐵律三【效率】Efficiency Property
常用的、非特權的指令必須由硬體「原生」直接執行,
VMM 不得對每一條指令做軟體模擬——否則效能不可接受。
判決的核心:指令三分法#
為了檢驗鐵律,論文把機器指令切成三類:
| 類別 | 定義 | 例子 | 對虛擬化的意義 |
|---|---|---|---|
| 特權指令 Privileged | 只能在特權模式執行,否則觸發陷阱 | 修改頁表基址、停機、I/O 指令 | 陷阱 → VMM 接管,安全 |
| 敏感指令 Sensitive | 行為會依「是否在特權模式」而不同,或能影響系統資源配置 | 讀取/寫入系統狀態的指令 | 危險所在 |
| 良性指令 Innocuous | 既有不敏感、也不特權 | 加法、跳躍、比較 | 硬體直接執行,快 |
定理(Theorem):可虛擬化的充要條件#
對於「敏感指令 ⊆ 特權指令」的機器(簡稱敏感指令是特權指令的子集),存在一個滿足三條鐵律的 VMM。
白話版:任何會泄露或改變系統狀態的指令,都必須「在低權限下執行時自動觸發陷阱」。 這樣 VMM 才能全知全能地攔截一切敏感行為——guest 永遠瞞不過 VMM。
【可虛擬化機器的理想迴路】
guest 執行指令
├─ 良性指令 → CPU 原生執行(快,鐵律三滿足)
└─ 敏感指令 → 必然是特權指令 → 自動陷阱 → VMM 模擬(鐵律二滿足)
整個過程 guest 完全無感(鐵律一滿足)✔
為什麼這個定理是「黃金鐵律」?#
- 它把虛擬化從藝術變成科學:拿到任何新架構,逐一檢查指令分類,即可判決可否高效虛擬化。
- 它預言了災難:只要有一條指令「敏感卻不特權」(執行不報錯、行為卻依權限而異),幻覺就會出現裂縫——這正是 x86 的死穴(第 3 章)。
- 它定義了後世的評價框架:無論是 VMware 的二進制翻譯、還是 Intel VT-x 的 Root Mode,本質上都是在回答同一個問題——「如何讓敏感指令⊆特權指令,或者繞過這個條件」。
歷史關聯:這條定理誕生於大型機的黃金年代,卻將在二十年後成為 x86 世界最沉重的詛咒。理論的勝利,有時候是實務的噩耗。