1. 程式人生 > >UNIX C 學習筆記一:UNIX/Linux發展歷史以及相關概念

UNIX C 學習筆記一:UNIX/Linux發展歷史以及相關概念

一、UNIX 與 Linux 的發展歷史

Unix 作業系統是一個強大的多使用者,多工作業系統,支援多種處理器架構,按照作業系統的分類,屬於分時作業系統,最早由 Ken Thompson, Dennis Titchie 和 Douglas Mcllroy 於 1969年在 AT&T 的貝爾實驗室開發。目前它的商標權由國際開放標準組織所擁有,只有符合單一 UNIX 規範的 UNIX 系統才能使用 UNIX 這個名稱,否則只能稱為類 UNIX (UNIX-like)。
Linux是一套免費使用和自由傳播的類 UNIX 作業系統,是一個基於 POSIX 和 UNIX 的多使用者,多工,支援多執行緒和多 CPU 的操作哦系統。能執行主要的 UNIX 工具軟體,應用程式和網路協議,支援32位和64位硬體。
Linux 作業系統依賴於:UNIX 作業系統,MINIX 作業系統,GNU 計劃, POSIX 標準 和 Internet 網路。

1965年

貝爾實驗室(Bell Labs)加入一項由通用電氣(General Electric)和麻省理工學院(MIT)合作的計劃,該計劃要建立一套多使用者,多工,多層次(multi-user, multi-processor, multi-level)的 MULTICS 作業系統。

1969年

因 MULTICS 計劃的工作進度慢,該計劃被停了下來。當時, Ken Thompson (後被稱為 UNIX 之父)已經有了一個稱為“星際旅行”的程式在 GE-635 的機器上跑,但是反應非常慢,正巧被他發現了一部被閒置的 PDP-7( Digital 的主機), Ken Thompson 和 Dennis Ritchie 就將“星際旅行”的程式移植到 PDP-7 上。
MULTICS 是 Multiplexed Information and Computing Services 的縮寫,在1970年,那部 PDP-7 只能支援兩個使用者,當時,Brian Kernighan 就開玩笑地稱他們的系統其實是:UNiplexed Information and Computing Service,縮寫為“UNICS”,後來,大家就其諧音,稱其為 “UNIX” 了。

1970年 是 UNIX 元年。

1971年

UNIX 第一版出來了。

1973年

Ken Thompson 與 Dennis Ritchie 感到用匯編語言做移植太過於頭痛,他們想用高階語言來完成第三版,一開始使用 Fortran,失敗了。後來用一個叫 BCPL(Basic Combined Programming Language)的語言開發,他們整合了 BCPL 形成 B 語言,後來 Dennis Ritchie 覺得 B 語言還是不能滿足,於是改良了 B 語言,就是現在的 C 語言。於是 Ken Thompson 和 Dennis Ritchie 成功的用 C 語言重寫了 Unix 的第三版核心。

1974年7月

Ken Thompson 和 Dennis Ritchie 在 The Communications of the ACM 發表了一篇題為“The UNIX Time Sharing System”,這是 Unix 與外界的首次接觸。
Unix 第五版就以“僅用於教育目的”的協議,提供給各大學作為教學只用,稱為當時作業系統課程中的範例教材。各大學公司開始通過 Unix 原始碼對 Unix 進行了各種各樣的改進和擴充套件。於是 Unix 開始廣泛流行。

1977年, BSD 分支誕生

伯克利大學的 Bill Joy 在取得了 UNIX 的核心原始碼之後,著手修改適合自己機器的版本,並且同時增加了很多工具軟體與編譯程式,最終將它命名為 Berkeley Software Distribution(BSD)。Bill Joy 也是 Sun 公司的創辦者。

1979年, AT&T 的 UNIX V誕生

由於 UNIX 的高度可移植性與強大的功能,加上當時並沒有商業糾紛,所以很多商業公司開始了 UNIX 作業系統的發展。但是他們開發出來的 UNIX 作業系統以及內含的相關軟體都只是適合自己的硬體,並沒有辦法在其他的硬體架構下工作。直到 AT&T 推出的 System V 第七版 Unix, 其可以支援 x86 架構的個人計算機系統。由此 Unix 開始出現各種各樣的變種。

1981年, IBM 公司推出了微型計算機 IBM PC

1984年,x86 架構的 Minix 作業系統誕生。

在1979年的版權宣告中,影響最大的就是學校教 UNIX 核心原始碼的問題了。為了教學生 Andrew Tanenbaum(譚寧邦)教授動手寫了 Minix 這個 Unix Like 的核心程式。1984年開始寫,1986年完成,並於次年出版 Minix 相關書籍,

1984年,GNU計劃與 FSF 基金會成立

Richard Mathew Stallman(史託曼)在1984年發起的 GNU 計劃,GNU是“GNU's Not UNIX”的遞迴縮寫,計劃的目的:建立一個自由,開放的Unix作業系統(Free Unix)。
FSF, Free Sofeware Foundation 自由軟體基金會。是一個致力於推廣自由軟體、促進計算機使用者自由的美國民間非盈利性組織。它於1985年10月由理查德·斯托曼建立。其主要工作是執行GNU計劃,開發更多的自由軟體,完善自由軟體理念。

1991年

芬蘭的赫爾辛基大學的 Linus Torvalds 在 BBS 上貼了一則訊息,宣稱他以 bash, gcc等工具謝了一個小小的核心程式,這個核心程式可以在 Intel 的 386 機器上面運作,讓很多人很感興趣。

1994年

Linux 的核心正式版 version 1.0 釋出。

1996年

version 2.0 釋出。指明瞭企鵝為 Linux 的吉祥物。

二、Unix的特點:

1.UNIX系統是一個多使用者,多工的分時作業系統。
2.UNIX的系統結構可分為三部分:
	作業系統核心(是 UNIX 系統核心管理和控制中心,在系統啟動或常駐記憶體),
	系統呼叫(供程式開發者開發應用程式時呼叫系統元件,包括程序管理,檔案管理,裝置狀態等),
	應用程式(包括各種開發工具,編譯器,網路通訊處理程式等,所有應用程式都在 Shell 的管理和控制下為使用者服務)。
3.UNIX系統大部分是由C語言編寫的,這使得系統易讀,易修改,易移植。
4.UNIX提供了豐富的,精心挑選的系統呼叫,整個系統的實現十分緊湊,簡潔。
5.UNIX提供了功能強大的可程式設計的Shell語言(外殼語言)作為使用者介面具有簡潔,高效的特點。
6.UNIX系統採用樹狀目錄結構,具有良好的安全性,保密性和可維護性。
7.UNIX系統採用程序對換(Swapping)的記憶體管理機制和請求調頁的儲存方式,實現了虛擬記憶體管理,大大提高了記憶體的使用效率。
8.UNIX系統提供多種通訊機制,如:管道通訊,軟中斷通訊,訊息通訊,共享儲存器通訊,訊號燈通訊。

三、POSIX 標準:

隨著 Unix 的成長,其版本分支開始變多,而 UNIX 這個名字由於法律關係,誰也不能說自己的作業系統是 UNIX 而只能說是類 UNIX。所以現在 UNIX 系統嚴格意義上是不存在的。現在的Solaris, AIX, IRIS都是各公司在自己的硬體平臺上做的商業化的 UNIX,這些系統都遵循 POSIX 標準。
POSIX 表示可移植作業系統介面(Portable Operating System Interface of UNIX,縮寫為 POSIX ),POSIX 標準定義了作業系統應該為應用程式提供的介面標準,是 IEEE 為要在各種 UNIX 作業系統上執行的軟體而定義的一系列 API 標準的總稱,其正式稱呼為 IEEE 1003,而國際標準名稱為 ISO/IEC 9945。
POSIX 標準意在期望獲得原始碼級別的軟體可移植性。換句話說,為一個 POSIX 相容的作業系統編寫的程式,應該可以在任何其它的 POSIX 作業系統(即使是來自另一個廠商)上編譯執行。
POSIX 並不侷限於 UNIX。許多其它的作業系統,例如 DEC OpenVMS 支援 POSIX 標準,尤其是 IEEE Std. 1003.1-1990(1995 年修訂)或 POSIX.1,POSIX.1 提供了原始碼級別的 C 語言應用程式設計介面(API)給作業系統的服務程式,例如讀寫檔案。POSIX.1 已經被國際標準化組織(International Standards Organization,ISO)所接受,被命名為 ISO/IEC 9945-1:1990 標準。

四、類 UNIX
1.AIX(Advanced Interactive eXecutive)— IBM

是 IBM 開發的一套 UNIX 作業系統。它符合 Open group 的 UNIX 98 行業標準(The Open Group UNIX 98 Base Brand),通過全面整合對32-位和64-位應用的並行執行支援,為這些應用提供了全面的可擴充套件性。它可以在所有的 IBM ~ p 系列和 IBM RS/6000 工作站、伺服器和大型並行超級計算機上執行。AIX 的一些流行特性例如 chuser、mkuser、rmuser 命令以及相似的東西允許如同管理檔案一樣來進行使用者管理。AIX 級別的邏輯卷管理正逐漸被新增進各種自由的UNIX風格作業系統中。

2.Solaris 是SUN公司研製的類Unix作業系統。

直至2013年,Solaris的最新版為 Solaris 11。
早期的 Solaris 是由 BSDUnix 發展而來。這是因為昇陽公司的創始人之一,比爾·喬伊(Bill Joy)來自加州大學伯克萊分校(U.C.Berkeley)。但是隨著時間的推移,Solaris 在介面上正在逐漸向 System V 靠攏,但至今 Solaris 仍舊屬於私有軟體。2005年6月14日,Sun 公司將正在開發中的 Solaris 11 的原始碼以 CDDL 許可開放,這一開放版本就是 OpenSolaris。
Sun的作業系統最初叫做 SunOS。SunOS 5.0開始,SUN 的作業系統開發開始轉向 System V4,並且有了新的名字叫做 Solaris 2.0。Solaris 2.6 以後,SUN 刪除了版本號中的"2",因此,SunOS 5.10 就叫做 Solaris 10。Solaris 的早期版本後來又被重新命名為Solaris 1.x. 所以"SunOS"這個詞被用做專指 Solaris 作業系統的核心,因此 Solaris 被認為是由 SunOS,圖形化的桌面計算環境,以及它網路增強部分組成。
Solaris執行在兩個平臺:Intel x86 及SPARC/UltraSPARC。後者是昇陽工作站使用的處理器。因此,Solaris 在 SPARC 上擁有強大的處理能力和硬體支援,同時Intel x86上的效能也正在得到改善。對這兩個平臺,Solaris 遮蔽了底層平臺差異,為使用者提供了儘可能一樣的使用體驗。

3.HP-UX – HP

取自Hewlett Packard UniX,是惠普公司(HP,Hewlett-Packard)以 System V 為基礎所研發成的類 UNIX 作業系統。

4.IRIX – Silicon GraphicsInc

是由矽谷圖形公司(Silicon GraphicsInc.,一般用簡稱:SGI)以System V與BSD延伸程式為基礎所發展成的UNIX作業系統,IRIX可以在SGI公司的RISC型電腦上執行,即是採行32位、64位MIPS架構的SGI工作站、伺服器。

5.Xenix – 微軟

是一種 UNIX 作業系統,可在個人電腦及微型計算機上使用。該系統由微軟公司在1979年從美國電話電報公司獲得授權,為 Intel 處理器所開發。它繼承了 UNIX 的特性,Xenix 具備了多人多工的工作環境,符合 UNIX System V 的介面規格 (SVID)。

6.A/UX

(取自Apple Unix)是蘋果電腦(Apple Computer)公司所開發的 UNIX 作業系統,此作業系統可以在該公司的一些麥金塔電腦(Macintosh)上執行,最末(或說最新)的一套A/UX是在Macintosh II、Quadra及Centris等系列的電腦上執行。A/UX於1988年首次發表,最終的版本為3.1.1版,於1995年發表。A/UX 至少需要一顆具有浮點運算單元及標籤頁式的儲存器管理單元(Paged Memory Management Unit,PMMU)的68k處理器才能執行。
A/UX 是以System V 2.2版為基礎所發展,並且也使用System V 3(簡稱:SysV 3)、System V 4、BSD 4.2、BSD 4.3等的傳統特色,它也遵循POSIX規範及SVID規範,不過遵循標準版本就難以支援最新的資訊科技,因此在之後的第二版便開始加入TCP/IP網路功能。有傳言表示有一個後續版本是以OSF/1為主要的程式碼基礎,但卻從未公開發表過,不過無從證實此版本是否真存在過。

7.BSD – Berkeley Software Distribution – 加州大學伯克利分校的計算機系統研究組(CSRG)研究開發和分發的。

1983年 --	4.2 BSD		在 VAX 小型機上執行
1986年 --	4.3 BSD		在 VAX 小型機上執行
1988年 -- 4.3 BSD Tahoe		在 Tahoe 的小型機上執行
1990年 -- 4.3 BSD Reno		支援很多 POSIX.1 功能。
1989年 --	伯克利將 4.3 BSD Tahoe中很多非 AT&T 原始碼包裝成BSD 網路軟體 1.0 版本,並使其成為公開獲得的軟體。
1991年 -- 釋出了 BSD 網路軟體 2.0 版,從 4.3 BSD Reno 版派生出來的,其目的是使大部分 4.4 BSD 不再受 AT&T 許可證的限制。最初的 BSD 系統包含了 AT&T 專有的原始碼,需要 AT&T 的認可證。
1994年 -- 4.4 BSD-Lite 釋出,不再需要具有 UNIX 原始碼使用許可證就可以使用它。
1995年 -- CSRG 修復了 bug 的版本。4.4 BSD-Lite 第2發行版是 CSRG的最後一個 BSD 版本。

BSD 則代表“Berkeley Software Distribution,伯克利軟體套件”,其源於對加州大學伯克利分校所開發的貝爾實驗室 UNIX 的一系列修改,它最終發展成一個完整的作業系統,現在有多個不同的BSD分支。
今天,“BSD”並不特指任何一個 BSD 衍生版本,而是類 UNI X作業系統中的一個分支的總稱。
以下是通常認可的三個“主流” BSD 作業系統:
	1)FreeBSD: FreeBSD 是最受歡迎的 BSD,針對高效能和易用性。它支援英特爾和 AMD 的32位和64位處理器。是基於 4.4BSD-Lite 作業系統的。
	2)NetBSD: NetBSD 被設計執行在幾乎任何架構上,支援更多的體系結構。在他們的主頁上的格言是"理所當然,我們執行在 NetBSD 上"。
	3)OpenBSD: OpenBSD 為最大化的安全性設計的 —— 這不僅僅它宣稱的功能,在實踐中也確實如此。它是為銀行和其他重要機構的關鍵系統設計的。

還有兩個其他的重要 BSD 作業系統:
	1)DragonFly BSD: DragonFly BSD 的設計目標是提供一個執行在多執行緒環境中的作業系統 —— 例如,計算機叢集。
	2)Darwin / Mac OS X: Mac OS X 實際上基於 Darwin 作業系統,而 Darwin 系統基於 BSD。它與其他的 BSD 有點不同,雖然底層核心和其他的軟體是開原始碼(BSD 程式碼),但作業系統的大部分是閉源的 Mac OS 程式碼)。蘋果在 BSD 基礎上開發了 Mac OS X 和 iOS,這樣他們就不必寫作業系統底層,就像谷歌在 Linux 基礎上開發 android 系統一樣。

8.System V

曾經也被稱為 AT&T System V,是 Unix 作業系統眾多版本中的一支。它最初由 AT&T 開發,在1983年第一次釋出。一共發行了4個 System V 的主要版本:版本1、2、3 和 4。System V Release 4,或者稱為 SVR4,是最成功的版本。
SVR4(UNIX System V Release 4)是 AT&T 的 UNIX 系統實驗室(UNIX System Laboratories, USL)的產品,將下列系統的功能合併到了一個一致的作業系統中:AT&T UNIX 系統 V 3.2(SVR3.2)、Sun Microssystems公司的 SunOS作業系統、加州大學伯克利分校的 4.3BSD 以及微軟的 Xenix 系統。
SVR4 在1989年後期釋出,在1990年開始向終端使用者提供。
符合 POSIX 1003.1 標準和 X/Open XPG3標準。

9.Linux

Linux 是由 Linus Torvalds 在1991年為替代 MINIX 而研發的。

五、幾種比較

  1. Linux 與 BSD

     1)許可證
     	許可證是典型的差異,雖然它不會對大多數人產生影響。
     		Linux 使用 GNU 通用公共許可證,即 GPL。如果你修改了 Linux 核心,並將其分發,你就必須放出您的修改的原始碼。
     	BSD 使用 BSD 許可證。如果你修改了 BSD 核心或發行版,並且釋出它,你根本不需要必須釋出其原始碼。你可以自由地對你的 BSD 程式碼做任何你想做的事情,你沒有義務釋出的你修改的原始碼,當然你想釋出也行。
     	兩者都是開放原始碼的,但是以不同的方式。人們有時會陷入關於哪種許可證是“更自由”的辯論。GPL 可以幫助使用者以確保他們可以擁有 GPL 軟體的原始碼,並限制開發人員迫使他們開放程式碼。BSD 許可證並不能確保使用者可以擁有原始碼,而是給開發人員選擇是否公佈程式碼的權利,即使他們想要把它變成一個閉源專案。
    
     2)使用
     	Linux 顯然比 FreeBSD 更受歡迎。例如,Linux 往往會比 FreeBSD 更早提供新硬體的支援。BSD 有一個相容包可用,使之能像大多數的其他軟體一樣原生的執行 Linux 二進位制程式。
     	如果您使用過 Linux, FreeBSD 不會讓你感覺到太大的不同。如果把 FreeBSD 作為桌面作業系統,你也可以使用相同的 GNOME,KDE 或 Xfce 桌面環境,你也可以在BSD上使用 Linux 上的大多數的其他軟體。有一點需要注意,FreeBSD 不會自動安裝的圖形化桌面,所以你要花相對於 Linux 更多的心思來照顧你的BSD。BSD 更守舊一些。
     	FreeBSD 的可靠性和穩定性也許更適合作為伺服器的作業系統。而廠商也會選擇 BSD 而不是 Linux 作為其作業系統,因為這樣他們就不必放出他們修改的程式碼。
     	如果你是一個 PC 桌面使用者,你真的不需要太過在意 BSD。你可能會喜歡 Linux,因為它具有更先進的硬體支援,更容易安裝,具有現代作業系統的特點。如果你關注伺服器或嵌入式的裝置,你可能會更喜歡 FreeBSD。
     	我們可能會聽到一些人說他們在桌面電腦上使用 FreeBSD,你當然也可能是其中之一!但像 Ubuntu 或 Mint 一樣的開源作業系統對於多數使用者來說更體驗良好和更先進些。
    
  2. System V 和 BSD

     Unix作業系統在操作風格上主要分為 System V 和 BSD (目前一般採用 BSD 的第4個版本 SVR4),前者的代表的作業系統有 Solaris 作業系統,在 Solaris1.X 之前,Solaris 採用的是 BSD 風格,2.x 之後才投奔S ystem V 陣營。後者的代表的作業系統有FreeBSD。
     System V 它最初由 AT&T 開發,曾經也被稱為 AT&T System V,是 Unix 作業系統眾多版本中的一支。在1983年第一次釋出,一共發行了4個System V的主要版本,System V Release 4,或者稱為 SVR4,是最成功的版本,該版本有些風格成為一些UNIX共同特性的源頭,如下表格的初始化指令碼/etc/init.d。用來控制系統的啟動和關閉。
     BSD(Berkeley Software Distribution,伯克利軟體套件)是 Unix 的衍生系統,1970年代由伯克利加州大學(Uni Versity of California, Berkeley)開創。BSD用來代表由此派生出的各種套件集合。
    
  3. Poxis 和 System V

     System V 的概念如上所述。
     Posix 是Portable Operating System Interface(可移植性作業系統介面)的簡稱,是一個電氣與電子工程學會即IEEE開發的一系列標準,目的是為執行在不同作業系統的應用程式提供統一的介面,實現者是不同的作業系統核心。
    
     將這兩個名詞放在一起討論的一般是在 Linux 的程序間通訊中,如在訊號量程式設計中,有 Posix 訊號量和 System V 訊號量。它們都可以用於程序或者執行緒間的同步。
     Posix 訊號量是基於記憶體的,即訊號量值是放在共享記憶體中的,它使與檔案系統中的路徑名對應的名字來標識。當我們談論“Posix 訊號量”時,所指的是單個計數訊號量。在 Linux 作業系統中,Posix 訊號量(共享記憶體、訊息佇列)可以通過 ipcs 命令檢視。Posix 訊號量多用於程序間通訊。
     System v 訊號量測試基於核心的,它放在核心裡面,要使用 System V 訊號量需要進入核心態,所以在多執行緒程式設計中一般不建議使用 System V 訊號量,因為執行緒相對於程序是輕量級的,從作業系統的排程開銷角度看,如果使用 System V 訊號量會使得每次呼叫都要進入核心態,喪失了執行緒的輕量優勢。當我們討論“System v訊號量”時,所指的是計數訊號量集。
    

參考:
https://blog.csdn.net/tfygg/article/details/46619115
https://baike.baidu.com/item/unix
https://blog.csdn.net/qq_29344757/article/details/78657874
《UNIX 環境高階程式設計 第三版》

宣告:
本部落格的所有內容,僅是自己的一些學習筆記,如有錯誤,歡迎指正。如有侵權,請告知修改。