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