管窺Linux史

管窺Linux史

眾所周知,絕大部分發行版本都被稱為類Unix系統,要說Linux就應該先了解Unix的歷史,Unix的起源應該贅述MULTICS的歷史,Unix的父輩是頗具開拓性的Multics項目……

Unix創世紀

二戰結束以后,冷戰開始了。1957年蘇聯發射了第一顆人造衛星,進而開始籌備發射載人宇宙飛船。與此同時,美國宇航局的研究卻連連受挫。航天領域的落后促使艾森豪威爾下決心劃撥巨款支持美國科學界,這一舉措讓美國的計算機科學以空前的速度發展起來??茖W家們開始設想將大型計算機作為一種公共設施,通過許許多多的終端為用戶提供計算時間的“計算機公用事業”,這無疑需要人類從未見過的精密而龐大的工程系統。

MIT[1]61年在IBM7094型機器上實現了首個分時系統CTSS(Compatible Time-Sharing System,相容分時系統),在計算機界享有盛譽。之后的1963年,MIT啟動MAC計劃。計劃以IBM大型機為主體,連接了160臺終端,分別位于教職員家和校區四處,允許30名用戶同時使用。然而到了1965年,MAC就已不堪負荷。MIT決定開發更大的分時系統——MULTICS(MULTiplexed Information and Computing System,多路信息與計算系統)。
Multics
計劃中的MULTICS將史無前例地連接1000臺終端,支持300名用戶同時使用,它將帶給計算機界更加成熟的分時系統理念和新的硬件設計思路。由于IBM無意參與,而通用電氣公司(General Electric)力推他們的GE645主機,MIT與GE[2]合作,又找來貝爾實驗室城堡軟件工程,開始了新系統的研發。

著意栽花花不發(1969)

1969年,奮戰了四年的MULTICS還是達不到計劃中的性能,貝爾實驗室退出了。先天不足的MULTICS還是被裝在GE645上供IT使用,而通用電氣在一年之后就完全淡出大型機市場。MULTICS遭到徹底的失敗,被潮解為:Many Unnecessarily Large Table In Core Sinultaneously。同一時期的IBM的SYSTEM/360等大型機系統的研發都以失敗收場,大型機開始受到冷落,小型、微型機上的研發逐漸活躍起。

無心插柳柳成蔭(1969)

同年,貝爾實驗室的Ken Thompson和Dennis Ritchie準備把原先為MULTICS設計的名叫“Space Travel”的游戲移植到他們使用的系統上??墒悄菚r大型機的CPU時間非常貴,為了能在閑置不用的PDP-7 計算機上運行非常喜歡的星際旅行(Space travel)游戲,他們只好把游戲程序移植到一臺沒人用的PDP-7小型機上。于是Ken Thompson 在夏天趁他夫人回家鄉加利福尼亞渡假期間,在一個月內開發出了UNIX操作系統的原型。后來又給程序中加入了文件管理、進程管理的功能和一組實用工具,一個只能給2個用戶使用的系統誕生了。受到MULTICS的影響,Brian Kernighan玩笑地給系統取名為“UNICS”(UNiplexed Inforation and Computing System,沒路信息與計算系統),Unics的名字就是相對于MULTICS的一種戲稱,取諧音便是“UNIX”,后改名為改成了Unix。

于是,Unix就在這樣被游戲和玩笑創造了,當時是1969年8月。同年,Linux之父Linus Torvalds在芬蘭出生了。

Unix

科技始終來自于人性

當時因為Unics本來是以組合語言寫成的,所以每次要安裝到不同的機器都得要重新編寫組合語言。后來Thompson與Ritchie合作想將Unics改以高階程序語言來撰寫。當時現成的高階程序語言有B語言。 但是由B語言所編譯出來的核心性能不是很好。后來Dennis Ritchie [3] 將B語言重新改寫成C語言,再以C語言重新改寫與編譯Unics的核心, 最后正名與發行出Unix的正式版本,系統可移植性也大大增強。

MINIX操作系統

管窺Linux史

MINIX 系統是由Andrew S. Tanenbaum(AST)開發的。AST 是在荷蘭Amsterdam 的Vrije 大學數學與計算機科學系統工作,是ACM 和IEEE 的資深會員(全世界也只有很少人是兩會的資深會員)。MINIX 是他1987 年編制的,主要用于學生學習操作系統原理。到1991 年時版本是1.5。目前主要有兩個版本在使用:1.5 版和2.0 版。當然目前MINIX 系統已經是免費的,可以從許多FTP 上下載。

對于Linux 系統,他后來曾表示對其開發者Linus的稱贊。但他認為Linux的發展很大原因是由于他為了保持MINIX 的小型化,能讓學生在一個學期內就能學完,因而沒有接納全世界許多人對MINIX的擴展要求。因此在這樣的前提下激發了Linus 編寫Linux 系統。當然Linus 也正好抓住了這個好時機。

作為一個操作系統,MINIX 并不是優秀者,但它同時提供了用C 語言和匯編語言編寫的系統源代碼。這是第一次使得有抱負的程序員或hacker 能夠閱讀操作系統的源代碼。在當時,這種源代碼是軟件商們一直小心守護著的秘密。

GNU計劃

GUN

軟件產業在70年代成就了兩位針鋒相對的領袖人物,來自哈佛大學的比爾·蓋茨和Richard M.Stallman。前者宣布了Copyright(版權)時代的到來,并構建了微軟帝國的輝煌;后者于1984年創立自由軟件體系GNU,擬定普遍公用版權協議(GeneralPublicLicense,簡稱GPL),今天Linux的成功就得益于GPL協議。

所有GPL協議下的自由軟件都遵循著Richard M. Stallman的"Copyleft"(非版權)原則:即自由軟件允許用戶自由拷貝、修改和銷售,但是對其源代碼的任何修改都必須向所有用戶公開。

GNU 計劃和自由軟件基金會FSF(the Free Software Foundation)是由Richard M. Stallman 于1984 年一手創辦的。旨在開發一個類似UNIX 并且是自由軟件的完整操作系統:GNU 系統(GNU 是"GNU's Not Unix"的遞歸縮寫,它的發音為"guh-NEW")。

各種使用Linux 作為核心的GNU 操作系統正在被廣泛的使用。雖然這些系統通常被稱作"Linux",但是Stallman 認為,嚴格地說,它們應該被稱為GNU/Linux系統。

到上世紀90 年代初,GNU 項目已經開發出許多高質量的免費軟件,其中包括有名的emacs 編輯系統、bash shell 程序、gcc 系列編譯程序、gdb 調試程序等等。這些軟件為Linux 操作系統的開發創造了一個合適的環境。這是Linux 能夠誕生的基礎之一,以至于目前許多人都將Linux 操作系統稱為“GNU/Linux”操作系統。

POSIX標準

POSIX

POSIX 可移植操作系統接口(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 開發的一簇標準。該標準是基于現有的UNIX 實踐和經驗,描述了操作系統的調用服務接口。用于保證編制的應用程序可以在源代碼一級上在多種操作系統上移植和運行。它是在1980 年早期一個UNIX 用戶組(usr/group)的早期工作基礎上取得的。該UNIX 用戶組原來試圖將AT&T 的System V 操作系統和BerkeleyCSRG 的BSD 操作系統的調用接口之間的區別重新調和集成。并于1984 年定制出了/usr/group 標準。

在90 年代初,POSIX 標準的制定正處在最后投票敲定的時候,那是1991-1993 年間。此時正是Linux剛剛起步的時候,這個UNIX 標準為Linux 提供了極為重要的信息,使得Linux 能夠在標準的指導下進行開發,并能夠與絕大多數UNIX 操作系統兼容。在最初的Linux 內核源代碼中(0.01 版、0.11 版)就已經為Linux 系統與POSIX 標準的兼容做好了準備工作。在Linux 0.01 版內核的/include/unistd.h 文件中就已經定義了幾個有關POSXI 標準要求的符號常數,而且Linus 在注釋中已寫道:“OK,這也許是個玩笑,但我正在著手研究它呢”。

Internet 網絡

Internet趨于成熟為linux開發、交流、發展的信息和資源的提供了交流平臺。

Linux的誕生

萬事俱備只欠東風

MS-DOS

  • 在1981 年,IBM 公司推出了享譽全球的微型計算機IBM PC。在1981-1991 年間,MS-DOS 操作系統 一直是微型計算機操作系統的主宰。此時計算機硬件價格雖然逐年下降,但軟件價格仍然居高不下 。

  • Apple 的MACs 操作系統可以說是性能最好的,但是其天價使得沒人能夠輕易靠近。

  • 當時的另一個計算機技術陣營就是UNIX 世界。但是UNIX 操作系統就不僅是價格昂貴的問題 了。為了尋求高利潤率,UNIX 經銷商們把價格抬得極高,PC 小用戶根本不能靠近它。曾經一度收到Bell Labs許可而能在大學中用于教學的UNIX 源代碼也一直被小心地守衛著不許公開。

  • 對于廣大的PC 用戶,軟件行業的大型供應商們始終沒有給出有效的解決這個問題的手段。

  • 正在此時,出現了MINIX 操作系統 ,并且有一本描述其設計實現原理的書 同時發行。由于AST的這本書寫的非常詳細,并且敘述得有條有理,于是幾乎全世界的計算機愛好者都開始看這本書,以期能理解操作系統的工作原理。

  • 其中也包括Linux 系統的創始者Linus Benedict Torvalds。當時(1991 年),Linus Benedict Torvalds 是赫爾辛基大學計算機科學系的二年級學生,也是一個自學的計算機hacker。這個21歲的芬蘭年輕人喜歡鼓搗他的計算機,測試計算機的性能和限制。但當時他所缺乏的就是一個專業級的操作系統。

  • 在同一年間,GNU 計劃已經開發出了許多工具軟件。其中最受期盼的GNU C 編譯器已經出現,但還沒有開發出免費的GNU 操作系統。 即使是教學使用的MINIX 操作系統也開始有了版權,需要購買才能得到源代碼。雖然GNU 的操作系統HURD一直在開發之中,但在當時看來不能在幾年內完成。

Linus

為了能更好地學習計算機知識(或許也只是為了興趣),Linus 使用圣誕節的壓歲錢和貸款購買了一臺386 兼容電腦 ,并從美國郵購了一套MINIX 系統軟件 。就在等待MINIX 軟件期間,Linus 認真學習了有關Intel 80386 的硬件知識。為了能通過Modem 撥號連接到學校的主機上,他使用匯編語言并利用80386 CPU的多任務特性編制出一個終端仿真程序。此后為了將自己一臺老式電腦上的軟件復制到新電腦上,他還為軟盤驅動器、鍵盤等硬件設備編制出相應的驅動程序。(他編寫了一些os相關的程序)通過編程實踐,并在學習過程中認識到MINIX 系統的諸多限制(MINIX 雖然很好,但只是一個用于教學目的簡單操作系統,而不是一個強有力的實用操作系統),而且通過上述實踐Linus 已經有了一些類似于操作系統硬件設備驅動程序的代碼,于是他開始有了編制一個新操作系統的想法。(一個影響深遠的想法誕生了)。

從1991年4月份起(let take this time as thestart),他通過修改終端仿真程序和硬件驅動程序,開始編制起自己的操作系統來。開始,他的目的很簡單,只是為了學習Intel 386 體系結構保護模式運行方式下的編程技術。但后來Linux發展卻完全改變了初衷。(起始的時間)。

根據Linus 在comp.os.minix 新聞組上發布的消息,我們可以知道他逐步從學MINIX 系統階段發展到開發自己的Linux 系統的過程。(具體了解的來源)。

Linus第1次向comp.os.minix 投遞消息是在1991年3月29日。所發帖子的題目是“gcc on minix-386doesn't optimize”,是有關gcc 編譯器在MINIX-386 系統上運行優化的問題(由此可知,Linus在1991 年初期就已經開始深入究了MINIX 系統,并在這段時間有了改進MINIX 操作系統的思想。在進一步學習MINIX 系統之后,這個想法逐步演變成想重新設計一個基于Intel 80386 體系結構的新操作系統的構思。(思想的轉變)

他在回答有人提出MINIX 上的一個問題時,所說的第一句話就是“閱讀源代碼”(“RTFSC (Read the F**ing Source Code :-)”)。他認為答案就在源程序中。這也說明了對于學習系統軟件來說,我們不光需要懂得系統的工作基本原理,還需要結合實際系統,學習實際系統的實現方法。因為理論畢竟是理論,其中省略了許多枝節,而這些枝節問題雖然沒有太多的理論含量,但卻是一個系統必要的組成部分,就象麻雀身上的一根羽毛。(實踐的重要意義)

大致時間表

  • 1991 年4 月 份開始,Linus 幾乎花費了全部時間研究MINIX-386 系統(Hacking the kernel),并且嘗試著移植GNU 的軟件到該系統上(GNU gcc、bash、gdb 等)。并于4 月13 日在comp.os.minix 上發布說自己已經成功地將bash 移植到了MINIX 上,而且已經愛不釋手、不能離開這個shell 軟件了。
    第一個與Linux 有關的消息是在1991 年7 月3日 在comp.os.minix 上發布的(當然,那時還不存在Linux 這個名稱,當時Linus 腦子里想的名稱可能是FREAX,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,并且已經想到要實現與POSIX 兼容的問題了。

  • 在Linus 另一個發布的消息中(1991 年8 月25日 comp.os.minix),他向所有MINIX 用戶詢問“Whatwould you like to see in minix?”(“你最想在MINIX系統中見到什么?”),在該消息中他首次透露出正在開發一個(免費的)386(486)操作系統,并且說只是興趣而已,代碼不會很大,也不會象GNU 的那樣專業。希望大家反饋一些對于MINIX 系統中喜歡哪些特色不喜歡什么等信息,并且說明由于實際和其它一些原因,新開發的系統剛開始MINIX 很象(并且使用了MINIX的文件系統)。并且已經成功地將bash(1.08版)和gcc(1.40 版)移植到了新系統上,而且在過幾個月就可以實用了。最后,Linus 申明他開發的操作系統沒有使用一行MINIX 的源代碼;而且由于使用了386 的任務切換特性,所以該操作系統不好移植(沒有可移植性),并且只能使用AT 硬盤。對于Linux 的移植性問題,Linus當時并沒有考慮。但是目前Linux 幾乎可以運行在任何一種硬件體系結構上。

  • 1991 年的10 月5 日 ,Linus 在comp.os.minix 新聞組上發布消息,正式向外宣布Linux 內核系統的誕生(Free minix-like kernel sources for 386-AT)。這段消息可以稱為Linux 的誕生宣言,并且一直廣為流傳。因此10 月5 日對Linux社區來說是一個特殊的日子,許多后來Linux 的新版本發布時都選擇了這個日子。所以RedHat 公司選擇這個日子發布它的新系統也不是偶然的。(產生的時間)


[1]美國麻省理工學院
[2]美國通用電氣公司

原創文章,作者:Fogx,如若轉載,請注明出處:http://www.www58058.com/51338

(0)
FogxFogx
上一篇 2016-10-14 10:16
下一篇 2016-10-14 10:49

相關推薦

  • 面授20-1班 0805課間練習與課后作業

    課間練習 第一階段 新學的命令文本命令cat tac rev more less head tail cut paste wc sort dif patch 1 、找出ifconfig 命令結果中本機的所有IPv4 地址 [root@IP70-CentOS7 ~]# >>ifconfig | tr&nbsp…

    Linux干貨 2016-08-07
  • Linux中的man命令使用方法

      Linux中的man命令就是manual的縮寫,此命令是用來查看系統中自帶的各種參考手冊,幫助用戶更好的了解并使用命令。   man命令的使用格式為: man COMMAND,即man后面跟上需要查詢的命令,進到手冊后有如下快捷按鈕幫助用戶更好的操作手冊。     1.按鍵-j &nb…

    Linux干貨 2016-10-20
  • rsync+inotify實現數據同步——雙向傳輸

    實驗環境:<僅2臺主機之間進行數據雙向傳輸> A主機:10.1.43.102 B主機:10.1.43.103 一、數據從A推向B 配置流程 先在B主機上配置: 1.vi /etc/rsyncd.conf(用戶,目錄,模塊,虛擬用戶及密碼文件) uid = root gid = root port …

    Linux干貨 2016-10-27
  • Linux 計劃任務快速理解入門

    計劃任務簡單來說是一個我們規定的時間去執行我們需要的腳本、命令及需要Linux做的事情。 以前寫過一個腳本,由于當時沒有學過計劃任務,所以寫起來特別痛苦,該腳本的需求是每天晚上11:00 備份/etc目錄 當時特別小白,于是這么寫的: VimrebootScript ‘ #!/bin/bash whiletrue;do If [ -d/app/e…

    Linux干貨 2017-05-15
  • liunx性能監控工具總結

    1.uptime 1)顯示的信息:顯示當前時間,系統已啟動的時間,當前在線人數,系統平均負載(1分鐘、5分鐘、10分鐘的平均負載,一般不會超過1) 2)系統平均負載:指在特定時間間隔內運行隊列中的平均進程數。 3)如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺及其的性能有嚴重問題 4)ruguo…

    Linux干貨 2016-09-09
  • 數組,字符串處理,mktemp命令,install命令,bash的環境配置文件,程序包編譯

    數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。 數組名和索引 索引:編號從0開始,屬于數值索引 注意:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0版本之后開始支持。 bash的數組支持稀疏格式(索引不連續) 聲明數組: declare -a ARRAY_NAME(普通數組可以不加聲…

    Linux干貨 2016-08-24

評論列表(2條)

  • 馬哥教育
    馬哥教育 2016-10-14 10:47

    總結的不錯,希望可以加入自己的一些理解,能夠熟悉了解這段發展史,加油~

    • Fogx
      Fogx 2016-10-18 16:49

      @馬哥教育謝謝,我會爭取的!

欧美性久久久久