●第1章 簡介和概述1
1.1 內核的任務2
1.2 實現策略2
1.3 內核的組成部分3
1.3.1 進程、進程切換、調度3
1.3.2 UNI程4
1.3.3 地址空間與特權級別6
1.3.4 頁表9
1.3.5 物理內存的分配11
1.3.6 計時13
1.3.7 繫統調用13
1.3.8 設備驅動程序、塊設備和字符設備14
1.3.9 網絡14
1.3.10 文件繫統14
1.3.11 模塊和熱插撥15
1.3.12 緩存16
1.3.13 鏈表處理16
1.3.14 對像管理和引用計數17
1.3.15 數據類型20
1.3.16 本書的局限性22
1.4 為什麼內核是特別的23
1.5 行文注記23
1.6 小結27
第2章 進程管理和調度28
2.1 進程優先級28
2.2 進程生命周期30
2.3 進程表示32
2.3.1 進程類型37
2.3.2 命名空間37
2.3.3 進程ID號43
2.3.4 進程關繫49
2.4 進程管理相關的繫統調用50
2.4.1 進程復制50
2.4.2 內核線程62
2.4.3 啟動新程序63
2.4.4 退出進程66
2.5 調度器的實現67
2.5.1 概觀67
2.5.2 數據結構69
2.5.3 處理優先級74
2.5.4 核心調度器79
2.6 接近公平調度類84
2.6.1 數據結構85
2.6.2 CFS操作85
2.6.3 隊列操作89
2.6.4 選擇下一個進程91
2.6.5 處理周期性調度器92
2.6.6 喚醒搶占93
2.6.7 處理新進程93
2.7 實時調度類94
2.7.1 性質94
2.7.2 數據結構95
2.7.3 調度器操作96
2.8 調度器增強97
2.8.1 SMP調度97
2.8.2 調度域和控制組101
2.8.3 內核搶占和低延遲相關工作102
2.9 小結106
第3章 內存管理107
3.1 概述107
3.2 (N)UMA模型中的內存組織109
3.2.1 概述109
3.2.2 數據結構111
3.3 頁表123
3.3.1 數據結構124
3.3.2 頁表項的創建和操作129
3.4 初始化內存管理129
3.4.1 建立數據結構130
3.4.2 特定於體繫結構的設置135
3.4.3 啟動過程期間的內存管理153
3.5 物理內存的管理159
3.5.1 伙伴繫統的結構159
3.5.2 避免碎片161
3.5.3 初始化內存域和結點數據結構167
3.5.4 分配器API172
3.5.5 分配頁177
3.5.6 釋放頁192
3.5.7 內核中不連續頁的分配195
3.5.8 內核映射201
3.6 slab分配器205
3.6.1 備選分配器206
3.6.2 內核中的內存管理207
3.6.3 slab分配的原理209
3.6.4 實現212
3.6.5 通用緩存226
3.7 處理器高速緩存和TLB控制228
3.8 小結230
第4章 進程虛擬內存231
4.1 簡介231
4.2 進程虛擬地址空間231
4.2.1 進程地址空間的布局232
4.2.2 建立布局234
4.3 內存映射的原理237
4.4 數據結構238
4.4.1 樹和鏈表238
4.4.2 虛擬內存區域的表示239
4.4.3 優先查找樹241
4.5 對區域的操作244
4.5.1 將虛擬地址關聯到區域245
4.5.2 區域合並246
4.5.3 插入區域247
4.5.4 創建區域248
4.6 地址空間250
4.7 內存映射251
4.7.1 創建映射251
4.7.2 刪除映射253
4.7.3 非線性映射254
4.8 反向映射257
4.8.1 數據結構258
4.8.2 建立逆向映射259
4.8.3 使用逆向映射259
4.9 堆的管理261
4.10 缺頁異常的處理263
4.11 用戶空間缺頁異常的校正268
4.11.1 按需分配/調頁269
4.11.2 匿名頁271
4.11.3 寫時復制271
4.11.4 獲取非線性映射272
4.12 內核缺頁異常272
4.13 在內核和用戶空間之間復制數據274
4.14 小結276
第5章 鎖與進程間通信277
5.1 控制機制277
5.1.1 競態條件277
5.1.2 臨界區278
5.2 內核鎖機制279
5.2.1 對整數的原子操作280
5.2.2 自旋鎖282
5.2.3 信號量283
5.2.4 RCU機制284
5.2.5 內存和優化屏障286
5.2.6 讀者/寫者鎖287
5.2.7 大內核鎖288
5.2.8 互斥量288
5.2.9 近似的per-CPU計數器290
5.2.10 鎖競爭與細粒度鎖291
5.3 SystemV進程間通信292
5.3.1 SystemV機制292
5.3.2 信號量292
5.3.3 消息隊列300
5.3.4 共享內存303
5.4 其他IPC機制303
5.4.1 信號303
5.4.2 管道和套接字310
5.5 小結311
第6章 設備驅動程序312
6.1 I/O體繫結構312
6.2 訪問設備316
6.2.1 設備文件316
6.2.2 字符設備、塊設備和其他設備317
6.2.3 使用ioctl進行設備尋址319
6.2.4 主從設備號的表示320
6.2.5 注冊321
6.3 與文件繫統關聯324
6.3.1 inode中的設備文件成員324
6.3.2 標準文件操作325
6.3.3 用於字符設備的標準操作325
6.3.4 用於塊設備的標準操作325
6.4 字符設備操作326
6.4.1 表示字符設備326
6.4.2 打開設備文件326
6.4.3 讀寫操作328
6.5 塊設備操作329
6.5.1 塊設備的表示330
6.5.2 數據結構331
6.5.3 向繫統添加磁盤和分區338
6.5.4 打開塊設備文件339
6.5.5 請求結構341
6.5.6 BIO343
6.5.7 提交請求345
6.5.8 I/O調度350
6.5.9 ioctl的實現352
6.6 資源分配353
6.6.1 資源管理353
6.6.2 I/O內存355
6.6.3 I/O端口357
6.7 總線繫統358
6.7.1 通用驅動程序模型358
6.7.2 PCI總線363
6.7.3 USB370
6.8 小結376
第7章 模塊377
7.1 概述377
7.2 使用模塊378
7.2.1 添加和移除378
7.2.2 依賴關繫380
7.2.3 查詢模塊信息381
7.2.4 自動加載382
7.3 插入和刪除模塊384
7.3.1 模塊的表示385
7.3.2 依賴關繫和引用389
7.3.3 模塊的二進制結構391
7.3.4 插入模塊396
7.3.5 移除模塊403
7.4 自動化與熱插撥404
7.4.1 kmod實現的自動加載404
7.4.2 熱插撥405
7.5 版本控制408
7.5.1 校驗和方法408
7.5.2 版本控制函數411
7.6 小結412
第8章 虛擬文件繫統413
8.1 文件繫統類型413
8.2 通用文件模型414
8.2.1 inode415
8.2.2 鏈接416
8.2.3 編程接口416
8.2.4 將文件作為通用接口417
8.3 VFS的結構417
8.3.1 結構概觀418
8.3.2 inode419
8.3.3 特定於進程的信息423
8.3.4 文件操作427
8.3.5 目錄項緩存431
8.4 處理VFS對像436
8.4.1 文件繫統操作436
8.4.2 文件操作450
8.5 標準函數456
8.5.1 通用讀取例程457
8.5.2 失效機制459
8.5.3 權限檢查461
8.6 小結463
第9章 Ext文件繫統族464
9.1 簡介464
9.2 Ext2文件繫統465
9.2.1 物理結構465
9.2.2 數據結構470
9.2.3 創建文件繫統484
9.2.4 文件繫統操作485
9.3 Ext3文件繫統507
9.3.1 概念508
9.3.2 數據結構509
9.4 小結511
第10章 無持久存儲的文件繫統512
10.1 proc文件繫統512
10.1.1 /proc的內容513
10.1.2 數據結構519
10.1.3 初始化522
10.1.4 裝載proc文件繫統523
10.1.5 管理/proc數據項525
10.1.6 讀取和寫入信息528
10.1.7 進程相關的信息530
10.1.8 繫統控制機制535
10.2 簡單的文件繫統542
10.2.1 順序文件542
10.2.2 用libfs編寫文件繫統546
10.2.3 調試文件繫統547
10.2.4 偽文件繫統549
10.3 sysfs549
10.3.1 概述550
10.3.2 數據結構550
10.3.3 裝載文件繫統554
10.3.4 文件和目錄操作556
10.3.5 向sysfs添加內容562
10.4 小結564
第11章 擴展屬性和訪問控制表565
11.1 擴展屬性565
11.1.1 到虛擬文件繫統的接口566
11.1.2 Ext3中的實現570
11.1.3 Ext2中的實現576
11.2 訪問控制表577
11.2.1 通用實現577
11.2.2 Ext3中的實現580
11.2.3 Ext2中的實現585
11.3 小結585
……
第12章 網絡586
第13章 繫統調用655
第14章 內核活動678
第15章 時間管理714
第16章 頁緩存和塊緩存761
第17章 數據同步793
第18章 頁面回收和頁交換821
第19章 審計882
附錄A 體繫結構相關知識899
附錄B 使用源代碼919
附錄C 有關C語言的注記947
附錄D 繫統啟動985
附錄E ELF二進制格式
附錄F 內核開發過程
參考文獻