跳轉到

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 的死刑。