求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

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

術語表

參考文獻

· · · · · ·

參考文獻