02.27 Linux Kernel學習001——簡介(一)

嚴格來說,Linux是一個像Unix內核一樣設計的操作系統內核。而今天的UNIX是一個用Open Group擁有的商標。對於自稱為UNIX的系統,它需要滿足某些條件,通過一致性測試並許可名稱。關於哪些操作系統通過了Open Group的認證,可以訪問Open Group的官網。鏈接。

Linux Kernel學習001——簡介(一)

Apple

有趣的是,Mac OS X自10.5到最新的10.14(除了10.7)外,都通過了UNIX 03的認證。

雖然Linux類似於UNIX系統並提供與UNIX兼容的環境,但它尚未正式認證為UNIX系統。 另一方面,如果它看起來像一隻鴨子,像鴨子一樣走路,像鴨子一樣嘎嘎叫,那麼它可能就是一隻鴨子。來源於APUE官網。

因為Linux和Unix的密切關係,若要了解Linux,我們必須首先認識Unix系統。

1.1 Unix歷史

UNIX是一個歷史悠久的操作系統,早在MS DOS、Windows出現前就誕生了,到現在已經快有五十年的歷史了。

1964年麻省理工學院,通用電氣公司和貝爾實驗室領導了一個合作項目——開發一個新的名為Multics的多用戶、交互式操作系統。Multics旨在向大用戶團體提供同時計算和存儲的能力。但是,在1969年,貝爾實驗室撤出了該項目組,麻省理工學院和通用電氣繼續開發Multics。貝爾實驗室的一些主要開發人員仍在繼續研究另一個課題。其中的Ken Thompson用Fortran編寫了一個"太空旅行"(Space Travel)程序。與此同時,Thompson、Dennis Ritchie和貝爾實驗室的其他人提出了一個新的文件系統原型,為了改善他們的程序設計環境。不久後,Thompson在GE-645計算機上實現了模擬這個文件系統的程序,但是任然無法滿足"太空旅行"遊戲的需要。因此,Thompson就用一臺閒置的PDP-7實現了"太空旅行"遊戲。此後,Thompson和Dennis Ritchie為PDP-7開發了一個操作系統環境,在這個系統中實現了之前的文件系統。不久後,該操作系統中又加入了進程子程序、一個簡單的命令解釋程序(後來演變成Bourne shell, sh)和一組管理文件系統的實用程序,並且實現了對兩個用戶分時使用的支持。這就是Unix操作系統的第一個用匯編完成的版本,當然當時它的名字不是Unix而是UNICS。在1970年,正式命名為Unix。

1971年,Unix的第一個彙編版本被移植到PDP-11中。1972年發佈了Unix的第二版,該版本加入了用B語言寫的管道和內核。由於B語言是一種解釋型語言,因此受到了性能不高的困擾。之後,Ritchie將B語言改進成一門新的語言即C語言。1973年,第三版的Unix發佈,它包含了C語言的編譯器cc。同年,Unix被用C語言重寫,於1973年11月發佈了第四版。

1973年,Thompson和Dennis Ritchie共同撰寫了第一篇關於Unix的論文"The UNIX Time Sharing System",發表在《ACM Symposium on Operating System》上,並在1974年1月發表在了《Communication of ACM》上。這篇論文第一次讓外界看到了Unix,並且世界各地的學者開始對這個新系統感興趣,並導致了對Unix源代碼的需求。之後不久,Unix發佈了第五版,該版本在一個簡單的許可協議下可以自由獲取,第一個獲得許可的是加州大學伯克利分校。

1975年貝爾實驗室第一次通過Western Electric Company對外發布了Unix第六版,也稱為V6。

1979年1月,Unix v7發佈,這是第一個真正可移植的Unix系統。該版本包含了一個C語言編譯器pcc(即Portable C Compiler),一個稱為"Bourne Shell"的命令解釋器以及其他許多特性。

加州大學伯克利分校獲得Unix許可後,很多研究生和教授都對這個系統產生了很大的興趣,其中包括Bill Joy和Chuck Holey。他們為這個Unix開發了一些實用程序,包括Pascal編譯器和ed編輯器(後來演變為vi,vi演變為vim)。Bill Toy將這些新增的內容和一些廣泛發佈的軟件集中起來,打成一個軟件包,形成了"Berkeley Software Distribution"(BSD),並且在1978年以每個許可協議50美元的價格發售。之後不久,又推出了2BSD。

前兩個BSD只包含了應用和實用程序,並沒有修改也沒有包含Unix操作系統,第一個包含操作系統的版本是1979年發佈的2BSD。3BSD在內核加入了頁式請求和虛擬內存等新特性。3BSD的虛擬內存功能引起了國防高級研究項目部(DARPA)的注意,他們為BSD系統的開發提供了資金。DARPA項目的主要目的之一是集成TCP/IP網絡協議包。80年代產生了後來統稱為4BSD的幾個版本:4.0BSD(1980)、4.1BSD(1981)、4.2BSD(1983)、4.3BSD(1986)以及4.4BSD(1993)。

伯克利Unix的研究工作是由計算機科學研究組(CSRG,Computer Science Research Group)進行的。4.4BSD之後,由於Unix系統變得越來越大,以至於很難由一個小組來維護和發展,同時也由於經費問題,CSRG決定不再進行Unix的開發。

伯克利小組對Unix的發展做出了許多重要的共享。包括但不限於:虛擬內存、TCP/IP協議、快速文件系統、可靠信號和套接字等功能。

另一方面,貝爾實驗室發佈了綜合各種變體的Unix System Ⅲ(1982)、System Ⅴ(1983)、System V R2(1984)、System V R3(1987)、System V R4(1989)。

在1982年,AT&T(貝爾實驗室的母公司)與美國司法部的反壟斷官司告結。作為結果之一,貝爾實驗室獨立出來並重新命名為AT&T實驗室,同時AT&T被允許進入計算機商務。為此,AT&T提前宣佈了Unix System V,並且宣佈對Syste V以及將來的版本提供技術支持,且System V與未來的版本向上兼容。

System V引入了許多新的特徵,比如:進程間通信(共享存儲、信號量和消息隊列等)、遠程文件共享、共享庫等。

Unix的廣泛使用引起了不少計算機公司的興趣。在1977年,AT&T公司向計算機廠商提供了製造許可證,這使得許多OEM廠商可以重寫Unix的部分內核和外部結構,他們基於Unix推出了自己的商業版本。

版本演變歷史可以參考下圖:

Linux Kernel學習001——簡介(一)

Unix_history-simple.png

1.2 Minix操作系統

Minix系統是由Andrew S. Tanenbaum開發的。Tanenbaum在荷蘭一所大學的數學與計算機科學系任教,他與1987年編寫了Minix,主要用於幫助學生學習操作系統原理。到1991年時版本是1.5,目前(2018)年最新版達到了3.3.0。官網:http://www.minix3.org/。

作為一個操作系統,Minix也許算不上優秀,但是它同時提供了C語言和彙編語言編寫的系統源代碼。

1.3 GNU計劃

GNU計劃和自由軟件基金會(the Free Software Foundation, FSF)是由Richard M. Stallman與1984年一手船板的,旨在開發一個類似Unix並且是自由軟件的完整操作系統:GNU系統(GNU是GNU's Not Unix的遞歸縮寫)。到20世紀90年代初,GNU項目已經開發出許多高質量的自由軟件,其中包括有名的Emacs文本編輯器、Bash、GCC、GDB等。這些軟件為Linux操作系統的開發提供了一個合適的環境。也是Linux能夠誕生的基礎之一。

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

1.4 POSIX標準

Unix變體的激增產生了許多兼容性問題,特別是各種商業Unix變體的出現使得情況變得更加複雜。System V和BSD在許多方面不同,比如:文件系統、網絡機制和虛擬內存結構。這些不同中有一部分限制在內核設計和實現上,而另一部分出現在程序設計的接口層,這導致沒有一個複雜的應用程序能夠不加修改地同時運行與System V和BSD系統。

這種情形導致了對Unix標準的需求,1986年美國電子和電氣工程協會IEEE制定了一個委員為正式形成試用標準POSIX 1003.1,這是關於可移植操作系統計算機環境標準的第一次嘗試。因為AT&T保留了Unix名字的所有權,因此該標準使用POSIX(Portable Operating System Interface based on UNIX)作為其名稱。自此以後,POSIX委員會提議了該標準的若干規範,其目的是產生一個關於可移植操作系統環境的ISO標準。目前最新的標準是POSIX 1003.1-2017。

POSIX的出現使得用戶能夠遵循由正式標準化組織承認的標準。此外,POSIX允許轉換POSIX的調用至目標操作系統的調用,如DEC-Open VMS和微軟的Windows NT。反過來說,任何操作系統都可以在源代碼級用POSIX調用重寫,因而用戶可以繼續使用他們喜歡的操作系統(不必是UNIX)。

現代Unix系統實現都採納了POSIX1003.1,因而提供了源代碼級的可移植性。

1.5 Linux

現在可以來講Linux了。

Linux出現於1991年,作者是芬蘭赫爾辛基大學的一名大二學生Linus Torvalds。Linus喜歡折騰計算機,測試計算機的性能和極限,但是缺乏一個專業級的操作系統。

在同一年間,GNU疾患已經開發出了許多工具軟件。其中已經喲歐樂GNU C編譯器,但是還沒有開發出免費的GNU操作系統。而即使是教學用的Minix操作系統也有版本,需要購買才能獲取。雖然GNU的內核HURD正在開發當中,當時在當時看來還不能在幾年內完成。

此時Linus購買了一臺386兼容電腦和一套Minix系統軟件,之後他通過修改終端仿真程序和硬件驅動程序,開始編制自己的操作系統。在1991年10月5日,Linus在comp.os.minix新聞組上發佈消息,正式向外宣佈了Linux內核系統的誕生。最初發布的Linux很快贏得了眾多用戶,並且吸引了很多開發者、黑客對其代碼進行修改和完善。由於其許可證條款,0.12版本之後使用用 GNU 通用公共許可證第二版。該協議允許任何人對軟件進行修改或發行,包括商業行為,只要其遵守該協議,所有基於Linux的軟件也必須以該協議的形式發表,並提供源代碼。

目前我們可以訪問Linux內核的官網https://www.kernel.org/,獲取內核各個版本的內核源碼,閱讀內核文檔等。截止到2019年初,最新的穩定版內核為4.20。

Linux目前被廣泛移植到Alpha、arc、arm、ia64、mips、powerpc、sparc、x86-64等許多體系結構上。Linux是l類Unix(Unix-like)系統,但是它不是Unix系統(未經過Open Group的認證測試)。Linux用途廣泛,包含的東西也非常多。Linux系統的基礎是內核、C庫(glibc)、工具集和系統的基本工具,如登錄程序和Shell等。Linux系統也支持現代的X Window系統,這樣就可以使用完整的圖形用戶桌面程序。在之後的博客中,一般用Linux一詞指Linux內核。


分享到:


相關文章: