1.3 1967 年 CP-40 與 CP-67 的誕生:世界上第一套真正的全虛擬化系統#
1967:虛擬化元年#
1967 年,CP-40 在劍橋科學中心的一台改裝 System/360 Model 40 上穩定運行,成功同時承載多個虛擬機。這是人類歷史上第一套達成「全虛擬化」的系統:未經修改的作業系統,在虛擬機裡運行,且完全不知道自己身處幻覺之中。
同年,團隊把成果移植到功能更強的 System/360 Model 67,CP-40 更名為 CP-67。1968 年,CP-67/CMS 開始提供給部分客戶試用,反響出乎意料地熱烈。
技術上,它做對了哪些事?#
CP-40/67 已經具備現代 hypervisor 的全部核心要素,後世所有產品幾乎都是它的複刻:
1. 特權指令陷阱(Trap-and-Emulate)#
guest OS 執行特權指令(如修改頁表、關中斷、I/O 指令)
↓ CPU 發現「你不在特權模式」
↓ 陷阱(trap)發生,控制權跳回 CP-67
↓ CP-67 模擬該指令的效果,再假裝什麼都沒發生地返回 guest
這個「陷阱並模擬」循環,是往後六十年所有虛擬化技術的心臟。
2. 虛擬記憶體與兩級位址翻譯#
借助 Model 67 的 DAT 硬體,CP-67 首度實現「虛擬機的虛擬位址」→「CP-67 的中間位址」→「真實位址」的兩級翻譯。這正是今日 影子頁表(Shadow Page Tables) 與 EPT/NPT 的概念原型——只是當年由軟體管理,五十年後才由硬體接管。
3. 虛擬 I/O 裝置#
每個 guest 都以為自己擁有真實的磁碟機與印表機;實際上 CP-67 攔截 I/O 指令,把請求重新映射到共享的實體裝置。今日雲端磁碟(EBS)與虛擬網卡的祖先就此誕生。
4. 錯誤隔離#
一個 guest 當機,CP-67 重啟那台「虛擬機器」,其他 guest 不受影響。對當時動不動就整機重開的批次環境而言,這是革命性的可靠性。
從地下專案到 IBM 王牌:VM/370#
CP-67 的成功在客戶端口耳相傳,最終迫使 IBM 正視。1972 年,IBM 宣布 System/370 支援虛擬記憶體,並發布正式產品 VM/370(Virtual Machine Facility/370)——CP/CMS 的正規軍版本。
VM/370 大獲成功,其直系後裔 z/VM 至今仍在 IBM Z 大型機上運行,是全球銀行核心系統的幕後功臣。許多金融機構至今仍跑在 1967 年那個劍橋實驗室想法的直系子孫之上。
為什麼大型機能做、PC 後來卻做不到?#
回頭看,CP-40 的成功有兩個當時不被注意的前提:
前提一:指令集「乾淨」
System/360 設計時就明確劃分特權/非特權指令,
所有會影響系統狀態的指令都是特權指令 → 都會觸發陷阱。
前提二:硬體願意配合
IBM 為了 Model 40/67 特地加入 DAT 微碼,
硬體設計者親手為虛擬化鋪路。
二十年後的 x86 恰好在這兩點上完全反過來(見第 3 章)——這也解釋了為什麼虛擬化會在 x86 世界經歷一場絕望的死局與驚天的破解。
文化與制度的餘波#
- 學術界:CP-67/VM 的成功讓「虛擬化」成為 1970 年代計算機科學的熱門研究方向,普佩克與戈德堡的定理(第 2 章)正是建立在其成功之上。
- 企業文化:VM 讓大學與企業的「一人一時段」變成「一人一虛擬機」,互動式運算從特權變成日常,直接推動了 1970 年代程式設計文化的普及。
- 政治與商業:美國政府在 1969 年對 IBM 提起長達十三年的反壟斷訴訟,其中「IBM 透過軟硬體捆綁壟斷」的壓力,間接促成 IBM 之後開放、模組化的軟硬體策略——VM/370 這種「不綁死應用的分層設計」正是此氛圍下的產物。
歷史關聯:CP-40 證明了「虛擬機」可行,但它依賴乾淨的指令集與配合的硬體。接下來的理論家(普佩克與戈德堡)將把這份成功提炼成黃金鐵律——而這條鐵律,即將宣判 x86 的死刑。