Unix歷史

 

1.1 歷史背景

1.1  歷史背景

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

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

 

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.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(;)-----如在代碼中看到,轉換成<, >,&,這是網頁轉換的結果

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章