《精通Linux內核開發(fā)》介紹了Linux內核、內核的內部編排與設計,以及內核的各個核心子系統(tǒng)等知識。本書分為11章,具體內容包括:進程、地址空間和線程;進程調度器;信號管理;內存管理和分配器;文件系統(tǒng)和文件I/O;進程間通信;虛擬內存管理;內核同步和鎖;中斷和延遲工作;時鐘和時間管理;模塊管理。
《精通Linux內核開發(fā)》篇幅短小精悍,通過大量代碼輔助介紹Linux內核的相關開發(fā)工作。通過學習本書,讀者可以深入理解Linux內核的核心服務與機制,了解這個集中了集體智慧的Linux內核在保持其良好設計的同時,是如何保持其優(yōu)雅特性的。
《精通Linux內核開發(fā)》適合Linux內核開發(fā)人員、底層開發(fā)人員閱讀,還適合希望深入理解Linux內核及其各組成部分的系統(tǒng)開發(fā)人員學習。高校軟件工程專業(yè)的學生也可以將本書當作了解Linux內核設計原理的參考指南。
1.本書講解了Linux內核、內核的內部編排和設計,以及內核的各個核心子系統(tǒng)等知識,旨在幫助讀者深入理解Linux內核。
2.本書還介紹了關鍵的內核代碼、核心數(shù)據(jù)結構、函數(shù)、宏,以便讀者讓透徹地理解Linux內核的核心服務和機制。
3.本書篇幅短小精悍,內容翔實,通過大量代碼輔助介紹Linux內核的相關開發(fā)工作。
4.本書適合Linux內核開發(fā)人員、底層開發(fā)人員及希望深入理解Linux內核的系統(tǒng)開發(fā)人員學習。
Raghu Bharadwaj是Linux內核領域的顧問、貢獻者兼企業(yè)培訓師,具有近20年的從業(yè)經(jīng)驗。他是一個狂熱的內核愛好者,自20世紀90年代后期以來就一直密切關注Linux內核的發(fā)展。他還是TECH VEDA公司的創(chuàng)辦人,該公司以技術支持、內核貢獻和培訓的形式,專門從事與Linux內核有關的工程和技能服務。他對Linux有獨到的理解和闡述,而且因為對軟件設計和操作系統(tǒng)架構的狂熱而得到了客戶的特別關注。在向從事Linux內核、Linux驅動以及嵌入式Linux等工作的工程團隊提供定制的且面向解決方案的培訓計劃這一方面,Raghu頗有心得。他所服務的客戶有Xilinx(賽靈思)、通用、佳能、富士通、UTC(美國聯(lián)合技術公司)、TCS(印度塔塔咨詢服務公司)、博通、Sasken(印度薩斯肯通訊技術公司)、高通、Cognizant(高知特信息技術公司)、意法半導體、Stryker(史賽克)和Lattice(萊迪斯)半導體等公司。
第 1章 進程、地址空間和線程 1
1.1 進程 1
1.1.1 所謂地址空間的錯覺 2
1.1.2 內核空間和用戶空間 3
1.2 進程描述符 4
1.2.1 進程屬性:關鍵元素 5
1.2.2 進程關系:關鍵元素 8
1.2.3 調度屬性:關鍵元素 9
1.2.4 進程限制:關鍵元素 9
1.2.5 文件描述符表:關鍵元素 11
1.2.6 信號描述符:關鍵元素 11
1.3 內核棧 12
1.4 棧溢出問題 16
1.5 進程創(chuàng)建 17
1.5.1 fork() 17
1.5.2 寫時復制(COW) 18
1.5.3 exec 18
1.5.4 vfork() 19
1.5.5 Linux線程支持 19
1.6 內核線程 21
1.7 進程狀態(tài)和終止 29
1.7.1 wait 29
1.7.2 exit 29
1.8 命名空間和cgroup 30
1.8.1 掛載命名空間 30
1.8.2 UTS命名空間 31
1.8.3 IPC命名空間 31
1.8.4 PID命名空間 31
1.8.5 網(wǎng)絡命名空間 31
1.8.6 用戶命名空間 31
1.8.7 cgroup命名空間 32
1.8.8 控制組(cgroup) 32
1.9 小結 33
第 2章 進程調度器 34
2.1 進程調度器 34
2.2 Linux進程調度器設計 35
2.3 運行隊列 39
2.4 調度入口 41
2.5 進程優(yōu)先級 43
2.6 調度類 44
2.7 完全公平調度類(CFS) 44
2.7.1 CFS計算優(yōu)先級和時間片 45
2.7.2 CFS運行隊列 45
2.7.3 組調度 46
2.7.4 多核系統(tǒng)下的調度實體 47
2.7.5 調度策略 48
2.8 實時調度類 49
2.8.1 FIFO 49
2.8.2 RR 49
2.8.3 實時組調度 50
2.8.4 deadline調度類(零散任務模型的deadline調度) 50
2.9 調度相關的系統(tǒng)調用 51
2.10 進程搶占 53
2.11 小結 54
第3章 信號管理 55
3.1 信號 55
3.2 信號管理API 58
3.2.1 程序發(fā)出信號 61
3.2.2 等待排隊信號 62
3.3 信號數(shù)據(jù)結構 62
3.3.1 信號描述符 63
3.3.2 被阻塞和掛起的隊列 64
3.3.3 信號處理程序描述符 65
3.4 信號生成和傳遞 66
3.4.1 信號生成調用 66
3.4.2 信號傳遞 69
3.4.3 執(zhí)行用戶模式處理程序 74
3.4.4 設置用戶模式處理程序幀 75
3.5 重新啟動被中斷的系統(tǒng)調用 78
3.6 小結 80
第4章 內存管理和分配器 81
4.1 初始化操作 81
4.2 區(qū)域和節(jié)點 87
4.2.1 內存區(qū)域 87
4.2.2 內存節(jié)點 89
4.3 內存分配 97
4.3.1 頁幀分配器 98
4.3.2 GFP掩碼 105
4.3.3 slab分配器 110
4.3.4 vmalloc 122
4.3.5 連續(xù)內存分配器(CMA) 124
4.4 小結 125
第5章 文件系統(tǒng)和文件I/O 126
5.1 文件系統(tǒng)—高層視圖 126
5.1.1 元數(shù)據(jù) 127
5.1.2 操作 132
5.1.3 附加功能 134
5.2 Linux內核中的文件系統(tǒng) 135
5.3 通用文件系統(tǒng)接口 138
5.4 特殊文件系統(tǒng) 153
5.4.1 procfs 154
5.4.2 sysfs 156
5.4.3 debugfs 157
5.5 小結 157
第6章 進程間通信 158
6.1 管道和FIFO 158
6.2 消息隊列 163
6.2.1 System V消息隊列 163
6.2.2 POSIX消息隊列 165
6.3 共享內存 167
6.3.1 System V共享內存 167
6.3.2 POSIX共享內存 170
6.4 信號量 171
6.4.1 System V信號量 171
6.4.2 POSIX信號量 173
6.5 小結 174
第7章 虛擬內存管理 175
7.1 進程地址空間 175
7.1.1 進程內存描述符 177
7.1.2 頁表 193
7.2 小結 195
第8章 內核同步和鎖 196
8.1 原子操作 196
8.1.1 原子整數(shù)操作 197
8.1.2 原子位操作 198
8.2 排斥鎖 199
8.2.1 自旋鎖 199
8.2.2 互斥鎖 207
8.2.3 信號量 217
8.2.4 順序鎖 221
8.2.5 完成鎖 223
8.3 小結 226
第9章 中斷和延遲工作 227
9.1 中斷信號和向量 227
9.2 可編程中斷控制器 229
9.2.1 中斷控制器操作 230
9.2.2 IRQ描述符表 232
9.3 高級中斷管理接口 235
9.3.1 注冊一個中斷處理程序 235
9.3.2 注銷一個中斷處理程序 237
9.3.3 線程化中斷處理程序 237
9.3.4 控制接口 240
9.3.5 中斷棧 241
9.4 延遲工作 241
9.4.1 softirq 242
9.4.2 tasklet 244
9.4.3 工作隊列 248
9.5 小結 252
第 10章 時鐘和時間管理 253
10.1 時間表示 253
10.2 硬件抽象 257
10.3 Linux計時數(shù)據(jù)結構體、宏以及輔助函數(shù) 260
10.3.1 jiffies 260
10.3.2 timeval和timespec 262
10.3.3 跟蹤和維護時間 264
10.3.4 節(jié)拍和中斷處理 265
10.3.5 節(jié)拍設備 267
10.4 軟件定時器和延遲函數(shù) 267
10.4.1 動態(tài)定時器 268
10.4.2 帶有動態(tài)定時器的競爭條件 270
10.4.3 動態(tài)定時器處理 271
10.4.4 延遲函數(shù) 271
10.5 POSIX時鐘 272
10.6 小結 273
第 11章 模塊管理 274
11.1 內核模塊 274
11.1.1 LKM的要素 274
11.1.2 加載和卸載操作 277
11.2 小結 288