本書是面向操作系統(tǒng)導(dǎo)論課程的經(jīng)典書籍,從第1版至今被國內(nèi)外眾多高校選作教材。全書共六部分,不僅詳細(xì)講解了進(jìn)程管理、內(nèi)存管理、存儲管理、保護(hù)與安全等概念,而且涵蓋重要的理論結(jié)果和案例研究,并且給出了供讀者深入學(xué)習(xí)的推薦讀物。這一版新增了多核系統(tǒng)和移動計(jì)算的內(nèi)容,每一章都融入了新的技術(shù)進(jìn)展,并且更新了習(xí)題和編程項(xiàng)目。本書既適合高等院校計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生學(xué)習(xí),也是專業(yè)技術(shù)人員的有益參考。
前 言O(shè)perating System Concepts, Ninth Edition操作系統(tǒng)是任何計(jì)算機(jī)系統(tǒng)的重要組成部分。同樣,操作系統(tǒng)課程也是計(jì)算機(jī)科學(xué)教育的基本組成部分。隨著計(jì)算機(jī)逐漸滲透到日常生活的每個方面,從汽車的嵌入設(shè)備到政府和跨國公司的先進(jìn)規(guī)劃工具,這個領(lǐng)域發(fā)展迅猛。然而,其中的基本概念仍然比較清晰,這些概念就是本書討論的基礎(chǔ)。
本書是面向操作系統(tǒng)導(dǎo)論課程的教科書,適用于大三、大四學(xué)生和一年級研究生,同時(shí)也可供工程技術(shù)人員參考。本書清晰地描述了操作系統(tǒng)的概念。作為先決條件,我們假設(shè)讀者熟悉基本數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)組成和一種高級語言(如C或Java)。本書第1章包括了學(xué)習(xí)操作系統(tǒng)所需的硬件知識,還包括大多數(shù)操作系統(tǒng)普遍使用的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。代碼示例主要使用C和Java,不過,即使讀者不具有這些語言的全部知識也能理解這些算法。
本書不僅直觀描述了概念,而且包括重要的理論結(jié)果,但是省略了大部分的形式化證明。每章結(jié)尾的推薦讀物給出了相關(guān)研究論文,其中有的首次提出或證明了這些理論結(jié)果,有的提供深入閱讀的最新材料。本書通過圖形和舉例來代替證明,以說明為什么有關(guān)結(jié)果是真實(shí)有效的。
本書描述的基本概念和算法通常用于商用和開源的操作系統(tǒng)。我們的目標(biāo)是,按照通用的(而非特定的)操作系統(tǒng)來描述這些概念和算法。另外,我們提供了最受歡迎和最具創(chuàng)新的操作系統(tǒng)的大量例子,包括Linux、Microsoft Windows、Apple Mac OS X和Solaris。我們還給出了兩個主要移動操作系統(tǒng)(Android和iOS)的示例。
本書的編寫綜合了我們從事操作系統(tǒng)教學(xué)的多年經(jīng)驗(yàn)以及IEEE計(jì)算機(jī)協(xié)會和ACM共同出版的課程指南。另外,還考慮了多位審稿人員提供的反饋意見,以及以前版本讀者和學(xué)生的許多意見和建議。
本書內(nèi)容本書包括六大部分:
概論。第1章和第2章解釋了操作系統(tǒng)是什么,它們能做什么,以及它們是如何設(shè)計(jì)與構(gòu)造的。這一部分討論了操作系統(tǒng)的常見功能是什么,以及操作系統(tǒng)能為用戶提供什么。我們不僅討論P(yáng)C和服務(wù)器的傳統(tǒng)操作系統(tǒng),而且討論移動設(shè)備的操作系統(tǒng)。描述主要以啟發(fā)和解釋為主,避免討論內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。因此,這部分適合低年級學(xué)生或類似讀者,以便了解操作系統(tǒng)是什么而無需關(guān)注內(nèi)部算法細(xì)節(jié)。
進(jìn)程管理。第3~7章描述了進(jìn)程概念和并發(fā),這是現(xiàn)代操作系統(tǒng)的核心。進(jìn)程是系統(tǒng)內(nèi)的工作單元。這種系統(tǒng)包括一組并發(fā)執(zhí)行進(jìn)程,其中一些是操作系統(tǒng)進(jìn)程(執(zhí)行系統(tǒng)代碼的進(jìn)程),其余的是用戶進(jìn)程(執(zhí)行用戶代碼的進(jìn)程)。這一部分包括進(jìn)程調(diào)度、進(jìn)程間通信、進(jìn)程同步及死鎖處理等的方法,還包括線程分析以及多核系統(tǒng)和并行編程的有關(guān)分析。
內(nèi)存管理。第8章和第9章是關(guān)于進(jìn)程執(zhí)行期間的內(nèi)存管理的。為了改進(jìn)CPU的使用率及其對用戶的響應(yīng)速度,計(jì)算機(jī)必須在內(nèi)存中同時(shí)保存多個進(jìn)程。內(nèi)存管理具有很多不同方案,反映了內(nèi)存管理的各種方法;而特定算法的有效性取決于應(yīng)用情形。
存儲管理。第10~13章描述了現(xiàn)代計(jì)算機(jī)系統(tǒng)如何處理文件系統(tǒng)、大容量存儲和I/O。文件系統(tǒng)提供了一種機(jī)制,以對數(shù)據(jù)和程序進(jìn)行在線存儲與訪問。這一部分描述了存儲管理的經(jīng)典內(nèi)部算法和結(jié)構(gòu),并且深入討論了這些算法,比如它們的特性、優(yōu)點(diǎn)和缺點(diǎn)。由于連到計(jì)算機(jī)的I/O設(shè)備種類如此之多,操作系統(tǒng)需要為應(yīng)用程序提供大量的功能,以控制這些設(shè)備的方方面面。這一部分深入討論了I/O系統(tǒng),包括I/O系統(tǒng)設(shè)計(jì)、接口及系統(tǒng)內(nèi)部的結(jié)構(gòu)和功能。在許多方面,I/O設(shè)備也是計(jì)算機(jī)中最慢的主要組件。因?yàn)樵O(shè)備通常是性能瓶頸,所以這一部分也討論了I/O設(shè)備的性能問題。
保護(hù)與安全。第14章和第15章討論了計(jì)算機(jī)系統(tǒng)保護(hù)與安全的必需機(jī)制。操作系統(tǒng)的進(jìn)程活動必須互相保護(hù),為此,我們必須確保只有獲得操作系統(tǒng)適當(dāng)授權(quán)的進(jìn)程才能使用系統(tǒng)的文件、內(nèi)存、CPU和其他資源。保護(hù)是一種機(jī)制,用于控制程序、進(jìn)程和用戶對計(jì)算機(jī)系統(tǒng)資源的訪問,這種機(jī)制必須提供指定控制和實(shí)施控制的手段。安全機(jī)制保護(hù)系統(tǒng)存儲的信息(數(shù)據(jù)和代碼)的完整性和計(jì)算機(jī)的物理資源,從而避免未經(jīng)授權(quán)的訪問、惡意破壞或修改以及意外引入的不一致。
案例研究。本書的第16章和第17章以及附錄A和附錄B(見www.wiley.com/college/silberschatz),詳細(xì)研究了操作系統(tǒng)的實(shí)際案例,包括Linux、Windows 7、FreeBSD和Mach。雖然本書前面章節(jié)也有Linux和Windows 7的討論,但是案例研究提供了更多細(xì)節(jié)。比較這兩個非常不同的系統(tǒng)的設(shè)計(jì)是特別有意義的。最后的第18章簡要地描述了其他一些有影響的操作系統(tǒng)。
第9版在編寫本書第9版時(shí),我們考慮了影響操作系統(tǒng)的兩個重要領(lǐng)域的新發(fā)展:
多核系統(tǒng)移動計(jì)算為了強(qiáng)調(diào)這兩個重要領(lǐng)域的新發(fā)展,我們在新版本中融入了相關(guān)討論。另外,我們幾乎重寫了每章內(nèi)容以反映最新變化,并且刪除不再有趣或有關(guān)的材料。
我們也做了大量調(diào)整,例如刪除了實(shí)時(shí)系統(tǒng)一章,但在其他章節(jié)中整合了對這些系統(tǒng)的適當(dāng)討論。大多數(shù)調(diào)整都是基于我們講授操作系統(tǒng)課程的經(jīng)驗(yàn)。
下面簡要描述各章的主要修改:
第1章,導(dǎo)論,包括關(guān)于多處理器和多核系統(tǒng)以及內(nèi)核數(shù)據(jù)結(jié)構(gòu)的新內(nèi)
---作者簡介---
亞伯拉罕·西爾伯沙茨(Abraham Silberschatz) 計(jì)算機(jī)科學(xué)家,ACM、IEEE和AAAS會士,F(xiàn)任耶魯大學(xué)計(jì)算機(jī)科學(xué)系教授,之前曾任貝爾實(shí)驗(yàn)室信息科學(xué)研究中心副主管。除本書外,他還是知名教材《數(shù)據(jù)庫系統(tǒng)概念》的作者之一。
彼得·B. 高爾文(Peter B. Galvin) 現(xiàn)任Pluribus Networks首席解決方案架構(gòu)師,之前曾任系統(tǒng)集成商Corporate Technologies的首席技術(shù)官,還曾在波士頓大學(xué)擔(dān)任講師。
格雷格·加涅(Greg Gagne) 威斯敏斯特學(xué)院計(jì)算機(jī)科學(xué)系主任,操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、并行編程和軟件工程方面的專家。
---譯者簡介---
鄭扣根,浙江大學(xué)計(jì)算機(jī)學(xué)院教授、博士生導(dǎo)師。1994年起于浙江大學(xué)任教至今,長期從事操作系統(tǒng)、計(jì)算理論、形式化方法、計(jì)算機(jī)網(wǎng)絡(luò)等方面的教學(xué)和科研工作。
目 錄
Operating System Concepts, Ninth Edition
出版者的話
譯者序
前言
第一部分 概論
第1章導(dǎo)論 2
1.1操作系統(tǒng)的功能 2
1.1.1用戶視角 2
1.1.2系統(tǒng)視角 3
1.1.3操作系統(tǒng)的定義 4
1.2計(jì)算機(jī)系統(tǒng)的組成 4
1.2.1計(jì)算機(jī)系統(tǒng)的運(yùn)行 5
1.2.2存儲結(jié)構(gòu) 6
1.2.3I/O結(jié)構(gòu) 8
1.3計(jì)算機(jī)系統(tǒng)的體系結(jié)構(gòu) 9
1.3.1單處理器系統(tǒng) 9
1.3.2多處理器系統(tǒng) 10
1.3.3集群系統(tǒng) 12
1.4操作系統(tǒng)的結(jié)構(gòu) 13
1.5操作系統(tǒng)的執(zhí)行 14
1.5.1雙重模式與多重模式的執(zhí)行 15
1.5.2定時(shí)器 16
1.6進(jìn)程管理 17
1.7內(nèi)存管理 18
1.8存儲管理 18
1.8.1文件系統(tǒng)管理 18
1.8.2大容量存儲器管理 19
1.8.3高速緩存 19
1.8.4I/O系統(tǒng) 21
1.9保護(hù)與安全 21
1.10內(nèi)核數(shù)據(jù)結(jié)構(gòu) 22
1.10.1列表、堆棧及隊(duì)列 22
1.10.2樹 23
1.10.3哈希函數(shù)與哈希表 23
1.10.4位圖 24
1.11計(jì)算環(huán)境 24
1.11.1傳統(tǒng)計(jì)算 24
1.11.2移動計(jì)算 25
1.11.3分布計(jì)算 26
1.11.4客戶機(jī)-服務(wù)器計(jì)算 26
1.11.5對等計(jì)算 27
1.11.6虛擬化 28
1.11.7云計(jì)算 29
1.11.8實(shí)時(shí)嵌入式系統(tǒng) 30
1.12開源操作系統(tǒng) 31
1.12.1歷史 31
1.12.2Linux 31
1.12.3BSD UNIX 32
1.12.4Solaris 32
1.12.5用作學(xué)習(xí)的開源操作系統(tǒng) 33
1.13小結(jié) 33
習(xí)題 35
推薦讀物 36
參考文獻(xiàn) 36
第2章操作系統(tǒng)結(jié)構(gòu) 38
2.1操作系統(tǒng)的服務(wù) 38
2.2用戶與操作系統(tǒng)的界面 40
2.2.1命令解釋程序 40
2.2.2圖形用戶界面 41
2.2.3界面的選擇 42
2.3系統(tǒng)調(diào)用 43
2.4系統(tǒng)調(diào)用的類型 46
2.4.1進(jìn)程控制 46
2.4.2文件管理 49
2.4.3設(shè)備管理 50
2.4.4信息維護(hù) 50
2.4.5通信 50
2.4.6保護(hù) 51
2.5系統(tǒng)程序 51
2.6操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 52
2.6.1設(shè)計(jì)目標(biāo) 52
2.6.2機(jī)制與策略 53
2.6.3實(shí)現(xiàn) 53
2.7操作系統(tǒng)的結(jié)構(gòu) 54
2.7.1簡單結(jié)構(gòu) 54
2.7.2分層方法 55
2.7.3微內(nèi)核 56
2.7.4模塊 57
2.7.5混合系統(tǒng) 58
2.8操作系統(tǒng)的調(diào)試 60
2.8.1故障分析 60
2.8.2性能優(yōu)化 60
2.8.3DTrace 61
2.9操作系統(tǒng)的生成 63
2.10系統(tǒng)引導(dǎo) 64
2.11小結(jié) 64
習(xí)題 65
編程題 66
編程項(xiàng)目 66
推薦讀物 69
參考文獻(xiàn) 69
第二部分 進(jìn)程管理
第3章 進(jìn)程 72
3.1進(jìn)程概念 72
3.1.1進(jìn)程 72
3.1.2進(jìn)程狀態(tài) 73
3.1.3進(jìn)程控制塊 73
3.1.4線程 74
3.2進(jìn)程調(diào)度 75
3.2.1調(diào)度隊(duì)列 75
3.2.2調(diào)度程序 77
3.2.3上下文切換 78
3.3進(jìn)程運(yùn)行 79
3.3.1進(jìn)程創(chuàng)建 79
3.3.2進(jìn)程終止 82
3.4進(jìn)程間通信 83
3.4.1共享內(nèi)存系統(tǒng) 85
3.4.2消息傳遞系統(tǒng) 86
3.5IPC系統(tǒng)例子 89
3.5.1例子:POSIX共享內(nèi)存 89
3.5.2例子:Mach 91
3.5.3例子:Windows 92
3.6客戶機(jī)/服務(wù)器通信 93
3.6.1套接字 93
3.6.2遠(yuǎn)程過程調(diào)用 96
3.6.3管道 98
3.7小結(jié) 102
習(xí)題 103
編程題 105
編程項(xiàng)目 107
推薦讀物 110
參考文獻(xiàn) 110
第4章 多線程編程 112
4.1概述 112
4.1.1動機(jī) 112
4.1.2優(yōu)點(diǎn) 113
4.2多核編程 114
4.2.1編程挑戰(zhàn) 115
4.2.2并行類型 115
4.3多線程模型 116
4.3.1多對一模型 116
4.3.2一對一模型 116
4.3.3多對多模型 116
4.4線程庫 117
4.4.1Pthreads 118
4.4.2Windows線程 119
4.4.3Java線程 121
4.5隱式多線程 122
4.5.1線程池 123
4.5.2OpenMP 124
4.5.3大中央調(diào)度 125
4.5.4其他方法 125
4.6多線程問題 125
4.6.1系統(tǒng)調(diào)用fork()和exec() 125
4.6.2信號處理 126
4.6.3線程撤銷 127
4.6.4線程本地存儲 128
4.6.5調(diào)度程序激活 128
4.7操作系統(tǒng)例子 129
4.7.1Windows線程 129
4.7.2Linux線程 130
4.8小結(jié) 131
習(xí)題 131
編程題 133
編程項(xiàng)目 134
推薦讀物 136
參考文獻(xiàn) 136
第5章 進(jìn)程調(diào)度 138
5.1基本概念 138
5.1.1CPU-I/O執(zhí)行周期 138
5.1.2CPU調(diào)度程序 139
5.1.3搶占調(diào)度 139
5.1.4調(diào)度程序 140
5.2調(diào)度準(zhǔn)則 140
5.3調(diào)度算法 141
5.3.1先到先服務(wù)調(diào)度 141
5.3.2最短作業(yè)優(yōu)先調(diào)度 142
5.3.3優(yōu)先級調(diào)度 144
5.3.4輪轉(zhuǎn)調(diào)度 145
5.3.5多級隊(duì)列調(diào)度 147
5.3.6多級反饋隊(duì)列調(diào)度 148
5.4線程調(diào)度 149
5.4.1競爭范圍 149
5.4.2Pthreads調(diào)度 149
5.5多處理器調(diào)度 151
5.5.1多處理器調(diào)度的方法 151
5.5.2處理器親和性 151
5.5.3負(fù)載平衡 152
5.5.4多核處理器 152
5.6實(shí)時(shí)CPU調(diào)度 154
5.6.1最小化延遲 154
5.6.2優(yōu)先權(quán)調(diào)度 155
5.6.3單調(diào)速率調(diào)度 156
5.6.4最早截止期限優(yōu)先調(diào)度 157
5.6.5比例分享調(diào)度 158
5.6.6POSIX實(shí)時(shí)調(diào)度 158
5.7操作系統(tǒng)例子 160
5.7.1例子:Linux調(diào)度 160
5.7.2例子:Windows調(diào)度 162
5.7.3例子:Solaris調(diào)度 164
5.8算法評估 165
5.8.1確定性模型 166
5.8.2排隊(duì)模型 167
5.8.3仿真 167
5.8.4實(shí)現(xiàn) 168
5.9小結(jié) 169
習(xí)題 170
推薦讀物 172
參考文獻(xiàn) 173
第6章 同步 175
6.1背景 175
6.2臨界區(qū)問題 177
6.3Peterson解決方案 178
6.4硬件同步 179
6.5互斥鎖 181
6.6信號量