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