版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【作者簡(jiǎn)介】:安德魯.坦尼鮑姆分別在麻省理工學(xué)院和加州大學(xué)伯克利分校獲得學(xué)士和博士學(xué)位。他現(xiàn)任位于荷蘭阿姆斯特丹市的Vrije大學(xué)計(jì)算機(jī)科學(xué)教授并領(lǐng)導(dǎo)著一個(gè)計(jì)算機(jī)系統(tǒng)研究小組。同時(shí)他還任一個(gè)研究并行、分布及圖像系統(tǒng)的校際研究生院 計(jì)算機(jī)與圖像高級(jí)學(xué)院的院長(zhǎng)。坦尼鮑姆先前的研究領(lǐng)域包括編譯器、操作系統(tǒng)、網(wǎng)絡(luò)和局域分布式系統(tǒng),他現(xiàn)在的研究主要集中在可擴(kuò)展到數(shù)百萬(wàn)用戶的廣域分布式系統(tǒng)。對(duì)這些課題的研究使他在學(xué)報(bào)和會(huì)議上發(fā)表了70余篇論文,并出版了五部專著。坦尼鮑姆教授同時(shí)還主持開發(fā)了大量的軟件。他是Amsterdam編譯工具箱的總設(shè)計(jì)師,該工具箱被廣泛地用來(lái)開發(fā)可移植的編譯器,同時(shí)還用于MINIX的
2、開發(fā)。他和他的博士研究生及程序員們一起設(shè)計(jì)了一個(gè)基于微內(nèi)核的高性能分布式操作系統(tǒng) Amoeba?,F(xiàn)在,以教學(xué)和研究為目的的用戶可以從Internet上免費(fèi)獲得MINIX 和Amoeba軟件。坦尼鮑姆的許多博士研究生在獲得學(xué)位后都取得了非常豐碩的成果,這令坦尼鮑姆非常自豪,因?yàn)檫@是他誨人不倦的結(jié)果。坦尼鮑姆教授同時(shí)還是ACM的會(huì)士、IEEE高級(jí)會(huì)員、荷蘭皇家藝術(shù)和科學(xué)院院士,他曾獲得1994年ACM Karl V. Karlstrom 杰出教育獎(jiǎng)和1997年ACM/SIGCSE 計(jì)算機(jī)科學(xué)教育杰出貢獻(xiàn)獎(jiǎng)。他被列入Internet上的 Whos Who in the World 名單,他在WWW上
3、的主頁(yè)地址為:http:/www.cs.vu.nl/ast/。阿爾伯特.伍德豪爾分別在麻省理工學(xué)院和華盛頓大學(xué)獲得學(xué)士和博士學(xué)位。他進(jìn)麻省理工學(xué)院本來(lái)是想成為一名電氣工程師,可是后來(lái)卻成了生物學(xué)家。從1973年起他開始在位于麻省Amherst的Hampshire自然科學(xué)學(xué)院工作。當(dāng)微型計(jì)算機(jī)慢慢多起來(lái)的時(shí)候,作為使用電子檢測(cè)儀器的生物學(xué)家,他開始使用微型計(jì)算機(jī)。他給學(xué)生開設(shè)的檢測(cè)儀器方面的課程逐漸演變?yōu)橛?jì)算機(jī)接口和實(shí)時(shí)程序設(shè)計(jì)。伍德豪爾博士對(duì)教學(xué)和科學(xué)技術(shù)的發(fā)展有濃厚的興趣,在進(jìn)入研究生院之前他曾在尼日利亞教過(guò)兩年中學(xué),近年來(lái)他曾幾次利用自己的假期在尼加拉瓜教授計(jì)算機(jī)科學(xué)。他對(duì)計(jì)算機(jī)作為電子系
4、統(tǒng),以及計(jì)算機(jī)與其他電子系統(tǒng)的相互配合很感興趣。他最喜歡講授的課程有計(jì)算機(jī)體系結(jié)構(gòu)、匯編語(yǔ)言程序設(shè)計(jì)、操作系統(tǒng)和計(jì)算機(jī)通信。他還為開發(fā)電子器件及相關(guān)軟件擔(dān)當(dāng)顧問(wèn)。在學(xué)術(shù)之外,伍德豪爾有不少興趣,包括各種戶外運(yùn)動(dòng),業(yè)余無(wú)線電制作和讀書。他還喜歡旅游和學(xué)習(xí)別國(guó)語(yǔ)言。他的WWW主頁(yè)就存在一臺(tái)運(yùn)行MINIX的機(jī)器上,地址是:/asw/。前言多數(shù)操作系統(tǒng)教材都重理論而輕實(shí)踐,本書希望在這二者之間求取較好的平衡。本書詳細(xì)論述了操作系統(tǒng)的所有基本概念,包括進(jìn)程、進(jìn)程間通信、信號(hào)量、管程、消息傳遞、調(diào)度算法、輸入/輸出、死鎖、設(shè)備驅(qū)動(dòng)程序、存儲(chǔ)器管理、頁(yè)面調(diào)
5、度算法、文件系統(tǒng)設(shè)計(jì)、安全與保護(hù)機(jī)制等。同時(shí),本書也詳細(xì)討論了MINIX 一個(gè)與UNIX兼容的操作系統(tǒng),并提供了完整的源代碼供學(xué)習(xí)之用。這樣的安排使讀者不僅學(xué)習(xí)到理論,而且能夠理解它們?nèi)绾螒?yīng)用在一個(gè)實(shí)際的操作系統(tǒng)之中。本書第一版在1987年出版時(shí),曾引發(fā)了操作系統(tǒng)課程教學(xué)的一場(chǎng)小小的變革。在此之前多數(shù)課程都只講理論。隨著MINIX的出現(xiàn),許多學(xué)校開始增加實(shí)驗(yàn)環(huán)節(jié)以使學(xué)生了解實(shí)際的操作系統(tǒng)是如何運(yùn)作的。我們認(rèn)為這種趨勢(shì)是可取的,并希望通過(guò)本書第二版能進(jìn)一步加強(qiáng)這種趨勢(shì)。MINIX在其出現(xiàn)以來(lái)的十年間發(fā)生了許多變化,最初的代碼是為基于8088芯片、256K內(nèi)存和兩個(gè)軟驅(qū)的IBM PC機(jī)型編寫的,它
6、基于UNIX 版本7。隨著時(shí)間的推移,MINIX在許多方面有所發(fā)展,比如當(dāng)前版本可運(yùn)行在眾多機(jī)型上,從16位實(shí)模式的PC機(jī)到配有大容量硬盤的奔騰機(jī)(32位保護(hù)模式),而且它不再基于UNIX版本7,而是基于國(guó)際上的POSIX標(biāo)準(zhǔn)(POSIX 1003.1和ISO99451)。與此同時(shí),有許多新特征被添加到MINIX中,在我們看來(lái),所增加的特征可能已經(jīng)太多了,但有些人則認(rèn)為還不夠,這最終導(dǎo)致了LINUX的誕生。MINIX還被移植到許多其他平臺(tái)上,包括Macintosh、Amiga、Atari和SPARC。本書只涉及MINIX2.0,到目前為止,該版本只能運(yùn)行于基于80X86的機(jī)器,或者可模擬此類C
7、PU的機(jī)器,以及SPARC機(jī)器。與第一版相比,第二版有許多變化,原理性部分基本都被修改過(guò),同時(shí)增加了大量新內(nèi)容。最主要的變化是新的基于POSIX的MINIX,以及對(duì)其源代碼的剖析。另外,每本書都附帶一張CD-ROM,它包含了全部MINIX源代碼,以及在PC上安裝MINIX的說(shuō)明(見CD-ROM主目錄下的README.TXT文件)。在一臺(tái)80X86 的PC機(jī)上安裝MINIX很方便。它需要一個(gè)至少30MB的硬盤分區(qū),然后按照CDROM上README.TXT文件中的步驟進(jìn)行即可。在打印README.TXT文件之前,先啟動(dòng)MS-DOS(若運(yùn)行WINDOWS,則雙擊MS-DOS圖標(biāo)),然后鍵入copy
8、readme.txt prn即可。該文件也可以用edit、wordpad、notepad等任何可以處理ASCII正文的編輯器進(jìn)行瀏覽。對(duì)于沒(méi)有PC機(jī)的學(xué)校和個(gè)人,有兩種解決辦法,即CDROM上提供的兩個(gè)模擬程序。一個(gè)由Paul Ashton 為SPARC機(jī)器編寫,它作為用戶程序在Solaris上運(yùn)行,此時(shí)MINIX被編譯成SPARC上的可執(zhí)行文件。在這種模式下,MINIX不再是一個(gè)操作系統(tǒng),而只是一個(gè)用戶程序,所以必須對(duì)其底層作一些修改。另一個(gè)模擬程序由Bochs軟件公司的Kevin.P.Lawton編寫,它解釋Intel 80386的指令集以及足以使MINIX運(yùn)行所需的I/O指令。顯然在解釋
9、器層次上運(yùn)行使性能有所下降,但這使得學(xué)生更容易進(jìn)行調(diào)試。該模擬程序運(yùn)行在所有支持M.I.T的X-Window的系統(tǒng)上,更詳細(xì)的信息請(qǐng)參看CDROM上的有關(guān)文件。MINIX仍在繼續(xù)發(fā)展,本書和CDROM中的內(nèi)容僅僅反映了本書出版時(shí)的情況,有關(guān)MINIX的最新動(dòng)態(tài)請(qǐng)?jiān)L問(wèn)MINIX的主頁(yè):http:/www.cs.vu.nl/ast/minix.html。MINIX也有USENET中的新聞組:comp.os.minix,讀者可以訂閱該新聞組。對(duì)于僅有Email的讀者可通過(guò)以下步驟來(lái)加入MINIX的郵件用戶通信組。給 發(fā)一封信,其中只需一行字:su
10、bscribe minix-1 ,此后你便會(huì)通過(guò)E-mail獲得很多的信息。講授本課程的教師可以從Prentice Hall公司獲得一份習(xí)題解答手冊(cè)。從WWW地址 http:/www.cs.vu.nl/ast/沿著Software and supplementary material鏈接可以獲得一些有用的PostScript文件,其中包含本書中所有的圖表,可供需要時(shí)使用。在MINIX的開發(fā)項(xiàng)目中我們有幸得到了許多人的幫助。首先要感謝Kees Bot在MINIX標(biāo)準(zhǔn)化和軟件發(fā)布中所作的大量工作,沒(méi)有他的幫助,我們不可能完成這件工作。他自己編寫了大量的代碼(如POSIX終端I/O)并修正了一些數(shù)年
11、來(lái)一直存在的錯(cuò)誤,他還整理了其他的代碼。這些年來(lái)Bruce Evans、 Phlip Homburg、Will Rose和Michael Temari為MINIX的開發(fā)做了大量的工作。 有幾百人通過(guò)新聞組對(duì)MINIX作出了貢獻(xiàn),他們?nèi)藬?shù)眾多,所作出的貢獻(xiàn)也各不相同,在此謹(jǐn)向他們一并表示感謝。John Casey、 Dale Grit、 Frans Kashoek等人閱讀了本書的部分手稿并提出了寶貴建議,在此向他們表示謝意。Vrije大學(xué)的許多學(xué)生測(cè)試了CDROM中MINIX的 版本,他們是:Ahmed Batou, Goran Dokic, Peter Gijzel, Thomer Gil,
12、Dennis Grimbergen, Roderick Groesbeek, Wouter haring, Guido Kollerie, Mark Lassche, Raymond Ris, Frans ter Borg, Alex van Ballegooy, Ries van der Velden, Alexander Wels以及Thomas Zeeman。我們對(duì)他們細(xì)致的工作和詳盡的報(bào)告致以衷心的感謝。阿爾伯特S伍德豪爾向他從前的幾位學(xué)生表示感謝,特別是Hampshire學(xué)院的Peter W. Young ,Nacional Autonoma de Nicaragua大學(xué)的Maria
13、 Isabel Sanchez 和William Puddy Vargas。最后要向我們的家庭成員表示感謝。Suzanne 已是第十次在我埋頭寫作時(shí)給我支持,對(duì)Barbara是第九次,Marvin是第八次,甚至小Bram也是第四次了。他們的支持和愛心對(duì)我非常重要。(坦尼鮑姆)至于阿爾伯特的Barbara,這倒是第一次,假如沒(méi)有她的支持,耐心和幽默,我們是不可能完成這一工作的,對(duì)我的兒子Gordon而言,由于在編寫本書時(shí),他大部分時(shí)間都不在家中,而是在大學(xué)學(xué)習(xí),因此是非常幸運(yùn)的。但是他的理解和關(guān)心深深吸引著我從事本書的編寫工作,有這樣一個(gè)兒子是令人非常愉快的。(伍德豪爾)安德魯.S.坦尼鮑姆阿爾
14、伯特.S.伍德豪爾譯序坦尼鮑姆教授是國(guó)際知名的計(jì)算機(jī)科學(xué)家和教育家。他在操作系統(tǒng)、分布式系統(tǒng)以及計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域都有很深的造詣。自八十年代以來(lái),他已先后出版了一系列面向大學(xué)生和研究生的教材性質(zhì)的專著,并被世界各國(guó)的許多大學(xué)廣泛采用。這本書就是他的最新專著之一。操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最核心和最底層的軟件,對(duì)操作系統(tǒng)的深入學(xué)習(xí)關(guān)系到對(duì)整個(gè)系統(tǒng)運(yùn)作機(jī)制的全面理解,因此一本好教材也顯得愈發(fā)重要。本書的英文版出版于1997年,其中涵蓋了操作系統(tǒng)課程的所有內(nèi)容,即傳統(tǒng)上的進(jìn)程管理、存儲(chǔ)器管理、文件管理和設(shè)備管理。同時(shí)其中又包含了許多新內(nèi)容,如線程、基于消息傳遞的系統(tǒng)構(gòu)造模型、日志結(jié)構(gòu)文件系統(tǒng)、安全和保護(hù)機(jī)制
15、、RAM盤及CDROM設(shè)備等,而用作例子的CPU則為Interl Pentium。這使得讀者一方面能夠?qū)W習(xí)操作系統(tǒng)的經(jīng)典內(nèi)容,另一方面又能夠了解和跟蹤當(dāng)前的最新技術(shù)和研究成果。本書的另一個(gè)特點(diǎn)是基本原理與具體實(shí)例,即MINIX緊密結(jié)合。第2到第5章的前半部分講述原理,后半部分則詳細(xì)地解釋這些原理在MINIX的設(shè)計(jì)和實(shí)現(xiàn)中的應(yīng)用。通過(guò)閱讀這些部分能夠把握MINIX源代碼的組織方式,并理解那些很關(guān)鍵或者很難懂的代碼。這部分內(nèi)容非常翔實(shí),有時(shí)甚至逐行地解釋附錄中所列的源程序。對(duì)操作系統(tǒng)課程多年的授課經(jīng)驗(yàn)以及相關(guān)的科研工作使我們認(rèn)識(shí)到:詳細(xì)地剖析一個(gè)象MINIX這樣的操作系統(tǒng)對(duì)于掌握操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
16、的精髓是大有裨益的。正因?yàn)樯鲜鲈?,我們真切地感受到將這本書翻譯、介紹給國(guó)內(nèi)讀者將是一件非常有意義的事,衷心希望我們付出的勞動(dòng)能對(duì)國(guó)內(nèi)的操作系統(tǒng)教學(xué)和實(shí)踐有所幫助和促進(jìn)。本書的第一章,第二章,第三章由王鵬翻譯,劉福巖和陸寧也參加了部分工作;第四章由朱鵬翻譯;第五章由敖青云翻譯。全書由尤晉元教授審校并統(tǒng)稿。在整個(gè)翻譯過(guò)程中,上海交通大學(xué)計(jì)算機(jī)系系統(tǒng)軟件研究室的師生給予了許多幫助。并且在計(jì)算機(jī)系95級(jí)本科生的操作系統(tǒng)課程中進(jìn)行了試用,許多學(xué)生提出了很好的建議,在此向他們表示衷心的感謝。特別要感謝本書的責(zé)任編輯鄧又強(qiáng)先生,本書的順利出版與他的辛勤勞動(dòng)和熱情支持是分不開的。雖然在翻譯過(guò)程中我們盡力恪守
17、信,達(dá),雅的準(zhǔn)則,但不當(dāng)和疏漏之處在所難免,敬請(qǐng)讀者提出寶貴建議。譯 者1998年4月于上海交通大學(xué)第一章 引言計(jì)算機(jī)如果離開了軟件將成為一堆廢銅爛鐵。有了軟件,計(jì)算機(jī)可以對(duì)信息進(jìn)行存儲(chǔ)、處理和檢索,可以顯示多媒體文檔、搜索Internet并完成其他工作。計(jì)算機(jī)軟件大致分為兩類:系統(tǒng)軟件和應(yīng)用軟件。系統(tǒng)軟件管理計(jì)算機(jī)本身及應(yīng)用程序;應(yīng)用軟件執(zhí)行用戶最終所需要的功能。最基本的系統(tǒng)軟件是操作系統(tǒng)(operating system),它控制計(jì)算機(jī)的所有資源并提供開發(fā)應(yīng)用程序的基礎(chǔ)。現(xiàn)代計(jì)算機(jī)系統(tǒng)包含一個(gè)或多個(gè)處理器、若干內(nèi)存(常稱為RAM隨機(jī)存取存儲(chǔ)器)、磁盤、打印機(jī)、網(wǎng)絡(luò)接口及其他輸入/輸出設(shè)備。
18、編寫一個(gè)程序來(lái)管理所有這些器件以正確地使用它們,即使不考慮優(yōu)化也是一件很困難的事情。如果每個(gè)程序員都必須處理磁盤如何工作,再加上每讀一個(gè)磁盤塊都有幾十種因素可能導(dǎo)致操作出錯(cuò),那么很多程序簡(jiǎn)直沒(méi)法寫。許多年以前人們就認(rèn)識(shí)到必須找到某種方法將硬件的復(fù)雜性同程序員分離開來(lái)。經(jīng)過(guò)不斷探索和改進(jìn),目前采用的方法是在裸機(jī)上加載一層軟件來(lái)管理整個(gè)系統(tǒng),同時(shí)給用戶提供一個(gè)更容易理解和進(jìn)行程序設(shè)計(jì)的接口,這被稱為虛擬機(jī)(virtual machine)。這樣一層軟件就是操作系統(tǒng)。這種處理方式如圖11所示。底層是硬件,它本身可能包括兩層或多層。最低一層是物理器件,包括集成電路芯片、連線、電源、監(jiān)視器等,它們的構(gòu)造
19、和工作方式屬于電氣工程師的范圍。圖 1-1 計(jì)算機(jī)系統(tǒng)由硬件、系統(tǒng)程序和應(yīng)用程序組成。接著是微程序(microprogram),通常存放在只讀存儲(chǔ)器中,它是一層很原始的軟件,用來(lái)控制設(shè)備并向上一層提供一個(gè)更清晰的接口。微程序?qū)嶋H上是一個(gè)解釋器,它先取得機(jī)器語(yǔ)言指令,如ADD, MOVE和JUMP等,然后通過(guò)一個(gè)動(dòng)作序列來(lái)執(zhí)行這些指令。例如為了執(zhí)行一條ADD指令,微程序必須先確定運(yùn)算數(shù)據(jù)的位置,然后取數(shù),相加,最后存放得數(shù)。由微程序解釋執(zhí)行的這一套指令稱為機(jī)器語(yǔ)言。機(jī)器語(yǔ)言并不是硬件的組成部分,但硬件制造商通常在手冊(cè)中給出機(jī)器語(yǔ)言的完整描述,所以許多人將它認(rèn)作真正的計(jì)算機(jī)。采用精簡(jiǎn)指令集計(jì)算機(jī)(
20、RISC)技術(shù)的計(jì)算機(jī)沒(méi)有微程序?qū)?,其機(jī)器指令通過(guò)硬件邏輯直接執(zhí)行。例如Motorola 680X0有微程序,而IBM PowerPC 則沒(méi)有。機(jī)器語(yǔ)言典型地有50到100條指令,大多數(shù)用來(lái)完成數(shù)據(jù)傳送、算術(shù)運(yùn)算和數(shù)值比較等操作。在這個(gè)層次上,通過(guò)向特殊的設(shè)備寄存器寫特定的數(shù)值來(lái)控制輸入/輸出設(shè)備。例如將磁盤地址、內(nèi)存地址、讀字節(jié)數(shù)和操作類型(讀/寫)等值寫入特定的寄存器便可完成硬盤讀操作。實(shí)際操作往往需要更多的參數(shù),而操作完成后的返回狀態(tài)也非常復(fù)雜。進(jìn)一步而言,對(duì)于許多I/O設(shè)備,時(shí)序在程序設(shè)計(jì)中的作用非常重要。操作系統(tǒng)的主要功能之一就是將所有這些復(fù)雜性隱藏起來(lái),同時(shí)為程序員提供一套更加方便
21、的指令,比如,從文件中讀一個(gè)數(shù)據(jù)塊在概念上比低層的移動(dòng)磁頭臂,等待旋轉(zhuǎn)延遲之類的細(xì)節(jié)來(lái)得簡(jiǎn)單、方便。在操作系統(tǒng)之上是其他系統(tǒng)軟件,包括命令解釋器(shell)、窗口系統(tǒng)、編譯器、編輯器及類似的獨(dú)立于應(yīng)用的程序。要注意它們本身并不是操作系統(tǒng)的組成部分,盡管它們通常由計(jì)算機(jī)廠商提供。這一點(diǎn)很重要,操作系統(tǒng)專指在核心態(tài)(kernel mode),或稱管態(tài)(supervisor mode)下運(yùn)行的軟件,它受硬件保護(hù)而免遭用戶的篡改。編譯器和編輯器運(yùn)行在用戶態(tài)(user mode)。如果用戶不喜歡某一個(gè)編譯器,他可以自己重寫一個(gè),但他卻不可以寫一個(gè)磁盤中斷處理程序 因?yàn)檫@是操作系統(tǒng)的一部分,而且硬件阻止
22、用戶對(duì)它進(jìn)行修改。系統(tǒng)軟件之上是應(yīng)用軟件,這些軟件可以是購(gòu)買的或者是用戶自行開發(fā)的,它們用來(lái)解決特定的問(wèn)題,如字處理、表格處理、工程計(jì)算或者電子游戲等。1.1 什么是操作系統(tǒng)多數(shù)計(jì)算機(jī)用戶都使用過(guò)操作系統(tǒng),但要精確地給出操作系統(tǒng)的定義卻很困難,部分原因是操作系統(tǒng)完成兩項(xiàng)相對(duì)獨(dú)立的任務(wù),下面我們逐項(xiàng)進(jìn)行討論。1.1.1 操作系統(tǒng)作為虛擬機(jī)對(duì)多數(shù)計(jì)算機(jī)而言,在機(jī)器語(yǔ)言一級(jí)的體系結(jié)構(gòu)(指令集、存儲(chǔ)組織、I/O和總線結(jié)構(gòu))上編程是很困難的,尤其是輸入輸出操作。例如考慮使用多數(shù)PC機(jī)采用的NEC PD765控制器芯片(或功能等價(jià)的芯片)來(lái)進(jìn)行軟盤I/O操作。PD765有16條命令,它通過(guò)向一個(gè)設(shè)備寄存器
23、裝入特定的數(shù)據(jù)來(lái)執(zhí)行這些命令,命令數(shù)據(jù)長(zhǎng)度從1到9字節(jié)不等,其中包括:讀寫數(shù)據(jù)、移動(dòng)磁頭臂、格式化磁道、初始化、檢測(cè)磁盤狀態(tài)、復(fù)位、校準(zhǔn)控制器及設(shè)備等。最基本的命令是讀數(shù)據(jù)和寫數(shù)據(jù)。它們均需要13個(gè)參數(shù),所有這13個(gè)參數(shù)被封裝在9個(gè)字節(jié)中。這些參數(shù)指定的信息有:欲讀取的磁盤塊地址、每條磁道的扇區(qū)數(shù)、物理介質(zhì)的數(shù)據(jù)記錄格式、扇區(qū)間隙、以及對(duì)已刪除數(shù)據(jù)地址標(biāo)識(shí)的處理方法等。當(dāng)磁盤操作結(jié)束時(shí),控制器芯片返回23個(gè)狀態(tài)及出錯(cuò)信息,它們被封裝在7個(gè)字節(jié)中。此外,程序員還要注意步進(jìn)電機(jī)的開關(guān)狀態(tài)。如果電機(jī)關(guān)閉,則在讀寫數(shù)據(jù)前要先啟動(dòng)它(有一段較長(zhǎng)的加速時(shí)間)。還要注意電機(jī)不能長(zhǎng)時(shí)間處于開啟狀態(tài),否則將損壞
24、軟盤,所以程序員必須在較長(zhǎng)的啟動(dòng)延遲和可能對(duì)軟盤造成損壞之間作出折衷。顯然,程序員不想涉及硬件的這些具體細(xì)節(jié)(也包括硬盤,它與軟盤不同,但同樣很復(fù)雜)。他需要的是一種簡(jiǎn)單的高度抽象的設(shè)備。一種典型的抽象是一張磁盤包含了一組命名的文件,每個(gè)文件可以被打開,然后進(jìn)行讀寫,最后被關(guān)閉。其中的一些細(xì)節(jié)如數(shù)據(jù)記錄格式、當(dāng)前步進(jìn)電機(jī)的開啟狀態(tài)等則對(duì)用戶隱藏。這種將硬件細(xì)節(jié)與程序員隔離開來(lái)、同時(shí)提供一個(gè)簡(jiǎn)潔的命名文件方式的程序,就是操作系統(tǒng)。與磁盤抽象類似,它還隱藏了其他許多低層硬件的特性,包括中斷、時(shí)鐘、存儲(chǔ)器等??傊僮飨到y(tǒng)提供的每一種抽象都較低層硬件本身更簡(jiǎn)單、更易用。從這個(gè)角度看,操作系統(tǒng)的作用是
25、為用戶提供一臺(tái)等價(jià)的擴(kuò)展計(jì)算機(jī),或稱虛擬機(jī),它比低層硬件更容易編程。本書的內(nèi)容正是詳細(xì)說(shuō)明操作系統(tǒng)如何做到這一點(diǎn)。1.1.2 操作系統(tǒng)作為資源管理器上述虛擬機(jī)模型是一種自頂向下的觀點(diǎn)。按照自底向上的觀點(diǎn),操作系統(tǒng)則用來(lái)管理一個(gè)復(fù)雜系統(tǒng)的各個(gè)部分。現(xiàn)代計(jì)算機(jī)都包含處理器、存儲(chǔ)器、時(shí)鐘、磁盤、鼠標(biāo)、網(wǎng)絡(luò)接口、激光打印機(jī)以及其他許多設(shè)備,從這個(gè)角度看,操作系統(tǒng)的任務(wù)是在相互競(jìng)爭(zhēng)的程序間有序地控制這些設(shè)備的分配。設(shè)想在一臺(tái)計(jì)算機(jī)上運(yùn)行的三個(gè)程序同時(shí)試圖在一臺(tái)打印機(jī)上輸出計(jì)算結(jié)果,那么可能頭幾行是程序1的輸出,接下來(lái)幾行是程序2的輸出,然后又是程序3的輸出等等,最終打印結(jié)果將是一團(tuán)糟。操作系統(tǒng)采用將打印
26、輸出緩沖到磁盤上的方法可以避免這種混亂。當(dāng)一個(gè)程序結(jié)束后,操作系統(tǒng)將暫存在磁盤文件上的輸出結(jié)果送到打印機(jī),同時(shí)其他程序可以繼續(xù)運(yùn)行產(chǎn)生新的輸出結(jié)果,而這些程序并不知道這些輸出沒(méi)有立即送至打印機(jī)。當(dāng)一臺(tái)計(jì)算機(jī)(或網(wǎng)絡(luò))有多個(gè)用戶時(shí),因?yàn)橛脩糸g可能相互影響,所以管理和保護(hù)存儲(chǔ)器、I/O設(shè)備以及其他設(shè)備的需求隨之增加。而且用戶往往不僅需要共享硬件,還要共享信息(文件、數(shù)據(jù)庫(kù)等)??傊?,此時(shí)操作系統(tǒng)的首要任務(wù)是跟蹤資源的使用狀況、滿足資源請(qǐng)求、提高資源利用率、以及協(xié)調(diào)各程序和用戶對(duì)資源的使用沖突。1.2 操作系統(tǒng)發(fā)展歷史操作系統(tǒng)經(jīng)歷了一個(gè)漫長(zhǎng)的發(fā)展過(guò)程,下面對(duì)此進(jìn)行簡(jiǎn)要的回顧。由于在歷史上操作系統(tǒng)與計(jì)
27、算機(jī)體系結(jié)構(gòu)存在非常密切的聯(lián)系,我們將按照計(jì)算機(jī)的換代歷程講述操作系統(tǒng)的發(fā)展?fàn)顩r。第一臺(tái)真正的數(shù)字計(jì)算機(jī)是英國(guó)數(shù)學(xué)家Charles Babbage(17921871)設(shè)計(jì)的。Babbage投入畢生精力去建造他的分析機(jī),但卻沒(méi)能讓它成功地運(yùn)行起來(lái)。因?yàn)樗羌儥C(jī)械式的,而當(dāng)時(shí)的技術(shù)不可能使分析機(jī)的零部件達(dá)到他所需要的精度。很顯然,分析機(jī)沒(méi)有操作系統(tǒng)。有趣的是,Babbage認(rèn)識(shí)到他的分析機(jī)需要軟件,于是他雇傭了一個(gè)年輕的女子,英國(guó)著名詩(shī)人拜倫的女兒Ada Lovelace為他工作。Ada由此成了世界上第一位程序員,Ada程序設(shè)計(jì)語(yǔ)言就是用她的名字命名。1.2.1 第一代計(jì)算機(jī)(19451955):
28、真空管和插板從Babbage之后一直到二戰(zhàn),數(shù)字計(jì)算機(jī)幾乎沒(méi)有什么進(jìn)展。在40年代中期,哈佛大學(xué)的Howard Aiken、普林斯頓高等研究院的John.Von Neumann(馮.諾依曼)、賓夕法尼亞大學(xué)的J.Presper Eckert和William Mauchley、德國(guó)電話公司的Konrad Zuse、以及其他一些人都成功地使用真空管建造了計(jì)算機(jī)。這些機(jī)器非常龐大,往往使用數(shù)萬(wàn)個(gè)真空管,占據(jù)幾個(gè)房間,然而其運(yùn)算速度卻不如現(xiàn)在最便宜的個(gè)人計(jì)算機(jī)。在計(jì)算機(jī)出現(xiàn)的早期,每臺(tái)機(jī)器都有一個(gè)小組專門來(lái)設(shè)計(jì)、制造、編程、操作和維護(hù)。編程全部采用機(jī)器語(yǔ)言,通過(guò)在一些插板上的硬連線來(lái)控制其基本功能,這
29、時(shí)沒(méi)有程序設(shè)計(jì)語(yǔ)言(甚至沒(méi)有匯編語(yǔ)言),操作系統(tǒng)更是聞所未聞。機(jī)器的使用方式是程序員提前在墻上的機(jī)時(shí)表上預(yù)約一段時(shí)間,然后到機(jī)房將他的插板插到計(jì)算機(jī)里,在接下來(lái)的幾小時(shí)里計(jì)算自己的題目。這時(shí)的計(jì)算機(jī)很不可靠,因?yàn)閹兹f(wàn)個(gè)真空管中任何一個(gè)發(fā)生故障,計(jì)算機(jī)就無(wú)法運(yùn)行。這個(gè)階段基本上所有的題目都是數(shù)值計(jì)算問(wèn)題,例如計(jì)算正弦和余弦函數(shù)表。到50年代早期,出現(xiàn)了穿孔卡片,這時(shí)就可以不用插板,而是將程序?qū)懺诳ㄆ先缓笞x入計(jì)算機(jī),但其他過(guò)程則依然如故。1.2.2 第二代計(jì)算機(jī)(19551965):晶體管和批處理系統(tǒng)50年代發(fā)明的晶體管極大地改變了計(jì)算機(jī)的狀況。這時(shí)的計(jì)算機(jī)已經(jīng)很可靠,廠商可以成批地生產(chǎn)計(jì)算機(jī)并
30、賣給客戶,客戶可以長(zhǎng)時(shí)間地使用它來(lái)完成一些有用的工作。至此,第一次將設(shè)計(jì)人員、生產(chǎn)人員、操作員、程序員和維護(hù)人員分開。這個(gè)時(shí)期計(jì)算機(jī)安裝在空調(diào)房間里,有專人操作。由于其價(jià)格昂貴,僅有少數(shù)大公司、主要的政府部門和大學(xué)才買得起。運(yùn)行一個(gè)作業(yè)(一個(gè)或一組程序)時(shí),程序員首先將程序?qū)懺诩埳希ㄓ肍ORTRAN或匯編語(yǔ)言),然后用穿孔機(jī)制成卡片,最后將這些卡片交給操作員。計(jì)算機(jī)運(yùn)行完當(dāng)前任務(wù)后,其計(jì)算結(jié)果從打印機(jī)上輸出,操作員從打印機(jī)上取得運(yùn)算結(jié)果并送到輸出室,程序員就可從該處取到運(yùn)算結(jié)果,然后,操作員再?gòu)目ㄆ献x入另一個(gè)任務(wù)。如果需要FROTRAN編譯器,操作員還要從別處取來(lái)讀入計(jì)算機(jī)。當(dāng)操作員在機(jī)房里
31、走來(lái)走去時(shí),許多機(jī)時(shí)被浪費(fèi)掉了。由于當(dāng)時(shí)計(jì)算機(jī)非常昂貴,很自然地人們開始想辦法減少機(jī)時(shí)的浪費(fèi),答案就是批處理系統(tǒng)。其思想是:在作業(yè)輸入室收集到較多的作業(yè),然后用一臺(tái)相對(duì)廉價(jià)的計(jì)算機(jī)(如IBM 1401計(jì)算機(jī),它適用于讀卡片、拷貝磁帶和打印輸出,但不適用于作數(shù)值運(yùn)算。)將它們讀到磁帶上,另外用較昂貴的計(jì)算機(jī)如IBM 7094來(lái)完成真正的計(jì)算。該模型如圖12所示。圖 1-2 一種早期的批處理系統(tǒng)。 (a)程序員將卡片拿到1401機(jī)處 (b)1401將批處理作業(yè)讀到磁帶上 (c)操作員將輸入帶送至7094處 (d )7094進(jìn)行計(jì)算 (e)操作員將輸出帶送至1401處 (f)1401打印輸出在收集到
32、一批作業(yè)之后,輸入磁帶被送到機(jī)房里裝到磁帶機(jī)上。操作員隨后裝入一個(gè)特殊的程序(現(xiàn)代操作系統(tǒng)的前身),它從磁帶上將第一個(gè)作業(yè)讀入并運(yùn)行,其輸出寫到第一盤輸出磁帶上,而不是打印出來(lái)。每個(gè)作業(yè)結(jié)束后,操作系統(tǒng)自動(dòng)地讀入下一個(gè)作業(yè)運(yùn)行。當(dāng)這一批作業(yè)完全結(jié)束后,操作員取下輸入和輸出磁帶,將輸入磁帶換成下一批作業(yè),然后把輸出磁帶拿到一臺(tái)1401機(jī)器上進(jìn)行脫機(jī)打印。一個(gè)典型的輸入作業(yè)結(jié)構(gòu)如圖13所示。它由一張JOB卡片開始,該卡標(biāo)識(shí)出所需的最大運(yùn)行時(shí)間(分鐘)、計(jì)費(fèi)標(biāo)識(shí)、以及程序員的名字。隨后是一張F(tuán)ORTRAN卡片,它通知操作系統(tǒng)從系統(tǒng)磁帶上裝入FROTRAN語(yǔ)言編譯器。在此之后是待編譯的源程序,然后是L
33、OAD卡片,它通知操作系統(tǒng)裝入剛編譯好的目標(biāo)程序(編譯好的目標(biāo)程序通常寫到暫存磁帶上,需要顯式裝入)。接著是RUN卡片,它告訴操作系統(tǒng)運(yùn)行該程序并使用其后的數(shù)據(jù)。最后,END卡片標(biāo)識(shí)作業(yè)結(jié)束。這些原始的控制卡片是現(xiàn)代作業(yè)控制語(yǔ)言和命令解釋器的先驅(qū)。圖 1-3 一個(gè)典型的FMS作業(yè)的結(jié)構(gòu)。第二代計(jì)算機(jī)主要用于科學(xué)計(jì)算,例如解偏微分方程。這些題目大多用FORTRAN語(yǔ)言和匯編語(yǔ)言編程。典型的操作系統(tǒng)是FMS(FORTRAN Monitor SystemFORTRAN監(jiān)控系統(tǒng))和IBSYS(IBM為7094機(jī)配備的操作系統(tǒng))。1.2.3 第三代計(jì)算機(jī)(19651980):集成電路芯片和多道程序在60
34、年代初期,多數(shù)計(jì)算機(jī)廠商都有兩條完全不同并且互不兼容的生產(chǎn)線:一條是面向字的復(fù)雜科學(xué)計(jì)算和工程計(jì)算的計(jì)算機(jī),如IBM 7094;另一條是面向字符的商用計(jì)算機(jī),如IBM 1401,主要被銀行和保險(xiǎn)公司用于磁帶歸檔和打印服務(wù)。對(duì)廠商來(lái)說(shuō),開發(fā)和維護(hù)兩種完全不同的產(chǎn)品是很昂貴的。同時(shí),許多新的計(jì)算機(jī)用戶開始時(shí)只需要一臺(tái)小計(jì)算機(jī),到后來(lái)則可能需要一臺(tái)較大的計(jì)算機(jī),而且要求能夠更快地執(zhí)行原有的程序。IBM公司試圖通過(guò)引入360系統(tǒng)來(lái)解決這兩個(gè)問(wèn)題。IBM 360是一個(gè)軟件兼容的計(jì)算機(jī)系列,在該系列中,低檔機(jī)與1401相當(dāng),高檔機(jī)則比7094功能強(qiáng)很多。這些計(jì)算機(jī)只在價(jià)格和性能(最大存儲(chǔ)器容量、處理器速度
35、、允許的I/O設(shè)備數(shù)量等)上有差異。由于所有的計(jì)算機(jī)都有相同的體系結(jié)構(gòu)和指令集,因此為一種型號(hào)機(jī)器編寫的程序可以在其他所有型號(hào)的機(jī)器上運(yùn)行(起碼在理論上可行),而且360被設(shè)計(jì)成既可用于科學(xué)計(jì)算,又可用于商業(yè)計(jì)算,這樣一個(gè)系列的計(jì)算機(jī)便可以滿足所有用戶的要求。在隨后的幾年里,IBM陸續(xù)推出了360的后續(xù)機(jī)型,如用戶熟知的370、4300、3080和3090系列。360是第一種采用集成電路(小規(guī)模)芯片的主流機(jī)型。與采用分立晶體管制造的第二代計(jì)算機(jī)相比,其性能價(jià)格比有很大提高。360很快就獲得了成功,由此其他主要廠商也很快采納了系列兼容機(jī)的思想。這些計(jì)算機(jī)至今仍在各地的計(jì)算中心使用,但其應(yīng)用正在
36、急劇地萎縮。單一家族思想的最大優(yōu)點(diǎn)同時(shí)也是其最大的缺點(diǎn)。原因是所有軟件,包括操作系統(tǒng),都要能夠在所有機(jī)器上運(yùn)行 從小的代替1401的機(jī)器到用于科學(xué)計(jì)算的相當(dāng)于7094的大型機(jī);從只能帶很少外部設(shè)備的機(jī)器到能帶很多外設(shè)的機(jī)器;從商業(yè)領(lǐng)域到科學(xué)計(jì)算領(lǐng)域等,總之,要有效地適用于所有的用途。IBM無(wú)法寫出同時(shí)滿足這些需求相互沖突的軟件,其結(jié)果是一個(gè)龐大的極其復(fù)雜的操作系統(tǒng),它的規(guī)模比FMS高大約二到三個(gè)數(shù)量級(jí)。其中包含有數(shù)千名程序員寫的數(shù)百萬(wàn)行匯編語(yǔ)言代碼。同時(shí),其中也有成千上萬(wàn)處錯(cuò)誤。這就導(dǎo)致IBM不斷地發(fā)行新版本來(lái)更正這些錯(cuò)誤,而新版本在改正老錯(cuò)誤的同時(shí)又引入新錯(cuò)誤,所以錯(cuò)誤數(shù)可能保持大致相同,而
37、不是減少。OS/360的設(shè)計(jì)者之一Fred Brooks后來(lái)寫過(guò)一本書(Brooks,1975)來(lái)描述他在開發(fā)OS/360過(guò)程中的經(jīng)驗(yàn)。這里不可能復(fù)述該書的全部?jī)?nèi)容,不過(guò)其封面是一群史前動(dòng)物陷入一個(gè)泥坑不能自拔,Silberschatz和Galvin的著作的封面也表達(dá)了同樣的觀點(diǎn)。拋開OS/360的龐大和存在的問(wèn)題,它和其他公司的類似的第三代操作系統(tǒng)的確很好地滿足了大多數(shù)用戶的要求。同時(shí)它們也使第二代操作系統(tǒng)缺乏的幾項(xiàng)關(guān)鍵技術(shù)得到廣泛應(yīng)用。其中最重要的是多道程序(multiprogramming)。在7094機(jī)上,若當(dāng)前作業(yè)因等待磁帶或其他I/O而暫停時(shí),CPU就只能簡(jiǎn)單地踏步直至該I/O結(jié)束
38、。對(duì)于CPU操作密集的科學(xué)計(jì)算問(wèn)題,I/O操作較少,因此浪費(fèi)的時(shí)間很少;然而對(duì)于商業(yè)數(shù)據(jù)處理,I/O操作等待時(shí)間通常占到8090,這時(shí)必須采取某種措施減少CPU時(shí)間的浪費(fèi)。經(jīng)過(guò)探索找到的解決辦法是將內(nèi)存分為幾個(gè)部分,每一部分存放不同的作業(yè),如圖14所示。當(dāng)一個(gè)作業(yè)等待I/O操作完成時(shí),另一個(gè)作業(yè)可以使用CPU。如果內(nèi)存中可以存放足夠多的作業(yè),則CPU利用率可以接近100。在主存中同時(shí)駐留多個(gè)作業(yè)需要特殊的硬件來(lái)對(duì)其進(jìn)行保護(hù),以避免作業(yè)的信息被竊取或受到攻擊,幸運(yùn)的是360及其他第三代計(jì)算機(jī)都配有此類硬件。圖 1-4 內(nèi)存中有三個(gè)作業(yè)的一個(gè)多道程序系統(tǒng)。第三代計(jì)算機(jī)的另一個(gè)新特性是:卡片被拿到機(jī)
39、房后能夠很快地將一個(gè)作業(yè)從卡片讀入磁盤。于是無(wú)論任何時(shí)刻當(dāng)一個(gè)作業(yè)運(yùn)行結(jié)束,操作系統(tǒng)就能將一個(gè)新作業(yè)從磁盤讀出,裝入空出來(lái)的內(nèi)存區(qū)域運(yùn)行,這種技術(shù)叫做spooling(Simultaneous Peripheral Operation On Line 聯(lián)機(jī)的即時(shí)外部設(shè)備操作),同時(shí)該技術(shù)也用于輸出。當(dāng)采用了spooling技術(shù)后,就不再需要IBM 1401機(jī),也不必再將磁帶搬來(lái)搬去。盡管第三代操作系統(tǒng)很適于大型科學(xué)計(jì)算和繁忙的商務(wù)數(shù)據(jù)處理,但其實(shí)質(zhì)上仍舊是批處理系統(tǒng)。許多程序員很懷念第一代計(jì)算機(jī)的使用方式,那時(shí)他們可以獨(dú)占一臺(tái)機(jī)器幾個(gè)小時(shí),可以即時(shí)地調(diào)試他們的程序。而對(duì)第二代計(jì)算機(jī),一個(gè)作業(yè)從
40、提交到取回運(yùn)算結(jié)果往往長(zhǎng)達(dá)數(shù)小時(shí)。更有甚者,一個(gè)誤用的逗號(hào)就會(huì)導(dǎo)致編譯失敗,從而可能浪費(fèi)程序員半天時(shí)間。程序員們希望很快得到響應(yīng),這種需求就導(dǎo)致了分時(shí)系統(tǒng)的出現(xiàn)。它實(shí)際上是多道程序的一個(gè)變種,不同之處只是每個(gè)用戶都有一個(gè)聯(lián)機(jī)終端。在分時(shí)系統(tǒng)中,假設(shè)有20個(gè)用戶登錄,而其中17個(gè)在思考或喝咖啡,則CPU可輪流分配給那三個(gè)需要得到服務(wù)的作業(yè)。由于調(diào)試程序的用戶常常只發(fā)出簡(jiǎn)短的命令(如編譯一個(gè)源文件),而很少執(zhí)行費(fèi)時(shí)的長(zhǎng)命令(如將一個(gè)上百萬(wàn)條記錄的文件排序),所以計(jì)算機(jī)能夠?yàn)橐恍┯脩籼峁┛焖俚慕换ナ椒?wù),同時(shí)在CPU空閑時(shí)還能運(yùn)行后臺(tái)的大作業(yè)。第一個(gè)分時(shí)系統(tǒng)CTSS是由M.I.T在一臺(tái)改裝過(guò)的709
41、4機(jī)上開發(fā)成功的(Corbato等,1962),但直到第三代計(jì)算機(jī)廣泛采用了必需的保護(hù)硬件之后分時(shí)系統(tǒng)才逐漸流行開來(lái)。在CTSS研制成功之后,M.I.T、貝爾實(shí)驗(yàn)室和通用電氣公司(GE,當(dāng)時(shí)一個(gè)主要的計(jì)算機(jī)制造廠商)決定開發(fā)一種公用計(jì)算服務(wù)系統(tǒng) 一種能夠同時(shí)支持?jǐn)?shù)百名分時(shí)用戶的機(jī)器。它借鑒于供電系統(tǒng) 當(dāng)你需要電能時(shí),只需將電氣設(shè)備接到墻上的插座即可。該系統(tǒng)稱作MULTICS(MULTiplexed Information and Computing Service),其設(shè)計(jì)者著眼于建造一臺(tái)機(jī)器來(lái)滿足整個(gè)波士頓所有用戶的計(jì)算需求。在當(dāng)時(shí)看來(lái),僅30年之后只花幾千美元就能買一臺(tái)計(jì)算能力遠(yuǎn)遠(yuǎn)超過(guò)他們
42、的GE645的個(gè)人計(jì)算機(jī)的想法完全是科學(xué)幻想。MULTICS引入了計(jì)算機(jī)領(lǐng)域許多概念的雛形,但其研制難度卻超出了所有人的預(yù)料。在開發(fā)過(guò)程中貝爾實(shí)驗(yàn)室退出了該項(xiàng)目,通用電氣公司也退出了計(jì)算機(jī)領(lǐng)域。最終MULTICS被成功地應(yīng)用在M.I.T的實(shí)際生產(chǎn)環(huán)境以及其他幾十個(gè)系統(tǒng)中。但公用計(jì)算服務(wù)系統(tǒng)的概念卻隨著計(jì)算機(jī)價(jià)格的暴跌而被人們遺棄,不過(guò)MULTICS對(duì)隨后的系統(tǒng)卻有著巨大的影響,詳細(xì)請(qǐng)參閱(Corbato etc., 1972;Corbato and Vyssotsky, 1965;Daley and Dennis, 1968;Organick, 1972;Saltzer, 1974)。第三代計(jì)
43、算機(jī)的另一個(gè)主要進(jìn)展是小型機(jī)的崛起,這以1961年DEC的PDP1作為起點(diǎn)。PDP1計(jì)算機(jī)只有4K個(gè)18 比特的內(nèi)存,每臺(tái)售價(jià)120,000美元(不到IBM 7094的5),該機(jī)型非常熱銷,對(duì)于某些非數(shù)值的計(jì)算,它幾乎和7094一樣快。PDP1開辟了一個(gè)全新的產(chǎn)業(yè)。很快PDP有了一系列機(jī)型(與IBM系列機(jī)不同,它們互不兼容),其頂峰為PDP11。貝爾實(shí)驗(yàn)室一位曾參加過(guò)MULTICS研制的計(jì)算機(jī)科學(xué)家Ken Thompson,在一臺(tái)無(wú)人使用的PDP7機(jī)器上開發(fā)了一個(gè)簡(jiǎn)化的單用戶版MULTICS,他的工作導(dǎo)致了后來(lái)UNIX操作系統(tǒng)的誕生。UNIX在學(xué)術(shù)界變得很流行,同時(shí)也包括政府部門和許多公司。有
44、專門的著作講述UNIX的歷史(例如Salus, 1994)。簡(jiǎn)單地說(shuō),由于UNIX的源代碼公開,所以許多組織都開發(fā)了他們各自的UNIX版本,這些版本互不兼容,所以非常混亂。為了使同一個(gè)程序在所有不同的UNIX系統(tǒng)上都能運(yùn)行,IEEE擬定了一個(gè)UNIX的標(biāo)準(zhǔn),稱作POSIX,該標(biāo)準(zhǔn)現(xiàn)在被大多數(shù)UNIX支持。POSIX定義了相互兼容的UNIX系統(tǒng)必須支持的一個(gè)最小的系統(tǒng)調(diào)用接口,實(shí)際上,一些其他操作系統(tǒng)現(xiàn)在也支持POSIX接口。1.2.4 第四代計(jì)算機(jī)(1980現(xiàn)在):個(gè)人計(jì)算機(jī)隨著大規(guī)模集成電路的發(fā)展,芯片在每平方厘米的硅片上可以集成數(shù)千個(gè)晶體管,于是個(gè)人計(jì)算機(jī)時(shí)代到來(lái)了。從體系結(jié)構(gòu)上看,個(gè)人計(jì)
45、算機(jī)與PDP11并無(wú)二致,但就價(jià)格而言卻相去甚遠(yuǎn)。通常公司的一個(gè)部門或大學(xué)里的一個(gè)院系配備一臺(tái)小型機(jī),而個(gè)人計(jì)算機(jī)卻使每個(gè)人都能擁有自己的計(jì)算機(jī)。在商業(yè)、大學(xué)或政府部門使用的功能最強(qiáng)的個(gè)人計(jì)算機(jī)通常稱為工作站,它實(shí)際上只是大一點(diǎn)的個(gè)人計(jì)算機(jī),通常工作站之間通過(guò)網(wǎng)絡(luò)互連起來(lái)。隨著計(jì)算能力越來(lái)越容易獲得,尤其是具有高品質(zhì)圖形功能的交互式計(jì)算的普及,為個(gè)人計(jì)算機(jī)編制軟件成為一項(xiàng)重要的產(chǎn)業(yè)。此類軟件多數(shù)對(duì)用戶很友好,也就是說(shuō)用戶無(wú)需掌握太多的計(jì)算機(jī)知識(shí),而且基本不用怎么學(xué)習(xí)便能夠使用這些軟件,這與先前的OS/360完全不同,OS/360的作業(yè)控制語(yǔ)言JCL非常復(fù)雜,為了介紹這種語(yǔ)言,已經(jīng)專門編寫了幾本
46、書。在個(gè)人計(jì)算機(jī)和工作站領(lǐng)域有兩種主流操作系統(tǒng):微軟的MSDOS和UNIX。MSDOS廣泛用于IBM PC及其他采用Intel 80X86芯片的計(jì)算機(jī)。盡管MSDOS的最初版本相當(dāng)簡(jiǎn)陋,但其后續(xù)的版本包含了許多新特性,其中有許多源自于UNIX。MSDOS的后續(xù)產(chǎn)品Windows起初運(yùn)行于MSDOS之上(與其稱之為操作系統(tǒng),不如說(shuō)它更象一個(gè)shell),但從1995年開始發(fā)布的Windows95是一個(gè)真正可引導(dǎo)的操作系統(tǒng),因此它不再需要MSDOS的支持。微軟的另一個(gè)操作系統(tǒng)是Windows NT,它在某些層次上與Windows95兼容,但其核心則完全重寫。另一種主要的操作系統(tǒng)是UNIX,它在工作
47、站和高檔計(jì)算機(jī)領(lǐng)域(如網(wǎng)絡(luò)服務(wù)器)占據(jù)了統(tǒng)治地位,尤其對(duì)于采用高性能RISC芯片的計(jì)算機(jī)。盡管這些計(jì)算機(jī)通常供一個(gè)用戶專用,但它們往往具有小型機(jī)的計(jì)算能力,所以為它們配備最初為小型機(jī)設(shè)計(jì)的操作系統(tǒng) UNIX是很順理成章的。從80年代中期開始出現(xiàn)一種有趣的發(fā)展趨勢(shì),就是運(yùn)行網(wǎng)絡(luò)操作系統(tǒng)(network operating systems)和分布式操作系統(tǒng)(distributed operating systems)(Tenenbaum, 1995)的個(gè)人計(jì)算機(jī)網(wǎng)絡(luò)的崛起。在網(wǎng)絡(luò)操作系統(tǒng)中,用戶知道多臺(tái)計(jì)算機(jī)的存在。他能夠登錄到一臺(tái)遠(yuǎn)地機(jī)器上并將文件從一臺(tái)機(jī)器拷貝到另一臺(tái)機(jī)器,每臺(tái)計(jì)算機(jī)都運(yùn)行自己
48、本地的操作系統(tǒng),有自己的本地用戶(或多個(gè)用戶)。網(wǎng)絡(luò)操作系統(tǒng)與單處理機(jī)的操作系統(tǒng)沒(méi)有本質(zhì)區(qū)別。它們需要一個(gè)網(wǎng)絡(luò)接口控制器以及一些低層軟件來(lái)驅(qū)動(dòng)它 ,同時(shí)還需要一些程序來(lái)進(jìn)行遠(yuǎn)程登錄和遠(yuǎn)地文件訪問(wèn),但這些附加物并未改變操作系統(tǒng)的本質(zhì)結(jié)構(gòu)。與之相反,一個(gè)分布式操作系統(tǒng)在用戶看來(lái)就象一個(gè)普通的單處理機(jī)系統(tǒng)。盡管它實(shí)際上由多個(gè)處理機(jī)組成,但用戶不會(huì)感知到他們的程序在哪個(gè)處理機(jī)上運(yùn)行,或者他們的文件存放在哪里,所有這些均由操作系統(tǒng)自行高效地完成。真正的分布式操作系統(tǒng)不僅僅是在單機(jī)操作系統(tǒng)上增添一小段代碼,其原因是分布式系統(tǒng)與集中式系統(tǒng)有本質(zhì)的區(qū)別。例如,分布式系統(tǒng)通常允許一個(gè)應(yīng)用在多臺(tái)處理器上同時(shí)運(yùn)行,
49、因此需要更復(fù)雜的處理器調(diào)度算法來(lái)獲得最大的并行度。網(wǎng)絡(luò)中的通信延遲往往導(dǎo)致分布式算法必須能適應(yīng)信息不完備、信息過(guò)時(shí)甚至信息不正確的環(huán)境。這與單機(jī)系統(tǒng)完全不同,對(duì)于后者,操作系統(tǒng)掌握整個(gè)系統(tǒng)的完備信息。1.2.5 MINIX的歷史在UNIX的早期(版本6),源代碼可以免費(fèi)獲得并被人們加以廣泛的研究。澳大利亞新南威爾士大學(xué)的John Lions甚至專門寫了一本小冊(cè)子逐行地解釋UNIX源代碼(Lions, 1976)。許多大學(xué)的操作系統(tǒng)課程就采用這本小冊(cè)子作為教材。在AT&T發(fā)布版本7時(shí),它開始認(rèn)識(shí)到UNIX的商業(yè)價(jià)值,于是發(fā)布的版本7許可證禁止在課程中研究其源代碼以免其商業(yè)利益受到損害。許多學(xué)校為
50、了遵守該規(guī)定,就在課程中略去UNIX的內(nèi)容而只講操作系統(tǒng)理論。不幸的是,只講理論使學(xué)生對(duì)實(shí)際的操作系統(tǒng)產(chǎn)生一種片面的認(rèn)識(shí)。書本上作為重點(diǎn)講述的內(nèi)容,如進(jìn)程調(diào)度算法,實(shí)際中并沒(méi)有那么重要;而實(shí)際系統(tǒng)中很重要的內(nèi)容,如I/O系統(tǒng)和文件系統(tǒng)又因?yàn)槿狈碚撔远缓雎?。為了扭轉(zhuǎn)這種局面,本書的作者之一坦尼鮑姆決定編寫一個(gè)在用戶看來(lái)與UNIX完全兼容,然而內(nèi)核全新的操作系統(tǒng) MINIX。MINIX沒(méi)有借用AT&T一行代碼,所以不受其許可證的限制,它可以被班級(jí)和個(gè)人用來(lái)學(xué)習(xí)。通過(guò)它讀者可以剖析一個(gè)操作系統(tǒng),研究其內(nèi)部如何運(yùn)作。其名稱源于小UNIX,因?yàn)樗浅:?jiǎn)潔,一般程度的讀者就能夠讀懂它。除合法性以外,M
51、INIX與UNIX相比還有另一個(gè)優(yōu)點(diǎn):它比UNIX晚出現(xiàn)十年,并且其代碼采用了一種更加模塊化的組織方法。例如,MINIX的文件系統(tǒng)不是操作系統(tǒng)的一部分而是作為一個(gè)用戶程序運(yùn)行。另一個(gè)不同之處在于UNIX著重效率而MINIX著重可讀性(數(shù)百頁(yè)的程序通常認(rèn)為是可讀的),其代碼中有數(shù)千行注釋。MINIX最初設(shè)計(jì)成與UNIX版本7兼容。UNIX版本7由于其簡(jiǎn)潔和優(yōu)美而被奉為典范,有人甚至認(rèn)為它不僅超過(guò)了其前邊的所有版本,而且超過(guò)了其后邊的所有版本。隨著POSIX的出現(xiàn),MINIX在保持既有的向后兼容性的同時(shí)開始向POSIX靠攏。這種漸進(jìn)的演變?cè)谟?jì)算機(jī)界相當(dāng)普遍,沒(méi)有一家廠商希望在引進(jìn)新系統(tǒng)的同時(shí)使客戶
52、所有原先的程序作廢。本書中介紹的MINIX基于POSIX標(biāo)準(zhǔn)(本書前一版本的MINIX基于UNIX版本7)。和UNIX一樣,MINIX用C語(yǔ)言編寫,從而很容易被移植到其他機(jī)器上。由于IBM PC機(jī)廣泛得到使用,所以其最初版本在IBM PC上實(shí)現(xiàn),隨后被移植到了Atari、Amiga、 Macintosh和SPARC等平臺(tái)上。MINIX一直恪守small is beautiful的原則,因此最早的版本甚至不需要硬盤就可以運(yùn)行,這使許多學(xué)生都能夠達(dá)到其硬件要求(這種情況在現(xiàn)在看起來(lái)很奇怪,可是在80年代中期MINIX剛出現(xiàn)的時(shí)候,硬盤非常昂貴)。隨著其功能和規(guī)模的增長(zhǎng),MINIX也發(fā)展到需要一個(gè)硬
53、盤才能運(yùn)行,但它只要求一個(gè)30M字節(jié)的分區(qū)即可。與之相比,有些商用UNIX系統(tǒng)建議提供多達(dá)200M字節(jié)的磁盤分區(qū)。對(duì)于多數(shù)IBM PC用戶來(lái)說(shuō),MINIX運(yùn)行起來(lái)很象UNIX。許多基本程序,如cat、 grep、 ls、make及shell程序都與UNIX中的對(duì)應(yīng)程序有相同的功能。與操作系統(tǒng)本身一樣,這些公用程序均由作者和他的學(xué)生以及其他人員從頭重寫。本書自始至終以MINIX作為例子,然而MINIX的大部分內(nèi)容,除了代碼本身外,均適用于UNIX。其中的許多內(nèi)容還適用于一些其他的操作系統(tǒng),在閱讀本書時(shí)應(yīng)記住這一點(diǎn)。有些讀者可能對(duì)MINIX和LINUX之間的關(guān)系感興趣。在MINIX發(fā)布后不久,便出
54、現(xiàn)了一個(gè)面向它的USENET新聞組,在數(shù)周之內(nèi)便有多達(dá)40000個(gè)用戶訂閱該新聞組。其中的大多數(shù)人都想向MINIX中加入一些新特性以使之更大、更有用。每天都有數(shù)百人提供自己的建議、思想甚至代碼。而MINIX的作者在幾年內(nèi)一直堅(jiān)持不采納這些建議,目的是使MINIX保持足夠的短小精悍,以便于學(xué)生理解。人們最終意識(shí)到不可能動(dòng)搖作者的立場(chǎng),于是一個(gè)芬蘭學(xué)生Linus Torvalds決定編寫一個(gè)類似MINIX的系統(tǒng),但是它特征繁多、面向?qū)嵱枚墙虒W(xué),這就是LINUX。1.3 操作系統(tǒng)基本概念操作系統(tǒng)與用戶程序的界面由操作系統(tǒng)提供的擴(kuò)展指令集定義。盡管有多種不同的實(shí)現(xiàn)方法,這些擴(kuò)展指令傳統(tǒng)上稱作系統(tǒng)調(diào)用
55、。為了真正地理解操作系統(tǒng)的運(yùn)作機(jī)制,有必要仔細(xì)研究這個(gè)界面。各個(gè)操作系統(tǒng)提供的系統(tǒng)調(diào)用各不相同(盡管基本概念大致相同)。本書在講法上有兩種選擇:一種是泛泛而籠統(tǒng)地介紹系統(tǒng)調(diào)用(如:操作系統(tǒng)有讀文件的系統(tǒng)調(diào)用);另一種是選擇一個(gè)確定的系統(tǒng),講述該系統(tǒng)的系統(tǒng)調(diào)用(如:MINIX有一條READ系統(tǒng)調(diào)用,它有三個(gè)參數(shù):一個(gè)指定所操作的文件,一個(gè)指定將讀到的數(shù)據(jù)存放在何處,最后一個(gè)指定讀多少字節(jié))。本書采用后者,這樣可以更細(xì)致地觀察操作系統(tǒng)的內(nèi)部操作。在1.4節(jié)中將詳細(xì)地介紹UNIX和MINIX都提供的系統(tǒng)調(diào)用。為簡(jiǎn)潔起見,我們只講述MINIX,多數(shù)情況下UNIX系統(tǒng)中對(duì)應(yīng)的系統(tǒng)調(diào)用基于POSIX標(biāo)準(zhǔn)。
56、下面先簡(jiǎn)要地描述一下MINIX以獲得一些感性認(rèn)識(shí),這些內(nèi)容同樣適用于UNIX系統(tǒng)。MINIX系統(tǒng)調(diào)用大致分為兩類:與進(jìn)程有關(guān)的系統(tǒng)調(diào)用和與文件有關(guān)的系統(tǒng)調(diào)用。1.3.1 進(jìn)程在MINIX及所有操作系統(tǒng)中,一個(gè)重要概念是進(jìn)程(process)。一個(gè)進(jìn)程本質(zhì)上是一個(gè)程序的執(zhí)行。每個(gè)進(jìn)程有其自己的地址空間,從0到一個(gè)最大值,進(jìn)程可以讀寫該空間中的內(nèi)容。地址空間中包括可執(zhí)行程序、程序的數(shù)據(jù)及堆棧。與每個(gè)進(jìn)程相關(guān)的還包括一組寄存器、程序計(jì)數(shù)器、指針和其他硬件寄存器,以及所有其他運(yùn)行該程序所需要的信息。進(jìn)程的概念將在第二章詳細(xì)討論,此處希望讀者對(duì)進(jìn)程建立一種直觀的感覺(jué)。為此我們考慮分時(shí)系統(tǒng)的工作:分時(shí)操作
57、系統(tǒng)周期性地掛起一個(gè)進(jìn)程然后啟動(dòng)運(yùn)行另一個(gè)進(jìn)程,例如在過(guò)去的一秒鐘內(nèi),第一個(gè)進(jìn)程已運(yùn)行完分配給它的時(shí)間片,則要被暫停。在上述進(jìn)程被暫時(shí)掛起的情況下,之后的某個(gè)時(shí)刻它將被再次啟動(dòng),而且要求再次啟動(dòng)時(shí)的狀態(tài)與先前暫停時(shí)完全相同,這就意味著在將其掛起時(shí)該進(jìn)程的所有信息都要被保存下來(lái)。例如進(jìn)程以讀方式打開了若干文件,每一個(gè)文件都有一個(gè)指針來(lái)指示當(dāng)前的讀寫位置。當(dāng)該進(jìn)程被掛起時(shí),這些指針均要被記錄下來(lái)以保證后面的READ系統(tǒng)調(diào)用能夠正確地執(zhí)行。在許多操作系統(tǒng)中,除進(jìn)程地址空間以外的所有信息均存放在操作系統(tǒng)管理的一張表中,稱為進(jìn)程表進(jìn)程表是一個(gè)數(shù)據(jù)結(jié)構(gòu)的數(shù)組,當(dāng)前系統(tǒng)中的每個(gè)進(jìn)程都要占用其中一項(xiàng)。所以一個(gè)
58、(掛起的)進(jìn)程包括兩部分:進(jìn)程的地址空間 稱作核心映像(core image),以及對(duì)應(yīng)的進(jìn)程表項(xiàng)(包含寄存器值及其他信息)。在與進(jìn)程管理有關(guān)的系統(tǒng)調(diào)用中最關(guān)鍵的是完成進(jìn)程創(chuàng)建和進(jìn)程終止的系統(tǒng)調(diào)用??紤]一個(gè)典型的例子。一個(gè)命令解釋器(shell)進(jìn)程從終端上讀命令,此時(shí),用戶剛鍵入一條命令要求編譯一個(gè)程序,為此shell必須首先創(chuàng)建一個(gè)進(jìn)程來(lái)執(zhí)行編譯程序。當(dāng)執(zhí)行編譯的進(jìn)程結(jié)束時(shí),它執(zhí)行一條系統(tǒng)調(diào)用來(lái)終止自己。若一個(gè)進(jìn)程能夠創(chuàng)建一個(gè)或多個(gè)進(jìn)程(稱為子進(jìn)程),而且這些子進(jìn)程又可以創(chuàng)建子進(jìn)程,則很容易得到如圖15所示的進(jìn)程樹。為某項(xiàng)任務(wù)而合作的這些相關(guān)進(jìn)程需要通信以同步其操作,這種通信稱為進(jìn)程間通信(interprocess communication),第二章將
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版暖氣片購(gòu)銷合同正規(guī)范本
- 2025年度金融產(chǎn)品創(chuàng)新設(shè)計(jì)與推廣服務(wù)合同2篇
- 2025年度綠色環(huán)保項(xiàng)目合伙人投資合作協(xié)議2篇
- 2025年度科技創(chuàng)新產(chǎn)品采購(gòu)項(xiàng)目委托代理服務(wù)合同3篇
- 2025年度科技園區(qū)不動(dòng)產(chǎn)使用權(quán)出讓合同3篇
- 2025年訴訟保全擔(dān)保流程執(zhí)行與賠償責(zé)任合同3篇
- 二零二五年度酒店行業(yè)員工派遣合同3篇
- 養(yǎng)殖場(chǎng)2025年度保險(xiǎn)服務(wù)合同3篇
- 二零二五版財(cái)產(chǎn)保全擔(dān)保與訴訟保全合同3篇
- 2025年度龍門吊租賃及項(xiàng)目管理咨詢服務(wù)合同4篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- 2025年度生物醫(yī)藥技術(shù)研發(fā)與許可協(xié)議3篇
- 電廠檢修安全培訓(xùn)課件
- 殯葬改革課件
- 2024企業(yè)答謝晚宴會(huì)務(wù)合同3篇
- 雙方個(gè)人協(xié)議書模板
- 車站安全管理研究報(bào)告
- 初中中考英語(yǔ)總復(fù)習(xí)《代詞動(dòng)詞連詞數(shù)詞》思維導(dǎo)圖
- 植物和五行關(guān)系解說(shuō)
- 滬教牛津版初中英語(yǔ)七年級(jí)下冊(cè)全套單元測(cè)試題
- 因式分解法提公因式法公式法
評(píng)論
0/150
提交評(píng)論