FreeBSD操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(原書第2版)
定 價:199 元
- 作者:[美]馬歇爾·柯克·麥庫西克,[美]喬治·V.內(nèi)維爾-尼爾,[美]羅伯特·N.M.沃森
- 出版時間:2021/10/1
- ISBN:9787111689973
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.81
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書由FreeBSD系統(tǒng)的三位引領(lǐng)者撰寫,在上一版基礎(chǔ)上做了大幅更新,涵蓋FreeBSD 5和FreeBSD 11之間的所有重大改進(jìn),如使用FreeBSD Jail的高度可擴(kuò)展和輕量級虛擬化、使用Xen和Virtio設(shè)備半虛擬化的虛擬機(jī)加速、Capsicum沙箱和GELI加密磁盤保護(hù)以及DTrace內(nèi)核調(diào)試技巧等。全書從接口到內(nèi)核再到硬件逐層深入,詳細(xì)闡述實(shí)現(xiàn)每個重要系統(tǒng)組件——進(jìn)程管理、安全、虛擬內(nèi)存、I/O系統(tǒng)、文件系統(tǒng)、socket IPC和網(wǎng)絡(luò)等——所使用的概念、數(shù)據(jù)結(jié)構(gòu)和算法。本書可以作為高等院校操作系統(tǒng)相關(guān)課程的教材或參考書,也可以作為系統(tǒng)開發(fā)人員和管理人員的學(xué)習(xí)指南。
本書遵循早期權(quán)威的、完整的關(guān)于UNIX系統(tǒng)4.3BSD和4.4BSD版本的設(shè)計(jì)和實(shí)現(xiàn)的描述,這些UNIX系統(tǒng)是由加州大學(xué)伯克利分校開發(fā)的。自從伯克利在1994年發(fā)布終版本以來,幾個團(tuán)隊(duì)一直在開發(fā)BSD。本書詳細(xì)介紹了FreeBSD,這個系統(tǒng)擁有的開發(fā)人員團(tuán)體且發(fā)行為廣泛。盡管FreeBSD發(fā)行版在其基本系統(tǒng)中包含了近1000個實(shí)用程序,在其ports集合中包含了近25 000個可選實(shí)用程序,但本書幾乎完全集中在內(nèi)核上。
類UNIX系統(tǒng)
類UNIX系統(tǒng)包括:傳統(tǒng)的供應(yīng)商系統(tǒng),如Solaris和HP-UX;基于Linux的發(fā)行版,如Red Hat、Debian、Suse和Slackware;基于BSD的發(fā)行版,如FreeBSD、NetBSD、OpenBSD和Darwin。它們可以在從智能手機(jī)到的超級計(jì)算機(jī)的各種計(jì)算機(jī)上運(yùn)行。它們是大多數(shù)多處理器、圖形和向量處理系統(tǒng)選擇的操作系統(tǒng),并被廣泛用于分時這一初目的。作為Internet上提供網(wǎng)絡(luò)服務(wù)(從FTP到WWW)的常用平臺,它們是有史以來開發(fā)的可移植性的操作系統(tǒng)。這種可移植性既歸功于它們的實(shí)現(xiàn)語言C [Kernighan & Ritchie, 1989](它本身就是一種廣泛移植的語言),又歸功于系統(tǒng)的優(yōu)雅設(shè)計(jì)。
自1969年創(chuàng)始以來[Ritchie & Thompson, 1978],UNIX系統(tǒng)在幾個分分合合的支流中不斷發(fā)展。初的開發(fā)人員繼續(xù)在AT&T貝爾實(shí)驗(yàn)室開發(fā)第9版和第10版UNIX,以及UNIX第9版的后繼版本。與此同時,AT&T在將UNIX System V與Sun Microsystems的基于BSD的SunOS合并以生產(chǎn)Solaris之前,授權(quán)將UNIX System V作為產(chǎn)品。第9版UNIX、System V和Solaris都受到了加州大學(xué)伯克利分校計(jì)算機(jī)系統(tǒng)研究小組(CSRG)推出的伯克利軟件發(fā)行版的強(qiáng)烈影響。盡管Linux操作系統(tǒng)是獨(dú)立于其他UNIX變體開發(fā)的,但它實(shí)現(xiàn)了UNIX接口。因此,在其他基于UNIX的平臺上開發(fā)的應(yīng)用程序很容易移植到Linux上運(yùn)行。
伯克利軟件發(fā)行版(BSD)
BSD系統(tǒng)是個基于UNIX系統(tǒng)并引入許多重要功能的發(fā)行版。這些重要功能包括:
按需分頁的虛擬內(nèi)存支持。
硬件、I/O系統(tǒng)的自動配置。
快速、可恢復(fù)的文件系統(tǒng)。
基于套接字的進(jìn)程間通信(IPC)原語。
TCP/IP的相關(guān)實(shí)現(xiàn)。
伯克利發(fā)行版進(jìn)入了許多供應(yīng)商的UNIX系統(tǒng),并被許多其他供應(yīng)商的開發(fā)團(tuán)隊(duì)在內(nèi)部使用。TCP/IP網(wǎng)絡(luò)協(xié)議套件在4.2BSD和4.3BSD中的實(shí)現(xiàn)以及這些系統(tǒng)的應(yīng)用,在推動TCP/IP網(wǎng)絡(luò)協(xié)議套件成為世界標(biāo)準(zhǔn)方面發(fā)揮了關(guān)鍵作用。甚至像微軟這樣的非UNIX供應(yīng)商也在自己的Winsock IPC接口中采用了伯克利套接字設(shè)計(jì)。
BSD的發(fā)布對POSIX(IEEE std1003.1)操作系統(tǒng)接口標(biāo)準(zhǔn)和相關(guān)標(biāo)準(zhǔn)也有很大的影響。這在一些特性上尤為明顯,如可靠信號、作業(yè)控制、每個進(jìn)程的多個訪問組以及目錄操作的例程,都是從BSD中改編后應(yīng)用于POSIX的。
早期的BSD版本包含UNIX許可證代碼,因此要求接收者擁有AT&T源代碼許可證才能獲得和使用BSD。1988年,伯克利把它的發(fā)行版分為AT&T授權(quán)的和可自由再發(fā)行的代碼?勺杂稍侔l(fā)行的代碼是單獨(dú)授權(quán)的,任何人都可以獲得、使用和重新分發(fā)。1994年伯克利發(fā)布的后一個可自由再發(fā)行的4.4BSD-Lite2版本包含了幾乎整個內(nèi)核以及所有重要的庫和實(shí)用程序。
NetBSD和FreeBSD兩個小組萌芽于1993年,并開始支持和分發(fā)由伯克利開發(fā)的免費(fèi)可再發(fā)行與構(gòu)建的系統(tǒng)。NetBSD小組強(qiáng)調(diào)可移植性和極簡主義的方法,將系統(tǒng)移植到近60個平臺上,他們決心保持系統(tǒng)的精簡以易于兼容嵌入式應(yīng)用程序。FreeBSD小組強(qiáng)調(diào)限度地支持PC體系結(jié)構(gòu),推動其系統(tǒng)易于安裝,并向盡可能廣泛的用戶進(jìn)行推廣。
1995年,OpenBSD組從NetBSD組中分離出來,開發(fā)了一個強(qiáng)調(diào)安全性的發(fā)行版。2003年,Dragonfly組從FreeBSD組中分離出來,開發(fā)了一種輕量級的機(jī)制來支持多處理的發(fā)行版。多年來,BSD發(fā)行版之間處于良性競爭狀態(tài),許多想法和大量代碼之間經(jīng);ネㄓ袩o。
本書內(nèi)容
本書介紹FreeBSD 11內(nèi)核的內(nèi)部結(jié)構(gòu)以及實(shí)現(xiàn)FreeBSD系統(tǒng)功能所涉及的概念、數(shù)據(jù)結(jié)構(gòu)和算法,從系統(tǒng)調(diào)用層向下(從接口到內(nèi)核,再到硬件本身)涵蓋FreeBSD的內(nèi)容。該內(nèi)核包括進(jìn)程管理、內(nèi)核安全、虛擬內(nèi)存、I/O系統(tǒng)、文件系統(tǒng)、套接字IPC機(jī)制和網(wǎng)絡(luò)協(xié)議實(shí)現(xiàn)等系統(tǒng)模塊。除了與終端接口、系統(tǒng)啟動有關(guān)的內(nèi)容,系統(tǒng)調(diào)用層之上的知識,例如與庫、Shell、命令行、編程語言和其他用戶接口有關(guān)的內(nèi)容都不在本書范圍之內(nèi)。本書沿襲了Organick在編寫Multics操作系統(tǒng)書籍時首次采用的組織結(jié)構(gòu)[Organick, 1975],是對現(xiàn)代操作系統(tǒng)的深入研究。
在涉及特定硬件時,本書參考了Intel 32位體系結(jié)構(gòu)和類似的AMD 64位體系結(jié)構(gòu)。由于FreeBSD加強(qiáng)了在這些體系結(jié)構(gòu)上的開發(fā),它們是獲得FreeBSD全面支持的體系結(jié)構(gòu),因此十分便于參考。
計(jì)算機(jī)專業(yè)人士閱讀指南
FreeBSD被廣泛應(yīng)用于全球許多公司的核心基礎(chǔ)體系結(jié)構(gòu)。由于構(gòu)建過程占用空間較小,它在嵌入式程序中的應(yīng)用場景也越來越多。FreeBSD的授權(quán)條款不要求對發(fā)生變更或功能增強(qiáng)的系統(tǒng)進(jìn)行發(fā)布,而Linux則要求以源代碼形式提供對內(nèi)核的所有更改和增強(qiáng)。因此,需要控制其知識產(chǎn)權(quán)發(fā)布的公司會使用FreeBSD構(gòu)建產(chǎn)品。
本書主要針對使用FreeBSD系統(tǒng)工作的專業(yè)人員
譯者序
前言
作者簡介
部分 概述
第1章 BSD系統(tǒng)的歷史和目標(biāo)2
1.1 UNIX系統(tǒng)的歷史2
1.1.1 UNIX系統(tǒng)的起源2
1.1.2 Research小組的UNIX系統(tǒng)3
1.1.3 AT&T UNIX System Ⅲ和System V4
1.1.4 伯克利軟件發(fā)布5
1.1.5 UNIX無處不在6
1.2 BSD和其他系統(tǒng)6
1.3 BSD向開放源代碼的轉(zhuǎn)變8
1.3.1 Networking Release 28
1.3.2 法律訴訟10
1.3.3 4.4BSD11
1.3.4 4.4BSD-Lite Release 211
1.4 FreeBSD的開發(fā)模式12
第2章 FreeBSD設(shè)計(jì)概述16
2.1 FreeBSD的功能和內(nèi)核16
2.2 內(nèi)核結(jié)構(gòu)17
2.3 內(nèi)核服務(wù)20
2.4 進(jìn)程管理21
2.4.1 信號22
2.4.2 進(jìn)程組和會話23
2.5 安全23
2.5.1 進(jìn)程憑證24
2.5.2 特權(quán)模型25
2.5.3 自主訪問控制25
2.5.4 能力模型25
2.5.5 Jail輕型虛擬化26
2.5.6 強(qiáng)制訪問控制27
2.5.7 事件審計(jì)27
2.5.8 密碼學(xué)與隨機(jī)數(shù)生成器28
2.6 內(nèi)存管理28
2.6.1 BSD內(nèi)存管理設(shè)計(jì)要點(diǎn)29
2.6.2 內(nèi)核中的內(nèi)存管理30
2.7 I/O系統(tǒng)概述31
2.7.1 描述符與I/O31
2.7.2 描述符管理33
2.7.3 設(shè)備34
2.7.4 套接字IPC34
2.7.5 分散-收集I/O35
2.7.6 多文件系統(tǒng)支持35
2.8 設(shè)備36
2.9 快速文件系統(tǒng)36
2.10 Zettabyte文件系統(tǒng)40
2.11 網(wǎng)絡(luò)文件系統(tǒng)41
2.12 進(jìn)程間通信41
2.13 網(wǎng)絡(luò)層協(xié)議42
2.14 傳輸層協(xié)議43
2.15 系統(tǒng)啟動和停止43
習(xí)題44
第3章 內(nèi)核服務(wù)45
3.1 內(nèi)核結(jié)構(gòu)45
3.1.1 系統(tǒng)進(jìn)程45
3.1.2 系統(tǒng)入口46
3.1.3 運(yùn)行時的內(nèi)核結(jié)構(gòu)46
3.1.4 內(nèi)核的入口48
3.1.5 從內(nèi)核返回49
3.2 系統(tǒng)調(diào)用49
3.2.1 調(diào)用結(jié)果的處理49
3.2.2 從系統(tǒng)調(diào)用返回50
3.3 陷阱和中斷51
3.3.1 I/O設(shè)備中斷51
3.3.2 軟件中斷51
3.4 時鐘中斷52
3.4.1 統(tǒng)計(jì)和進(jìn)程調(diào)度53
3.4.2 超時54
3.5 內(nèi)存管理服務(wù)55
3.6 時間服務(wù)58
3.6.1 真實(shí)時間59
3.6.2 外部表示59
3.6.3 調(diào)整時間59
3.6.4 時間間隔60
3.7 資源服務(wù)60
3.7.1 進(jìn)程優(yōu)先級60
3.7.2 資源利用61
3.7.3 資源限制61
3.7.4 文件系統(tǒng)配額62
3.8 內(nèi)核跟蹤工具62
3.8.1 系統(tǒng)調(diào)用跟蹤62
3.8.2 DTrace63
3.8.3 內(nèi)核跟蹤66
習(xí)題68
第二部分 進(jìn)程
第4章 進(jìn)程管理70
4.1 進(jìn)程管理概述70
4.1.1 多道程序設(shè)計(jì)71
4.1.2 調(diào)度72
4.2 進(jìn)程狀態(tài)73
4.2.1 進(jìn)程結(jié)構(gòu)75
4.2.2 線程結(jié)構(gòu)78
4.3 上下文切換79
4.3.1 線程狀態(tài)79
4.3.2 底層上下文切換80
4.3.3 主動上下文切換80
4.3.4 同步84
4.3.5 互斥鎖同步85
4.3.6 互斥鎖接口87
4.3.7 鎖同步88
4.3.8 死鎖預(yù)防89
4.4 線程調(diào)度91
4.4.1 低級調(diào)度器91
4.4.2 線程運(yùn)行隊(duì)列和上下文切換92
4.4.3 分時線程調(diào)度93
4.4.4 多處理器調(diào)度98
4.4.5 自適應(yīng)空閑100
4.4.6 傳統(tǒng)的分時線程調(diào)度100
4.5 創(chuàng)建進(jìn)程101
4.6 終止進(jìn)程102
4.7 信號103
4.7.1 發(fā)送信號106
4.7.2 傳輸信號108
4.8 進(jìn)程組和會話110
4.8.1 進(jìn)程組110
4.8.2 會話111
4.8.3 作業(yè)控制112
4.9 進(jìn)程的調(diào)試114
習(xí)題116
第5章 安全性118
5.1 操作系統(tǒng)安全119
5.2 安全模型120
5.2.1 進(jìn)程模型120
5.2.2 自主與強(qiáng)制訪問控制120
5.2.3 可信計(jì)算基121
5.2.4 其他內(nèi)核安全特性121
5.3 進(jìn)程憑證121
5.3.1 憑證結(jié)構(gòu)122
5.3.2 憑證內(nèi)存模型123
5.3.3 訪問控制校驗(yàn)124
5.4 用戶和組124
5.5 特權(quán)模型126
5.5.1 隱式特權(quán)127
5.5.2 顯式特權(quán)127
5.6 進(jìn)程間訪問控制128
5.6.1 可見性129
5.6.2 信號129
5.6.3 調(diào)度控制129
5.6.4 等待進(jìn)程終止130
5.6.5 調(diào)試130
5.7 自主訪問控制130
5.7.1 虛擬文件系統(tǒng)接口與DAC131
5.7.2 對象屬主與組132
5.7.3 UNIX權(quán)限132
5.7.4 訪問控制列表134
5.7.5 POSIX.1e訪問控制列表136
5.7.6 NFSv4訪問控制列表138
5.8 Capsicum能力模型141
5.8.1 Capsicum應(yīng)用體系結(jié)構(gòu)142
5.8.2 能力系統(tǒng)142
5.8.3 能力143
5.8.4 能力模型145
5.9 Jail146
5.10 強(qiáng)制訪問控制框架151
5.10.1 強(qiáng)制策略151
5.10.2 設(shè)計(jì)的指導(dǎo)原則152
5.10.3 MAC框架的體系結(jié)構(gòu)153
5.10.4 啟動框架154
5.10.5 策略注冊155
5.10.6 框架入口點(diǎn)設(shè)計(jì)考量155
5.10.7 策略入口點(diǎn)設(shè)計(jì)考量156
5.10.8 內(nèi)核服務(wù)入口點(diǎn)調(diào)用157
5.10.9 策略組合158
5.10.10 給對象打標(biāo)簽159
5.10.11 標(biāo)簽的生命周期與存儲管理159
5.10.12 標(biāo)簽同步162
5.10.13 從用戶空間進(jìn)行策略無關(guān)的標(biāo)簽管理163
5.11 安全事件審計(jì)163
5.11.1 審計(jì)事件與記錄164
5.11.2 BSM審計(jì)記錄與審計(jì)跟蹤165
5.11.3 內(nèi)核審計(jì)的實(shí)現(xiàn)166
5.12 加密服務(wù)168
5.12.1 加密框架168
5.12.2 隨機(jī)數(shù)生成器170
5.13 GELI全磁盤加密173
5.13.1 機(jī)密性和完整性保護(hù)173
5.13.2 密鑰管理174
5.13.3 啟動GELI174
5.13.4 加密塊保護(hù)175
5.13.5 I/O模型176
5.13.6 不足176
習(xí)題177
第6章 存儲管理178
6.1 術(shù)語178
6.1.1 進(jìn)程與內(nèi)存179
6.1.2 調(diào)頁機(jī)制180
6.1.3 替換算法180
6.1.4 工作集模型181
6.1.5 交換機(jī)制181
6.1.6 虛擬內(nèi)存的優(yōu)點(diǎn)182
6.1.7 虛擬內(nèi)存的硬件要求182
6.2 FreeBSD 虛擬內(nèi)存系統(tǒng)概述183
6.3 內(nèi)核的存儲管理185
6.3.1 內(nèi)核映射和子映射186
6.3.2 內(nèi)核地址空間的分配188
6.3.3 slab分配器190
6.3.4 keg分配器191
6.3.5 zone分配器192
6.3.6 內(nèi)核malloc194
6.3.7 內(nèi)核zone分配器196
6.4 進(jìn)程獨(dú)立擁有的資源197
6.4.1 FreeBSD的進(jìn)程虛擬地址空間197
6.4.2 缺頁處理199
6.4.3 映射到vm_object199
6.4.4 vm_object201
6.4.5 vm_object到頁面201
6.5 共享內(nèi)存202
6.5.1 mmap模型203
6.5.2 共享映射205
6.5.3 私有映射205
6.5.4 壓縮影子鏈207
6.5.5 私有快照208
6.6 創(chuàng)建新進(jìn)程209
6.6.1 預(yù)留內(nèi)核資源210
6.6.2 復(fù)制用戶地址空間211
6.6.3 不通過復(fù)制創(chuàng)建新進(jìn)程211
6.7 執(zhí)行一個文件212
6.8 操作進(jìn)程地址空間213
6.8.1 改變進(jìn)程大小213
6.8.2 文件映射214
6.8.3 改變保護(hù)權(quán)限215
6.9 終止進(jìn)程215
6.10 調(diào)頁器接口216
6.10.1 vnode調(diào)頁器218
6.10.2 設(shè)備調(diào)頁器219
6.10.3 物理內(nèi)存調(diào)頁器220
6.10.4 交換調(diào)頁器221
6.11 調(diào)頁機(jī)制224
6.11.1 硬件高速緩存的設(shè)計(jì)228
6.11.2 硬件內(nèi)存管理229
6.11.3 超級頁231
6.12 頁面替換235
6.12.1 調(diào)頁參數(shù)237
6.12.2 pageout守護(hù)進(jìn)程237
6.12.3 交換機(jī)制240
6.12.4 換入進(jìn)程242
6.13 可移植性243
6.13.1 pmap模塊的作用243
6.13.2 初始化和啟動245
6.13.3 分配和釋放映射248
6.13.4 改變映射的訪問和wiring屬性249
6.13.5 物理頁面使用信息的維護(hù)251
6.13.6 初始化物理頁面251
6.13.7 管理內(nèi)部數(shù)據(jù)結(jié)構(gòu)252
習(xí)題252
第三部分 I/O系統(tǒng)
第7章 I/O系統(tǒng)概述256
7.1 描述符管理和服務(wù)257
7.1.1 打開文件條目258
7.1.2 描述符管理260
7.1.3 異步I/O261
7.1.4 文件描述符鎖261
7.1.5 描述符的多路I/O復(fù)用263
7.1.6 select的實(shí)現(xiàn)265
7.1.7 kqueue和kevent267
7.1.8 數(shù)據(jù)在內(nèi)核中的遷移269
7.2 本地進(jìn)程間交互270
7.2.1 信號量272
7.2.2 消息隊(duì)列273
7.2.3 共享內(nèi)存274
7.3 虛擬文件接口275
7.3.1 vnode的內(nèi)容275
7.3.2 vnode的操作277
7.3.3 路徑名的轉(zhuǎn)換278
7.3.4 導(dǎo)出文件系統(tǒng)服務(wù)278
7.4 獨(dú)立于文件系統(tǒng)的服務(wù)279
7.4.1 名字緩存281
7.4.2 緩沖區(qū)管理282
7.4.3 緩沖區(qū)管理的實(shí)現(xiàn)284
7.5 可堆疊的文件系統(tǒng)285
7.5.1 簡單的文件系統(tǒng)層287
7.5.2 聯(lián)合文件系統(tǒng)288
7.5.3 其他文件系統(tǒng)290
習(xí)題291
第8章 設(shè)備292
8.1 設(shè)備概述292
8.1.1 PC I/O體系結(jié)構(gòu)293
8.1.2 FreeBSD大容量存儲I/O子系統(tǒng)的結(jié)構(gòu)295
8.1.3 設(shè)備命名和訪問296
8.2 從用戶到設(shè)備的I/O映射297
8.2.1 設(shè)備驅(qū)動程序298
8.2.2 I/O隊(duì)列299
8.2.3 中斷處理299
8.3 字符設(shè)備299
8.3.1 原始設(shè)備和物理I/O301
8.3.2 面向字符的設(shè)備302
8.3.3 字符設(shè)備驅(qū)動程序入口點(diǎn)302
8.4 磁盤設(shè)備303
8.4.1 磁盤設(shè)備驅(qū)動程序入口點(diǎn)303
8.4.2 磁盤I/O請求排序303
8.4.3 磁盤標(biāo)簽304
8.5 網(wǎng)絡(luò)設(shè)備305
8.5.1 網(wǎng)絡(luò)設(shè)備驅(qū)動程序入口點(diǎn)306
8.5.2 配置與控制306
8.5.3 數(shù)據(jù)包接收307
8.5.4 數(shù)據(jù)包傳輸309
8.6 終端處理309
8.6.1 終端處理模式310
8.6.2 用戶接口312
8.6.3 進(jìn)程組、會話和終端控制313
8.6.4 終端操作313
8.6.5 終端輸出(上半部分)314
8.6.6 終端輸出(下半部分)315
8.6.7 終端輸入315
8.6.8 關(guān)閉終端設(shè)備316
8.7 GEOM層316
8.7.1 術(shù)語和拓?fù)湟?guī)則317
8.7.2 改變拓?fù)?18
8.7.3 操作320
8.7.4 拓?fù)潇`活性321
8.8 CAM層322
8.8.1 通過CAM子系統(tǒng)的SCSI I/O請求的路徑323
8.8.2 ATA磁盤325
8.9 設(shè)備配置325
8.9.1 設(shè)備標(biāo)識327
8.9.2 自動配置數(shù)據(jù)結(jié)構(gòu)329
8.9.3 資源管理333
8.10 設(shè)備虛擬化334
8.10.1 與虛擬機(jī)監(jiān)控程序的交互335
8.10.2 Virt