Subscribe to RSS Subscribe to Comments Blog of Roy Chan

Blog of Roy Chan

Unix的歷史

這是我十多年前為TCL BBS Unix板寫的一篇關於Unix歷史的文章。事實上我只寫到三份之一就停了,不過這幾年來也偶然看到別人曾引用過這文章。近日我的舊個人網站要停了,所以把舊文貼上來作保存。

Multics 的失敗

要談 Unix 的歷史,一定要回溯到 1965-68 年美國電話及電報公司 (American Telephone and Telegraph Inc., AT&T) 、 通用電器公司 (General Electrics, G.E.) 及麻省理工學院 (Massachusetts Institute of Technology, MIT) 的 Multics (MULTiplexed Information and Computing Service) 計劃。

在那時期,大部份電腦都是採用批次處理 (Batch Processing) 方式。為了顯示多用途 (general-purpose) 及多用戶 (multiuser) 的分時系統 (timesharing system) 是可行的,MIT 以在試驗 CTSS (Compatible Time-Sharing System) 當中所得的研究成果取得了 G.E 的同意合作為 G.E. 的大型電腦 GE-635 開發一套全新的分時作業系統 - Multics 。

由於 Multics 有不少設計在當時是頗新穎具富創意的,因此吸引了不少研究機構的註意。而其中那時仍和 AT&T 同一家的貝爾實驗室 (Bell Libraries, Bell Labs) 更在六十年代末曾正式參於過 Multics 計劃,那時剛由加州柏克萊大學 (University of California at Berkeley, UCB) 去到 Bell Labs 的 Ken Thompson 就是 Multics 研究小組的一員。

不過 Multics 的發展進度很慢,原本預算兩年有成果但過了很久仍沒有多大進展。到了 1969 年, Bell Labs 終於決定放棄,退出了 Multics 計劃。 Bell Labs 的 Dennis Ritchie (K&R 的 R) 曾描述當時 Bell Labs 由管理層到研究員都認為 Multics 的開發是太遲及太貴了。

Multics 自 Bell Labs 退出後 , 仍有繼續發展。 Honeywell 在 1972 年購入了 G.E. 的電腦部門後更把 Multics 進出商業市場,但始終不算太成功。在 Multics 比較流行的八十年代,約有 75 至 100 台每台價值數百萬美元的大型電腦跑 Multics 。 1977 年, MIT 也退出 Multics 的發展工作。後來 Honeywell 在八十年代中期把其電腦上的事業賣給 Bull 後,Multics 的發展亦終於在 1988 年打上一個句號。

『角落中乏人問津的 PDP-7 』(”little-used PDP-7 in a corner”)

然而,Thompson 曾在 Multics 計劃當中為 GE-635 寫了個叫做「太空旅行」(Space Travel) 的遊戲程式。這個程式模擬 了一個太空船和太陽系的環境。 Bell Labs 放棄 Multics 後, Thompson 打算找另一台機器把「太空旅行」移植 (port) 過去,於是便和 Ritchie 向 Bell Labs 提議買一台電腦以便他們建立一台自己的交談式、多用戶、分時系統,不過他們的申請並沒有被接納。最後,Thompson 在一角落裡發現了一台很少人用的 PDP-7 (Programmed Data Processor) 。

PDP-7 是迪吉多 (Digital Equipment Corporation, DEC) 在 1964 年進出的迷你電腦 (minicomputer) 。這台約和 Commodore 64 同級的電腦的作業系統對於 Thompson 來說十分簡陋,於是 Thompson 就順帶以他在 Multics 計劃中學到的技術和經驗,為這台過時的電腦上撰寫一套新作業系統。這套作業系統有很多構想是來自 Multics ,包括樹狀結構 (tree-structured) 的檔案系統、用戶層面的命令解釋器 (Command Interpreter) ,簡單表現文字檔及對週邊設備 (Device) 的綜合化存取等。

最初,Thompson並不是在PDP-7上撰寫他的新系統,而是先在一台GE-635上使用GEMAP組譯器(Assembler)的巨集(Macros)編寫程式,再經由一後置處理器(post processor)產生可供PDP-7讀取的紙帶(paper tape)。這樣一來一回,由GE到PDP-7,直到一個雛型的核心(Kernel)、一個編輯器(Editor)、一個組譯器(Assembler)、一個簡單的Shell(命令解釋器,Command Interpreter)及一些公用程式如rm、cat、及cp等完成了,整個系統可以自給自足後,所有開發工作才在PDP-7上繼續。

而這套作業系統最初由與 Thompson 共事的 Brian W. Kernighan (K&RC中的K) 命名為 Unics (UNiplexed Information and Computing System),和Multics開了個玩笑。1971年間改成Unix,用Uni對Multi,cs對x。提起Unix的名字,很多人都疑惑正確的寫法是全大楷的「Unix」,還是只有起首大階的’Unix’。Ritchie就解釋說「UNIX」言個寫法源自1974年CACM的文件”The UNIX Time-Sharing System”,當時這班先鋒研究者剛剛得了個新的typesetter及開發了troff。一大班人正對smallcaps字款著了迷,導致了「Unix」的產生。縱使Ritchie在往多次以Unix並不是任何句子的縮寫為理由想在幾份Bell Labs的文件用回「Unix」,最後都失敗。而後來UNIX的註冊商標也是以全大寫為準。

First Edition Unix

到了 1970 年,這班 Unix 的研究者獲得配合一台新的十六位元電腦 DEC PDP-11/20,條件就是要為 Unix 加入較佳的文件處理工具。不過台電腦迅速地送到研究者的桌上後,它的磁碟足足慢了三個月才運到。就在這機在碟未到的等候時間中,Thompson 用 PDP-11 的組合語言 (Assembly Language) 重寫了整個 Unix 核心及基本的命令。當時那台 PDP-11/20 只有 24KB 記憶體 (Memory),這個最早期的 PDP-11 版 Unix 就佔用了 12KB,其餘的記憶體就被拿來跑用戶的程式和作 RAM Disk。僅有 500KB 的磁碟空間以及在毫無記憶保護(Memory Protection) 的情況下,支持三個用戶同時作編輯和格式化文件和那群先鋒開發者繼續 Unix 的發展工作。

1971年11月,這班懶惰的開發者終於把第一版 Unix 的說明書(Manual)定稿。往後每一由 Bell Labs 發展出來 Unix 的版本都以同時出版的說明文件的版號為準。如所謂 Unix Version 1 (V1) 其實就是指第一版 (First Edition) Unix 說明書所載的 Unix。所以在 Bell Labs 內部一直都稱呼 nth Edition Unix,不是外間的 Unix Version n。V1已有了基本的檔案系統、fork()、roff (troff 的前身)及 ed 等,並被用作處理專利文件的工具。而 pipe() 就在第二版 (Version 2) 中初次出現。

C 的誕生

在開發 V1 時,由於 PDP-7 和 PDP-11 的組合語言差異很大,令移植的工作非常因難。Thompson 這時突發奇想,覺得如用高階語言 (High-level Langauge) 來撰寫 Unix,移植和維>護的工作都會變得簡單得多。對於 C 語言極度盛行的今日,這想法可能不怎麼。但在當時>絕對是十分瘋狂,執行效率要高且記憶體使用要省的系統程式(System Software)必需要用>組合語言來撰寫的觀念早已根植在當時每一個電腦人心中。

Thompson 首先嘗試使用 FORTRAN 來寫,不過沒有成功。後來他找來一個叫 BCPL 的語言,在使用期間整理了 BCPL 的若干功能,成了另一個新的程式語言 B。V1 中就有少量公用程>式是用B來撰寫。後來 Ritchie 加入了 Unix 的開發行列,很快發現了 B 語言有若干缺點>,如資料型態(Data Type)的缺乏等。 Ritchie 著手改良 B 語言,誕生了著名的C語言。

1973年初,C 語言的重要特性大都完成了。在各方條件都足夠的情況下,Thompson、Ritchie及他們的同伴在同年的夏天把 Unix 的核心用 C 重寫。這也是所謂的第四版(Version 4, V4),有九成多的程式碼是用 C 來寫。在整個操作系統史上,這是一件很重要的事,也是 Unix 的轉折點。這意味著 Unix 可以很容易被修改,也使其成為第一個在源程式層面上可移值(source-portable)的操作系統,可以在很短時間移值(port)另一台的電腦中。

接下來的就沒有再寫了…… -P


Share It: [del.icio.us] [Technorati] [Google Bookmark] [Yahoo MyWeb] [Furl]


Comments

  1. 傑少
    February 4th, 2007 | 21:43

    我幾年前在好多網都見過呢篇文, 係咪真係你寫架!?

  2. February 5th, 2007 | 1:19

    自己去我個舊站睇

    http://www.glink.net.hk/~voidoo/ulinux/unix_hist.html

  3. January 22nd, 2008 | 21:58

    我也寫過這些有關歷史的東西,不過由MIT那兒寫起。第一篇在:
    http://littleblackrabit.mysinablog.com/index.php?op=ViewArticle&articleId=703737
    可以來看看 :lol:

  4. kc
    April 21st, 2009 | 11:52

    寫得好好, 比我重溫了一段歷史. 繼續寫吧! 用心支持你 . -)

Leave a reply

  • :-)
  • :-D
  • :lol:
  • ;-)
  • :-P
  • :-(
  • :'(
  • :'-(
  • >:-(
  • :-O
  • :annoy:
  • :appeal:
  • :asleep:
  • Zzz...
  • :-Q
  • 8-)
  • B-)
  • :clap:
  • :enjoy:
  • :blush:
  • :shy:
  • :*
  • :inlove:
  • :inlove2:
  • :inlove3:
  • :love:
  • :allure:
  • 8D~~~
  • :amative:
  • :chatter:
  • :bored:
  • bored2:
  • X-O~~~
  • :-'|
  • 8-S
  • #_#
  • :dontknow:
  • :embarrased:
  • :excite:
  • :faint:
  • :fuzzy:
  • :plan:
  • :conceal:
  • :regret:
  • :punched:
  • :silent:
  • :-X
  • :tease:
  • :vent:
  • :win:
  • :work:
  • :good:
  • :shit:
  • :bomb:

Based on Fluidity© 1998-2007 Roy Hiu-yeung Chan