1.2 IBM 劍橋科學中心的瘋狂想法:用「控制程式」把一台機器切成好幾台#
一個名不見經傳的實驗室#
1964 年前後,當 IBM 主力工程師忙著開發 System/360 的正式作業系統 OS/360 時,位於麻州劍橋的 IBM 劍橋科學中心(Cambridge Scientific Center, CSC) 正在偷偷進行一個不怎麼體面的實驗。
CSC 的尷尬處境是整個故事的引爆點:他們自己沒有大機器可用。 這個小型研究單位必須和紐約總部搶一台機器的時段,申請流程冗長、經常被拒。研究員鮑伯·克里馬(Bob Creasy)後來回憶,他們乾脆想:
「既然排不到機器,那我們就自己寫一個程式,讓這台機器看起來像好幾台。」
CP-40:四個世界,一台機器#
他們拿到的測試機是一台特殊的 System/360 Model 40——這件事至關重要:IBM 為了實驗,特別為這台機器的微碼加了一項新功能,日後被命名為 DAT(Dynamic Address Translation,動態位址翻譯),也就是硬體級的位址重映射。
有了 DAT,軟體可以把 guest 看到的「位址 0」自動翻譯到真實記憶體的任何地方。硬體為幻覺提供了一根支柱。
CP-40 的架構:
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│ CMS │ │ CMS │ │ OS/360 │ │ 其他 │ ← guest
├────────┤ ├────────┤ ├────────┤ ├────────┤
│ VM #1 │ │ VM #2 │ │ VM #3 │ │ VM #4 │ ← 虛擬機
├────────┴─┴────────┴─┴────────┴─┴────────┤
│ CP-40(Control Program-40) │ ← VMM
├──────────────────────────────────────────┤
│ System/360 Model 40 + DAT 微碼 │ ← 硬體
└──────────────────────────────────────────┘
意外的副產品:CMS#
CSC 團隊很快發現一個有趣的分工:
- CP(Control Program):只負責一件事——欺騙。讓每個 guest 以為自己獨佔整台機器;
- CMS(Cambridge Monitor System,又稱 Conversational Monitor System):一個跑在虛擬機裡的單人互動作業系統,提供編輯器、編譯器、檔案系統。
這個「CP + CMS」的分層設計哲學影響深遠:VMM 什麼都不多做(只做虛擬化),使用者體驗交給 guest。 五十年後,AWS EC2 上的 Xen/KVM 與 Firecracker 依然遵循同一哲學——hypervisor 保持極小,功能層層堆疊。
為什麼「虛擬機」比分時系統更高明?#
1960 年代分時系統的主流做法(如 Multics)是:修改作業系統本身,讓它認識多個使用者。這帶來無盡的複雜度與相容性災難。
CP-40 團隊採用了更漂亮的手法:
分時系統思路: 改造 OS,讓一個 OS 服務多人 (侵入式、相容性差)
虛擬機思路: 假裝有多台機器,原封不動跑多個 OS (非侵入、完全相容)
關鍵洞見來自一項後來被證明天才的決策:虛擬機的指令集 = 真實機器的指令集,一字不改。 這就是「全虛擬化(Full Virtualization)」與「模擬(Emulation)」的差別——模擬是把機器翻譯成另一種機器(慢),虛擬化是讓真實硬體直接執行 guest 的大多數指令(快)。
制度與政治:一開始是被 IBM 拒絕的#
CP-40/CMS 最初不是 IBM 的正式產品。它是劍橋分部的「地下專案」,靠幾位研究員的熱情與內部政治運作才存活。這在 IBM 這樣層級森嚴的公司中極不尋常,也展示了科技史上反覆出現的母題:突破常來自邊緣而非核心。
事實上,IBM 內部當時同時發展兩條分時路線——正規軍的 TSS/360(大型、緩慢、最終失敗)與劍橋的 CP/CMS(小巧、務實)。歷史最終站在了地下軍這一邊。
歷史關聯:一個缺乏資源的邊緣實驗室、一台被加裝微碼的測試機、一群「想用機器而不可得」的工程師——資源的匱乏反而催生了效率的發明。這與後來 VMware 誕生於史丹佛校園、Docker 誕生於小型 PaaS 公司 dotCloud 的劇本,如出一轍。