新到貨2本75折
FreeBSD操作系統設計與實現(原書第2版)

FreeBSD操作系統設計與實現(原書第2版)

  • 定價:1194
  • 優惠價:871039
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

本書由FreeBSD系統的三位元引領者撰寫,在上一版基礎上做了大幅更新,涵蓋FreeBSD5和FreeBSD11之間的所有重大改進,如使用FreeBSDJail的高度可擴展和羽量級虛擬化、使用Xen和Virtio設備半虛擬化的虛擬機器加速、Capsicum沙箱和GELI加密磁片保護以及DTrace內核調試技巧等。
 
全書從介面到內核再到硬體逐層深入,詳細闡述實現每個重要系統元件——進程管理、安全、虛擬記憶體、I/O系統、檔案系統、socketIPC和網路等——所使用的概念、資料結構和演算法。
 

目錄

第一部分 概述
第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
術語表
參考文獻
 

本書遵循早期權威的、完整的關於UNIX系統4.3BSD和4.4BSD版本的設計和實現的描述,這些UNIX系統是由加州大學伯克利分校開發的。自從伯克利在1994年發佈最終版本以來,幾個團隊一直在開發BSD。本書詳細介紹了FreeBSD,這個系統擁有最大的開發人員團體且發行最為廣泛。儘管FreeBSD發行版本在其基本系統中包含了近1000個實用程式,在其ports集合中包含了近25 000個可選實用程式,但本書幾乎完全集中在內核上。
 
類UNIX系統
類UNIX系統包括:傳統的供應商系統,如Solaris和HP-UX;基於Linux的發行版本,如Red Hat、Debian、Suse和Slackware;基於BSD的發行版本,如FreeBSD、NetBSD、OpenBSD和Darwin。它們可以在從智慧手機到最大的超級電腦的各種電腦上運行。它們是大多數多處理器、圖形和向量處理系統選擇的作業系統,並被廣泛用於分時這一最初目的。作為Internet上提供網路服務(從FTP到WWW)的最常用平臺,它們是有史以來開發的最具可攜性的作業系統。這種可攜性既歸功於它們的實現語言C [Kernighan & Ritchie, 1989](它本身就是一種廣泛移植的語言),又歸功於系統的優雅設計。
 
自1969年創始以來[Ritchie & Thompson, 1978],UNIX系統在幾個分分合合的支流中不斷發展。最初的開發人員繼續在AT&T貝爾實驗室開發第9版和第10版UNIX,以及UNIX第9版的後繼版本。與此同時,AT&T在將UNIX System V與Sun Microsystems的基於BSD的SunOS合併以生產Solaris之前,授權將UNIX System V作為產品。第9版UNIX、System V和Solaris都受到了加州大學伯克利分校電腦系統研究小組(CSRG)推出的伯克利軟體發行版本的強烈影響。儘管Linux作業系統是獨立於其他UNIX變體開發的,但它實現了UNIX介面。因此,在其他基於UNIX的平臺上開發的應用程式很容易移植到Linux上運行。
 
伯克利軟體發行版本(BSD)
 
BSD系統是第一個基於UNIX系統並引入許多重要功能的發行版本。這些重要功能包括:
按需分頁的虛擬記憶體支援。
硬體、I/O系統的自動配置。
快速、可恢復的檔案系統。
基於通訊端的進程間通信(IPC)原語。
 
TCP/IP的相關實現。
伯克利發行版本進入了許多供應商的UNIX系統,並被許多其他供應商的開發團隊在內部使用。TCP/IP網路通訊協定套件在4.2BSD和4.3BSD中的實現以及這些系統的應用,在推動TCP/IP網路通訊協定套件成為世界標準方面發揮了關鍵作用。甚至像微軟這樣的非UNIX供應商也在自己的Winsock IPC介面中採用了伯克利通訊端設計。
 
BSD的發佈對POSIX(IEEE std1003.1)作業系統介面標準和相關標準也有很大的影響。這在一些特性上尤為明顯,如可靠信號、作業控制、每個進程的多個訪問組以及目錄操作的常式,都是從BSD中改編後應用於POSIX的。
 
早期的BSD版本包含UNIX許可證代碼,因此要求接收者擁有AT&T原始程式碼許可證才能獲得和使用BSD。1988年,伯克利把它的發行版本分為AT&T授權的和可自由再發行的代碼。可自由再發行的代碼是單獨授權的,任何人都可以獲得、使用和重新分發。1994年伯克利發佈的最後一個可自由再發行的4.4BSD-Lite2版本包含了幾乎整個內核以及所有重要的庫和實用程式。
 
NetBSD和FreeBSD兩個小組萌芽於1993年,並開始支持和分發由伯克利開發的免費可再發行與構建的系統。NetBSD小組強調可攜性和極簡主義的方法,將系統移植到近60個平臺上,他們決心保持系統的精簡以易於相容嵌入式應用程式。FreeBSD小組強調最大限度地支援PC體系結構,推動其系統易於安裝,並向盡可能廣泛的用戶進行推廣。
 
1995年,OpenBSD組從NetBSD組中分離出來,開發了一個強調安全性的發行版本。2003年,Dragonfly組從FreeBSD組中分離出來,開發了一種羽量級的機制來支援多處理的發行版本。多年來,BSD發行版本之間處於良性競爭狀態,許多想法和大量代碼之間經常互通有無。
 
本書內容
本書介紹FreeBSD 11內核的內部結構以及實現FreeBSD系統功能所涉及的概念、資料結構和演算法,從系統調用層向下(從介面到內核,再到硬體本身)涵蓋FreeBSD的內容。該內核包括進程管理、內核安全、虛擬記憶體、I/O系統、檔案系統、通訊端IPC機制和網路通訊協定實現等系統模組。除了與終端介面、系統啟動有關的內容,系統調用層之上的知識,例如與庫、Shell、命令列、程式設計語言和其他使用者介面有關的內容都不在本書範圍之內。本書沿襲了Organick在編寫Multics作業系統書籍時首次採用的組織結構[Organick, 1975],是對現代作業系統的深入研究。
 
在涉及特定硬體時,本書參考了Intel 32位元體系結構和類似的AMD 64位元體系結構。由於FreeBSD加強了在這些體系結構上的開發,它們是獲得FreeBSD最全面支援的體系結構,因此十分便於參考。
 
電腦專業人士閱讀指南
FreeBSD被廣泛應用於全球許多公司的核心基礎體系結構。由於構建過程佔用空間較小,它在嵌入式程式中的應用場景也越來越多。FreeBSD的授權條款不要求對發生變更或功能增強的系統進行發佈,而Linux則要求以原始程式碼形式提供對內核的所有更改和增強。因此,需要控制其智慧財產權發佈的公司會使用FreeBSD構建產品。
 
本書主要針對使用FreeBSD系統工作的專業人員。技術人員和銷售支援人員可以瞭解該系統的能力和局限性,應用程式開發人員可以學習如何有效地和系統進行交互,經驗較少的系統管理員可以學習如何使用FreeBSD內核進行維護、調優和系統組態,系統程式師可以學習如何擴展、增強系統以及與系統交互。
 
不論是作業系統的開發者、系統程式師、UNIX應用程式開發人員、系統管理員還是沒有相關經驗的新手,都可以從本書中學習作業系統的相關知識。在閱讀本書的同時可以結合系統原始程式碼一起學習,這樣有助於理解得更透徹。本書既不是UNIX程式設計手冊,也不是用戶教程,如果熟悉某些版本的UNIX系統(參見Stevens[1992])和C程式設計語言(參見Kernighan & Ritchie[1989])的使用將會非常有幫助。FreeBSD手冊全面介紹了FreeBSD的創建、操作和程式設計[FreeBSD Mall, 2004; FreeBSD.org, 2014]。PC-BSD發行版本提供了FreeBSD安裝包,旨在使桌上型電腦和筆記型電腦用戶能夠輕鬆安裝和使用[Lavigne,2010;PC-BSD.org,2014]。
 
作業系統課程用書指南
本書適合用作參考書,為作業系統基礎課程的初級教材提供背景知識。本書不應用作作業系統入門教材,讀者應當已經瞭解過諸如“記憶體管理”“進程調度”“I/O系統”[Silberschatz等,2012]“網路通訊協定”[Comer,2000; Stallings,2000;Tanenbaum,2010]等術語,這些對於理解後面的某些章節會很有幫助。
 
本書可與FreeBSD系統的代碼一起使用,以用於更高級的作業系統課程。 學生作業內容可以包括對關鍵系統元件(如調度程式、分頁守護程式、檔案系統、執行緒信號、各種網路層、I/O管理等)的更改或替換。學生需要掌握如何從正在運行的內核中載入、替換和卸載模組,這樣無須反復編譯和重啟系統,從而提升實驗效率。通過使用真實的作業系統,學生可以直接測試其更改的效果。由於經歷了長達35年的代碼評審並且嚴格遵循編碼規範,FreeBSD內核比大多數相似的軟體專案更加乾淨、模組化、易於理解和修改。
 
每章的末尾都有習題,習題分為三個類別:不帶星號的習題可以直接從書中找到答案;帶有一個星號的習題需要根據書中介紹的概念進行推理,並給出解題步驟;帶有兩個星號的習題表示主要的設計項目或未解決的研究問題。
 
章節結構
本書主要討論作業系統的哲學、設計和實現的細節。通常來說,我們對這些內容的討論會從系統調用級別開始,然後才討論內核。書中的圖表用來闡明資料結構和控制流程,類似於用C語言的偽代碼來闡明演算法。
 
本書分為五部分,主要內容如下:
第一部分,概述。前三章主要介紹理解作業系統和本書其他部分內容所需的背景知識。第1章概述系統的發展歷史,強調系統的研究方向。第2章描述系統提供的服務,並概述內核的內部組織,討論系統開發過程中做出的設計決策。第3章說明系統調用如何執行,並詳細描述內核的一些基本服務。
 
第二部分,進程。第4章通過描述進程的結構,調度執行執行緒的演算法(這些執行緒構成了進程),以及系統中為確保駐留在內核中的資料結構的一致性訪問而設計的同步機制,為之後的章節奠定基礎。第5章介紹整個內核使用的安全性框架,並詳細介紹用於控制進程以安全獲取系統資源的方式,以及進程間互訪的安全性措施。第6章詳細討論虛擬記憶體管理系統。
 
第三部分,I/O系統。第7章介紹I/O的系統介面,並描述用來支援該介面的設施的結構。之後的4章詳細介紹I/O系統的主要內容。第8章描述Intel和AMD系統的I/O體系結構,並介紹如何管理I/O子系統,以及內核最初如何映射,後來又如何管理所連接設備的接入與斷開。第9章詳細介紹實現原始本地檔案系統的資料結構和演算法(該檔案系統直接與應用程式交互),以及如何將本地檔案系統與第8章中描述的設備介面相連接。第10章介紹Zettabyte檔案系統(已從OpenSolaris作業系統添加到FreeBSD)。第11章分別從伺服器端和用戶端角度介紹新的4.2版本的網路檔案系統。
 
第四部分,進程間通信。第12章描述在相關/不相關進程之間提供通信的機制。第13章和第14章緊密相關,因為後者使用了前者中說明的功能,例如協定中使用的UDP、TCP和SCTP等。
 
第五部分,系統運行。第15章從進程級別的角度描述從內核初始化到使用者登錄的系統初始化過程。
 
建議讀者按照以上各章的順序進行閱讀,但第一部分以外的其他部分彼此獨立,可以分開閱讀。第15章應該最後閱讀,但對於有經驗的讀者,單獨閱讀也是有幫助的。
 
本書的最後是術語表。每一章都包含參考文獻,其中引用了相關的材料。
 
致謝
 
我們要特別感謝Matt Ahrens(Delphix),感謝他對ZFS的工作原理提供了寶貴的意見,感謝他通過無數封電子郵件回答了我們關於ZFS如何工作以及為何要做出某些特定設計決策的問題。
 
我們也要感謝以下人員,感謝他們對內核的各個方面進行綜述,他們在這些方面都有著深入的研究。感謝John Baldwin(FreeBSD專案)在鎖、調度和虛擬記憶體方面的工作,感謝Alan Cox(萊斯大學)在虛擬記憶體方面的工作,感謝Jeffrey Roberson(EMC)在ULE調度器方面的工作,感謝Randall Stewart(Adara Networks)在SCTP實現方面的工作。
 
我們同時感謝以下人員,他們都閱讀並評價了本書各章的初稿:Eric Allman(加州大學伯克利分校),Jonathan Anderson(紐芬蘭紀念大學),David Chisnall(劍橋大學),Paul Dagnelie(Delphix),Brooks Davis(SRI國際),Pawe Jakub Dawidek(Wheel Systems),Peter Grehan(FreeBSD項目),Scott Long(Netflix),Jake Luck,Rick Macklem(FreeBSD項目),Ilias Marinos(劍橋大學),Roger Pau Monné(Citrix),Mark Robert Vaughan Murray,Edward Tomasz Napieraa(FreeBSD項目),Peter G. Neumann(SRI國際),Rui Paulo,Luigi Rizzo(義大利比薩大學),Margo Seltzer(哈佛大學),Keith Sklower(加州大學伯克利分校),Lawrence Stewart(斯威本科技大學),Michael Tuexen(明斯特應用科學大學),Bryan Venteicher(NetApp),Erez Zadok(石溪大學),Bjoern A. Zeeb(FreeBSD項目)。
 
我們還要感謝目前已退休的具有25年經驗的資深編輯Peter Gordon。儘管我們拖延了好幾年,但他依然相信我們有能力完成這本書。同樣要感謝我們的新編輯Debra Williams,她見證了本項目的完成,並在我們完成終稿後加快了出版速度。感謝Addison-Wesley出版集團和Pearson教育的所有專業人員,他們幫助我們完成了本書:執行編輯John Fuller,製作編輯Mary Kesel Wilson,封面設計師Chuti Prasertsith,文字編輯Deborah Thompson,校對員Melissa Panagos。最後,我們要感謝Jaap Akkerhuis的貢獻,感謝他為BSD類書籍設計了troff宏。
 
本書採用James Clark所實現的pic、tbl、eqn和groff等程式進行編寫。索引是由Jon Bentley和Brian Kernighan編寫的索引程式所產生的awk腳本生成的[Bentley & Kernighan, 1986]。大部分的版式是用xfig創建的,圖形佈局和未排滿行的消除是用groff宏處理的,但是孤行的消除以及偶數頁面底部的製作都必須手動完成。
 

詳細資料

  • ISBN:9787111689973
  • 規格:平裝 / 592頁 / 16k / 19 x 26 x 2.96 cm / 普通級 / 單色印刷 / 1-1
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 從「格」的概念出發|
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 針灸匠張寶旬
  • 手作新書79折起
  • 浪漫小說精選3本72折