Unix歷史

 

1.1 歷史背景

1.1  歷史背景git

自從20世紀40年代計算機誕生以來,它就以異乎尋常的速度發展着,但早期的硬件發展速度要遠遠高於軟件的發展速度。這時操做系統雖已出現,但應用得還比較少,運行在計算機裏的程序大可能是爲了實現某種特定的功能而編制的。程序員須要對計算機內部各類設備的原理具備很深的瞭解纔可以寫出所須要的程序。雖然如Fortran等高級語言已經出現,但程序員不少仍使用機器語言或彙編語言編制程序,這時只有極少數人才可以掌握程序的開發。程序員

直到第三代集成電路計算機(1964-1971)時代的到來,操做系統才被愈來愈普遍地用於計算機內部。操做系統事實上就是對計算機各類資源(設備)的一種抽象。這些資源(設備)包括CPU(Central Processor Unit)、主存(Main Memory)、輔存(Secondary Memory)、鍵盤(Keyboard)和顯示器(Monitor)等,並在此基礎上提供一系列服務(好比文件系統)。程序員能夠經過調用操做系統所提供的編程接口得到服務、對各類資源方便地進行訪問,從而開發出實現特定功能的應用軟件,提供給最終用戶(end user)。所以這一時期涌現出更多的程序員、分析員和計算機系統專家,軟件行業也獲得了極大的發展。而對於最終用戶而言,他們對應用軟件的興趣遠遠高於操做系統自己,在他們看來,操做系統幾乎是透明的。這時的操做系統已由早期的單用戶做業操做系統發展成多用戶多任務的分時操做系統。也就是說,多個用戶能夠經過多個終端同時訪問計算機資源。儘管一臺計算機物理上只有一套處理器、內存和輔存等資源,可是經過分時機制,每一個用戶都會擁有一套虛擬的資源,就好像每一個用戶都擁有一臺單獨的計算機。shell

 

1.2  UNIX誕生的通過編程

在這樣的背景下,誕生了經典的UNIX操做系統。事實上,這個過程多少有點戲劇性。網絡

1965年時,貝爾實驗室(Bell Labs)加入一項由通用電氣(General Electric)和麻省理工學院(MIT)合做的項目;該項目要創建一套多使用者、多任務、多層次(multi-user、multi-task、multi-level)的MULTICS操做系統。直到1969年,因MULTICS項目的工做進度太慢,該項目就被停了下來。當時,Ken Thompson已經有一個稱爲"星際旅行"的程序在GE-635的機器上運行,可是反應很是的慢,正巧被他發現了一臺被閒置的PDP-7(Digital的主機),Ken Thompson和Dennis Ritchie就將"星際旅行"的程序移植到PDP-7上。而這部PDP-7就此在整個計算機歷史上留下了芳名。ide

MULTICS 實際上是"MULTi-plexed Information and Computing System"的縮寫,在1970年時,那臺PDP-7卻只能支持兩個使用者,當時,Brian Kernighan 就開玩笑地戲稱他們的系統實際上是:"UNi-plexed Information and Computing System",縮寫爲"UNICS",後來,你們取其諧音,就稱其爲"UNIX"了。1970年可稱爲是UNIX元年。函數

1971年,他們申請了一臺PDP-11/20,申請的名義是:要發展文書處理系統。該提案被採納,他們也就發展出了一套文書處理系統--就是如今UNIX操做系統裏面文書處理系統(nroff/troff)的前身。有趣的是,沒有多久,貝爾實驗室的專利部門真的採用了這套系統做爲他們處理文件的工具,而貝爾實驗室的專利部門也就瓜熟蒂落地成爲UNIX的第一個正式使用者。當時,那部PDP-11/20只有0.5MB磁盤空間。而描述這整個系統的文件被標示爲:"First Edition",版本日期是1970年11月。今後之後,UNIX的版本就以系統文件的版原本稱呼。工具

1973年,Ken Thompson(肯·湯姆森)和Dennis Ritchie(丹尼斯·裏奇)發明了C語言以後,着手將UNIX程序用高階的C語言改寫,這個時候已是第4版了(C的前身叫B,也是他們兩我的發明的,爲了改寫UNIX,他們將B語言作了一番改進,而成了C語言)。這個劃時代的動做讓UNIX可以很輕易地被移植到各類不一樣的機器上。this

1974年,他們在計算機協會交流雜誌(Communications of the ACM①)正式發表了UNIX,吸引了更多學術界的注意與參與。今後,UNIX逐漸成爲網絡工做站的標準,讓使用不一樣機器的使用者,都能使用相似的UNIX操做系統,這對於網絡世界的標準化有着很大的貢獻。spa

在UNIX的誕生初期,貝爾實驗是仍是一個大的集合體,包括貝爾電話公司以及西部電氣(Western Electric Co.)。礙於反托拉斯法的規定,它不能利用UNIX作任何的商業行爲,也所以,內部的管理階層天然沒有興趣對UNIX有任何的支持,UNIX就全靠一羣玩家在琢磨,主要人物固然仍是Ken Thompson和Dennis Richie。

 

1.3  UNIX版本6

1975年第6版(6th Edition)UNIX發表,這也正是本書所要講解的UNIX版本。在UNIX發展史上,它具備里程碑式的意義。由於這是一個真正具備現代意義的操做系統,它已經幾乎具有了現代(單機)操做系統的全部概念:進程、進程間通訊、多用戶、虛擬內存、系統的內核模式和用戶模式、文件系統、中斷(自陷)管理、I/O設備管理、系統接口調用(API)、用戶訪問界面(shell)。固然因爲這時國際互聯網(Internet)尚未產生,因此該版本並不具有網絡功能。

該版shell已經具有了不少經常使用的命令:ls, mkdir, rm, mknod, cd等。

同時,這也是貝爾實驗室對外發布的最後一版免費UNIX。在這一版本上,衍生了衆多廠商開發的UNIX你們族。從其下一個版本System V開始,貝爾實驗室使對其再也不開放,而要付費才能獲取了。

1977年,加州大學伯克利分校(UC Berkeley)開始公開Pascal編譯器,連帶地發佈了對UNIX 6th Edition的改進程序代碼,這就是所謂的"1 BSD"(1st Berkeley Software Distribution),也開創了UNIX的另外一個分支:BSD系列,向外發行。這個時候的BSD已經很不一樣於AT&T了( 4.3BSD中來自AT&T UNIX的代碼已經不足10%),而且早已經領先與AT&T的UNIX(最先實現TCP/IP協議的就是BSD)。而AT&T的UNIX系統實驗室,也在不斷改進它們的商用UNIX版本,它們吸取了BSD UNIX中已有的各類先進特性,並結合其自己的特色,推出了System V版本。這樣就使得UNIX分裂爲了兩個大的派系,即基於AT&T的SystemV和基於伯克利代碼的BSD。

 

1.2  UNIX誕生的通過

在這樣的背景下,誕生了經典的UNIX操做系統。事實上,這個過程多少有點戲劇性。

1965年時,貝爾實驗室(Bell Labs)加入一項由通用電氣(General Electric)和麻省理工學院(MIT)合做的項目;該項目要創建一套多使用者、多任務、多層次(multi-user、multi-task、multi-level)的MULTICS操做系統。直到1969年,因MULTICS項目的工做進度太慢,該項目就被停了下來。當時,Ken Thompson已經有一個稱爲"星際旅行"的程序在GE-635的機器上運行,可是反應很是的慢,正巧被他發現了一臺被閒置的PDP-7(Digital的主機),Ken Thompson和Dennis Ritchie就將"星際旅行"的程序移植到PDP-7上。而這部PDP-7就此在整個計算機歷史上留下了芳名。

MULTICS 實際上是"MULTi-plexed Information and Computing System"的縮寫,在1970年時,那臺PDP-7卻只能支持兩個使用者,當時,Brian Kernighan 就開玩笑地戲稱他們的系統實際上是:"UNi-plexed Information and Computing System",縮寫爲"UNICS",後來,你們取其諧音,就稱其爲"UNIX"了。1970年可稱爲是UNIX元年。

1971年,他們申請了一臺PDP-11/20,申請的名義是:要發展文書處理系統。該提案被採納,他們也就發展出了一套文書處理系統--就是如今UNIX操做系統裏面文書處理系統(nroff/troff)的前身。有趣的是,沒有多久,貝爾實驗室的專利部門真的採用了這套系統做爲他們處理文件的工具,而貝爾實驗室的專利部門也就瓜熟蒂落地成爲UNIX的第一個正式使用者。當時,那部PDP-11/20只有0.5MB磁盤空間。而描述這整個系統的文件被標示爲:"First Edition",版本日期是1970年11月。今後之後,UNIX的版本就以系統文件的版原本稱呼。

1973年,Ken Thompson(肯·湯姆森)和Dennis Ritchie(丹尼斯·裏奇)發明了C語言以後,着手將UNIX程序用高階的C語言改寫,這個時候已是第4版了(C的前身叫B,也是他們兩我的發明的,爲了改寫UNIX,他們將B語言作了一番改進,而成了C語言)。這個劃時代的動做讓UNIX可以很輕易地被移植到各類不一樣的機器上。

1974年,他們在計算機協會交流雜誌(Communications of the ACM①)正式發表了UNIX,吸引了更多學術界的注意與參與。今後,UNIX逐漸成爲網絡工做站的標準,讓使用不一樣機器的使用者,都能使用相似的UNIX操做系統,這對於網絡世界的標準化有着很大的貢獻。

在UNIX的誕生初期,貝爾實驗是仍是一個大的集合體,包括貝爾電話公司以及西部電氣(Western Electric Co.)。礙於反托拉斯法的規定,它不能利用UNIX作任何的商業行爲,也所以,內部的管理階層天然沒有興趣對UNIX有任何的支持,UNIX就全靠一羣玩家在琢磨,主要人物固然仍是Ken Thompson和Dennis Richie。

 

1.4  各流派一覽

UNIX的各個流派如圖1-1所示。

 

 

 

1.5  爲何取得成功

1.5.1  簡潔高效

在UNIX以前,已經存在不少的多用戶多任務分時操做系統,如IBM的OS/360等。可是它們都很是複雜,難以開發維護,同時對硬件的要求也比較高。相對於之前的操做系統而言,UNIX顯得極爲簡潔,就本書所講述的版本而言,才10000行代碼(包括註釋),就已經實現了進程管理調度、進程間通訊、虛擬內存管理、中斷(自陷)管理、文件系統、I/O設備管理、系統接口調用(API)和用戶訪問界面(shell)功能。並且代碼的效率都很是高,好比:

(1)大量移位、與或、自增/減等操做符的使用,充分精簡指令,提升了CPU利用率;

(2)利用指針傳遞參數以及利用指針對內存直接訪問,提升了內存訪問效率;

(3)文件緩衝區的使用,大大提升了磁盤文件訪問的速度;

(4)較短的進程上下文。對沒有磁盤換入/換出的進程上下文切換,只用了30~40條機器指令就完成。

1.5.2  健壯性

UNIX具備強大的出錯檢測機制,程序具備很強的容錯性。不會由於某一步操做的出錯而引發系統整個崩潰。相反,系統會給用戶返回相應的錯誤碼,便於用戶調試。這樣,即便是系統中某個設備出錯不能正常工做,並不影響其餘設備的工做。好比磁盤某個扇區的毀壞不會影響其餘扇區的使用。此外,嚴格的用戶權限管理爲系統的健壯性提供了一個很好的機制。

1.5.3  功能豐富

適應多用戶多任務的需求,能夠有多個用戶同時使用系統。當多個用戶同時操做同一資源時,UNIX會對資源作出合理的分配。而且一個用戶能夠同時作多件事情,好比:鍵盤輸入和打印。另外UNIX支持大量的I/O設備,例如磁盤、磁帶、打印機、紙帶打孔機、電傳打字機(Teletype)和顯示器(CRT)等。

1.5.4  移植性

由於UNIX V6 90%的代碼都是使用C語言編寫,從而大大提升了系統的移植性。只要修改少量和機器相關的部分程序代碼(包括彙編程序部分和其餘硬件驅動及相關部分),整個UNIX能夠在很短期內完成移植的動做。由於絕大部分代碼都是使用C語言編寫的,移植的主要工做已經交給編譯器完成。這就爲它的推廣提供了一個極大的便利條件。

1.5.5  開放性

UNIX得以如此成功的另外一個重要緣由是它的開放性。儘管同時代也有不少其餘優秀的操做系統,但它們都不是免費開放的。這樣各個研究機構和普通用戶就很難得到,並加以研究改進。而UNIX在包括第6版以前幾乎都是免費的,這就爲它的迅速普及提供了一個先決條件。俗話說:"衆人拾柴火焰高"。在各公司機構研究開發人員的集體智慧下,UNIX才得以變得愈來愈出色。

 

1.6  縮寫及術語說明

BSD------Berkeley Software Distribution PSW------Processor Status Word CPU------中央處理器(Central Processing Unit) GOT------全局偏移表(Global Offset Table) PLT-------過程連接表(Procedure Linkage Table) PIC-------位置無關代碼(Position Independent Code) 1字節---8位 1字------2字節 1KB--------1024字節 1MB--------1024KB 1GB--------1024MB 1TB---------1024GB 0oXYZ---8進制數XYZ XYZ, XYZ. ------10進制數XYZ 0xXYZ--16進制數XYZ 主存------主要存儲器,俗稱"內存" 輔存------輔助存儲器,包括硬盤、磁帶等 換入------把進程的程序/數據從輔存讀入到主存中的過程 換出------把進程的程序/數據從主存寫入到輔存中的過程 交換------進程換入和換出過程的總稱 換入進程位於內存中的進程,也叫加載進程 換出進程位於磁盤上的進程,也叫未加載進程 掛起------進程被剝奪CPU執行權,又稱爲程序阻塞 喚醒------進程從新得到CPU執行權,又稱爲程序解除阻塞 proc結構---------UNIX爲每一個進程分配的結構,它包含進程優先級、ID、狀態、程序段地址等信息,其餘不少地方又稱爲"進程控制塊"(PCB--Process Control Block) u變量--------全局變量,user結構類型,每一個進程一個,它包含了進程所用的各種資源:已打開文件、當前目錄、用戶虛存映射和所接收到的信號量等,它和proc結構一塊兒構成"進程上下文" 系統調用操做系統提供的編程接口,又稱系統函數或系統接口 註釋-----------C++風格的"// "註釋或中文註釋都是做者所加 &lt(;),&gt(;), &amp(;)-----如在代碼中看到,轉換成<, >,&,這是網頁轉換的結果

相關文章
相關標籤/搜索