跳轉到

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 的劇本,如出一轍。