FreeBSD操作系統設計與實現
《FreeBSD操作系統設計與實現》,[美] 羅伯特·N.M.沃森著;(美)馬 著,[美] 羅伯特·N.M.沃森著;(美)馬 編,出版社: 機械工業出版社。
機械工業出版社成立於1950年,是建國後國家設立的第一家科技出版社,前身為科學技術出版社,1952年更名為機械工業出版社[1]。機械工業出版社(以下簡稱機工社)由機械工業信息研究院作為主辦單位,目前隸屬於國務院國資委[2]。
目錄
內容簡介
本書由FreeBSD系統的三位引領者撰寫,在上一版基礎上做了大幅更新,涵蓋FreeBSD 5和FreeBSD 11之間的所有重大改進,如使用FreeBSD Jail的高度可擴展和輕量級虛擬化、使用Xen和Virtio設備半虛擬化的虛擬機加速、Capsicum沙箱和GELI加密磁盤保護以及DTrace內核調試技巧等。全書從接口到內核再到硬件逐層深入,詳細闡述實現每個重要系統組件——進程管理、安全、虛擬內存、I/O系統、文件系統、socket IPC和網絡等——所使用的概念、數據結構和算法。本書可以作為高等院校操作系統相關課程的教材或參考書,也可以作為系統開發人員和管理人員的學習指南。
目錄
譯者序
作者簡介
第一部分 概述
第1章 BSD系統的歷史和目標 2
1.1 UNIX系統的歷史 2
1.1.1 UNIX系統的起源 2
1.1.2 Research小組的UNIX系統 3
1.1.3 AT&T UNIX System Ⅲ和System V 4
1.1.4 伯克利軟件發布 5
1.1.5 UNIX無處不在 6
1.2 BSD和其他系統 6
1.3 BSD向開放源代碼的轉變 8
1.3.1 Networking Release 28
1.3.2 法律訴訟 10
1.3.3 4.4BSD 11
1.3.4 4.4BSD-Lite Release 211
1.4 FreeBSD的開發模式 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 密碼學與隨機數生成器 28
2.6 內存管理 28
2.6.1 BSD內存管理設計要點 29
2.6.2 內核中的內存管理 30
2.7 I/O系統概述 31
2.7.1 描述符與I/O 31
2.7.2 描述符管理 33
2.7.3 設備 34
2.7.4 套接字IPC 34
2.7.5 分散-收集I/O 35
2.7.6 多文件系統支持 35
2.8 設備 36
2.9 快速文件系統 36
2.10 Zettabyte文件系統 40
2.11 網絡文件系統 41
2.12 進程間通信 41
2.13 網絡層協議 42
2.14 傳輸層協議 43
2.15 系統啟動和停止 43
習題 44
第3章 內核服務 45
3.1 內核結構 45
3.1.1 系統進程 45
3.1.2 系統入口 46
3.1.3 運行時的內核結構 46
3.1.4 內核的入口 48
3.1.5 從內核返回 49
3.2 系統調用 49
3.2.1 調用結果的處理 49
3.2.2 從系統調用返回 50
3.3 陷阱和中斷 51
3.3.1 I/O設備中斷 51
3.3.2 軟件中斷 51
3.4 時鐘中斷 52
3.4.1 統計和進程調度 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 進程優先級 60
3.7.2 資源利用 61
3.7.3 資源限制 61
3.7.4 文件系統配額 62
3.8 內核跟蹤工具 62
3.8.1 系統調用跟蹤 62
3.8.2 DTrace 63
3.8.3 內核跟蹤 66
習題 68
第二部分 進程
第4章 進程管理 70
4.1 進程管理概述 70
4.1.1 多道程序設計 71
4.1.2 調度 72
4.2 進程狀態 73
4.2.1 進程結構 75
4.2.2 線程結構 78
4.3 上下文切換 79
4.3.1 線程狀態 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 傳統的分時線程調度 100
4.5 創建進程 101
4.6 終止進程 102
4.7 信號 103
4.7.1 發送信號 106
4.7.2 傳輸信號 108
4.8 進程組和會話 110
4.8.1 進程組 110
4.8.2 會話 111
4.8.3 作業控制 112
4.9 進程的調試 114
習題 116
第5章 安全性 118
5.1 操作系統安全 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 虛擬文件系統接口與DAC 131
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 能力系統 142
5.8.3 能力 143
5.8.4 能力模型 145
5.9 Jail 146
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 內核審計的實現 166
5.12 加密服務 168
5.12.1 加密框架 168
5.12.2 隨機數生成器 170
5.13 GELI全磁盤加密 173
5.13.1 機密性和完整性保護 173
5.13.2 密鑰管理 174
5.13.3 啟動GELI 174
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 虛擬內存的優點 182
6.1.7 虛擬內存的硬件要求 182
6.2 FreeBSD 虛擬內存系統概述 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 內核malloc 194
6.3.7 內核zone分配器 196
6.4 進程獨立擁有的資源 197
6.4.1 FreeBSD的進程虛擬地址空間 197
6.4.2 缺頁處理 199
6.4.3 映射到vm_object 199
6.4.4 vm_object 201
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 創建新進程 209
6.6.1 預留內核資源 210
6.6.2 複製用戶地址空間 211
6.6.3 不通過複製創建新進程 211
6.7 執行一個文件 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 調頁參數 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 管理內部數據結構 252
習題 252
第三部分 I/O系統
第7章 I/O系統概述 256
7.1 描述符管理和服務 257
7.1.1 打開文件條目 258
7.1.2 描述符管理 260
7.1.3 異步I/O 261
7.1.4 文件描述符鎖 261
7.1.5 描述符的多路I/O復用 263
7.1.6 select的實現 265
7.1.7 kqueue和kevent 267
7.1.8 數據在內核中的遷移 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 導出文件系統服務 278
7.4 獨立於文件系統的服務 279
7.4.1 名字緩存 281
7.4.2 緩衝區管理 282
7.4.3 緩衝區管理的實現 284
7.5 可堆疊的文件系統 285
7.5.1 簡單的文件系統層 287
7.5.2 聯合文件系統 288
7.5.3 其他文件系統 290
習題 291
第8章 設備 292
8.1 設備概述 292
8.1.1 PC I/O體系結構 293
8.1.2 FreeBSD大容量存儲I/O子系統的結構 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/O 301
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 數據包接收 307
8.5.4 數據包傳輸 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 術語和拓撲規則 317
8.7.2 改變拓撲 318
8.7.3 操作 320
8.7.4 拓撲靈活性 321
8.8 CAM層 322
8.8.1 通過CAM子系統的SCSI I/O請求的路徑 323
8.8.2 ATA磁盤 325
8.9 設備配置 325
8.9.1 設備標識 327
8.9.2 自動配置數據結構 329
8.9.3 資源管理 333
8.10 設備虛擬化 334
8.10.1 與虛擬機監控程序的交互 335
8.10.2 Virtio 336
8.10.3 Xen 339
8.10.4 設備直通 346
習題 346
第9章 快速文件系統 348
9.1 分層文件系統管理 348
9.2 inode結構 350
9.2.1 inode格式的改變 351
9.2.2 擴展屬性 352
9.2.3 新的文件系統功能 354
9.2.4 文件標誌 355
9.2.5 動態inode 356
9.2.6 inode管理 357
9.3 命名 359
9.3.1 目錄 359
9.3.2 在目錄中查找名稱 360
9.3.3 路徑名轉換 362
9.3.4 鏈接 363
9.4 配額 365
9.5 文件鎖定 368
9.6 軟更新 372
9.6.1 在文件系統中的更新依賴 373
9.6.2 依賴的結構 376
9.6.3 位圖依賴跟蹤 378
9.6.4 inode依賴跟蹤 378
9.6.5 直接塊依賴跟蹤 379
9.6.6 間接塊依賴跟蹤 380
9.6.7 新間接塊的依賴跟蹤 381
9.6.8 新目錄入口的依賴跟蹤 382
9.6.9 新目錄依賴跟蹤 384
9.6.10 目錄入口移除依賴項跟蹤 385
9.6.11 文件截斷 385
9.6.12 文件和目錄inode回收 385
9.6.13 目錄入口重命名依賴關係跟蹤 386
9.6.14 軟更新的fsync請求 386
9.6.15 軟更新的文件刪除要求 387
9.6.16 fsck的軟更新要求 389
9.7 文件系統快照 389
9.7.1 創建一個文件系統快照 389
9.7.2 維護文件系統快照 391
9.7.3 大文件系統快照 392
9.7.4 後台fsck 393
9.7.5 用戶可見的快照 394
9.7.6 實時轉儲 394
9.8 日誌軟更新 394
9.8.1 背景和簡介 395
9.8.2 與其他實現的兼容性 395
9.8.3 日誌格式 395
9.8.4 需要日誌記錄的修改 396
9.8.5 日誌的額外需求 397
9.8.6 恢復進程 398
9.8.7 性能 399
9.8.8 未來工作 400
9.8.9 跟蹤文件移除依賴 400
9.9 本地文件存儲 402
9.9.1 文件存儲概述 402
9.9.2 用戶I/O到一個文件的過程 404
9.10 伯克利快速文件系統 406
9.10.1 伯克利快速文件系統的組織 406
9.10.2 啟動塊 408
9.10.3 優化存儲利用率 408
9.10.4 對文件進行讀寫 409
9.10.5 布局策略 411
9.10.6 分配機制 413
9.10.7 塊聚類 416
9.10.8 基於分區的分配 418
習題 419
第10章 Zettabyte文件系統 421
第11章 網絡文件系統 422
11.1 概述 422
11.2 結構和操作 424
11.2.1 FreeBSD NFS的實現 428
11.2.2 客戶端-服務器端交互 432
11.2.3 安全問題 432
11.2.4 性能提升技巧 433
11.3 NFS演進 435
11.3.1 命名空間 439
11.3.2 屬性 440
11.3.3 訪問控制列表 441
11.3.4 緩存、代理和回調 441
11.3.5 鎖 447
11.3.6 安全 448
11.3.7 崩潰恢復 450
習題 451
第四部分 進程間通信
第12章 進程間通信 454
12.1 進程間交互模型 454
12.2 實現結構和概述 458
12.3 內存管理 460
12.3.1 mbuf 460
12.3.2 存儲管理算法 463
12.3.3 mbuf實用例程 463
12.4 IPC數據結構 464
12.4.1 套接字地址 468
12.4.2 鎖 469
12.5 建立連接 469
12.6 數據傳輸 471
12.6.1 傳輸數據 471
12.6.2 接收數據 473
12.7 關閉套接字 475
12.8 網絡通信協議的內部結構 476
12.8.1 數據流 477
12.8.2 通信協議 478
12.9 套接字到協議接口 480
12.9.1 用戶請求協議例程 481
12.9.2 控制輸出協議例程 483
12.10 協議到協議的接口 484
12.10.1 pr_output 484
12.10.2 pr_input 485
12.10.3 pr_ctlinput 485
12.11 協議到網絡的接口 486
12.11.1 網絡接口和鏈路層協議 486
12.11.2 數據包傳輸 492
12.11.3 數據包接收 492
12.12 緩衝和流控 493
12.12.1 緩衝協議策略 494
12.12.2 隊列限制 494
12.13 網絡虛擬化 494
習題 496
第13章 網絡層協議 498
13.1 IPv 4498
13.1.1 IPv4地址 500
13.1.2 廣播地址 501
13.1.3 Internet組播 502
13.1.4 鏈路層地址解析 503
13.2 ICMP 504
13.3 IPv 6506
13.3.1 IPv6地址 507
13.3.2 IPv6數據包格式 509
13.3.3 切換到套接字API 510
13.3.4 自動配置 511
13.4 Internet協議代碼結構 515
13.4.1 輸出 515
13.4.2 輸入 517
13.4.3 轉發 518
13.5 路由 519
13.5.1 內核路由表 520
13.5.2 路由選擇查詢 522
13.5.3 路由選擇重定向 525
13.5.4 路由表接口 525
13.5.5 用戶級路由選擇策略 526
13.5.6 用戶級路由選擇接口:路由選擇套接字 526
13.6 原始套接字 527
13.6.1 控制塊 528
13.6.2 輸入處理 528
13.6.3 輸出處理 529
13.7 安全 529
13.7.1 IPSec概述 530
13.7.2 安全協議 531
13.7.3 密鑰管理 533
13.7.4 IPSec實現 537
13.8 數據包處理框架 539
13.8.1 伯克利數據包過濾器 539
13.8.2 IP防火牆 540
13.8.3 IPFW和Dummynet 541
13.8.4 數據包過濾器 544
13.8.5 netgraph 545
13.8.6 netmap 549
習題 551
第14章 傳輸層協議 553
14.1 Internet端口與關聯 553
14.2 用戶數據報協議 554
14.2.1 初始化 555
14.2.2 輸出 555
14.2.3 輸入 555
14.2.4 控制操作 556
14.3 傳輸控制協議 556
14.3.1 TCP連接狀態 558
14.3.2 序列變量 561
14.4 TCP算法 562
14.4.1 定時器 563
14.4.2 往返時間的估計 565
14.4.3 建立連接 565
14.4.4 SYN緩存 567
14.4.5 SYN cookie 568
14.4.6 關閉連接 569
14.5 TCP輸入處理 569
14.6 TCP輸出處理 572
14.6.1 發送數據 573
14.6.2 避免糊塗窗口綜合徵 573
14.6.3 避免小數據包 574
14.6.4 延遲確認與窗口更新 575
14.6.5 選擇性確認 575
14.6.6 重傳狀態 577
14.6.7 慢啟動 578
14.6.8 緩衝區與窗口大小 579
14.6.9 使用慢啟動進行擁塞避免 580
14.6.10 快速重傳 581
14.6.11 模塊化擁塞控制 582
14.6.12 Vegas算法 584
14.6.13 Cubic算法 584
14.7 流控制傳輸協議 585
14.7.1 大數據塊 585
14.7.2 關聯建立 586
14.7.3 數據傳輸 587
14.7.4 關聯關閉 589
14.7.5 多宿主和心跳 589
習題 591
第五部分 系統運行
第15章 系統啟動與關閉 594
術語表
參考文獻
· · · · · ·
參考文獻
- ↑ 中國十大出版社-出版社品牌排行榜,買購網
- ↑ 企業簡介,機械工業出版社