第1章 x86硬件基礎 1
1.1 保護模式 1
1.1.1 分頁機製 1
1.1.2 分段機製 7
1.2 係統門 13
1.3 x86的寄存器 14
1.4 典型的PC係統結構簡介 16
第2章 基礎知識 18
2.1 AT&T與Intel匯編語法比較 18
2.2 gcc內嵌匯編 20
2.3 同步與互斥 25
2.3.1 原子操作 25
2.3.2 信號量 27
2.3.3 自鏇鎖 29
2.3.4 RCU機製 35
2.3.5 percpu變量 39
2.4 內存屏障 41
2.4.1 編譯器引起的內存屏障 41
2.4.2 緩存引起的內存屏障 44
2.4.3 亂序執行引起的內存屏障 47
2.5 高級語言的函數調用規範 49
第3章 Linux內核Makefile分析 52
3.1 Linux內核編譯概述 52
3.2 內核編譯過程分析 54
3.3 內核鏈接腳本分析 62
第4章 Linux內核啓動 65
4.1 BIOS啓動階段 65
4.2 實模式setup階段 67
4.3 保護模式startup_ 3277
4.4 內核啓動start_kernel() 84
4.5 內核啓動時的參數傳遞 90
4.5.1 內核參數處理 91
4.5.2 模塊參數處理 95
第5章 內存管理 99
5.1 內存地址空間 99
5.1.1 物理內存地址空間 99
5.1.2 虛擬地址空間 101
5.2 內存管理的基本數據結構 104
5.2.1 物理內存頁麵描述符 104
5.2.2 內存管理區 106
5.2.3 非一緻性內存管理 108
5.3 內存管理初始化 109
5.3.1 bootmemalloctor的初始化 109
5.3.2 頁錶初始化 115
5.3.3 內存管理結構的初始化 118
5.4 內存的分配與迴收 127
5.4.1 夥伴算法 127
5.4.2 SLUB分配器 138
第6章 中斷與異常處理 152
6.1 中斷的分類 152
6.2 中斷的初始化 156
6.2.1 異常初始化 156
6.2.2 中斷的初始化 160
6.2.3 中斷請求服務隊列的初始化 167
6.3 中斷與異常處理 171
6.3.1 特權轉換與堆棧變化 171
6.3.2 中斷處理 172
6.3.3 異常處理 177
6.4 軟件中斷與延遲函數 180
6.4.1 softirq 180
6.4.2 tasklet 185
6.5 中斷與異常返迴 187
6.6 中斷優先級迴顧 191
6.7 關於高級可編程中斷控製器 192
6.7.1 APIC初始化 193
第7章 信號機製 199
7.1 信號機製的管理結構 200
7.2 信號發送 204
7.3 信號處理 210
第8章 係統調用 220
8.1 Libc和係統調用 220
第9章 時鍾機製 226
9.1 clocksource對象 227
9.1.1 clocksource概述 227
9.1.2 clocksource初始化 228
9.2 tickless機製 232
9.2.1 tickless由來 232
9.2.2 clockeventdevice對象概述 234
9.2.3 clockeventdevice對象的初始化 236
9.3 High-ResolutionTimers 247
9.3.1 High-ResolutionTimers管理結構 247
9.3.2 High-ResolutionTimers初始化 252
9.3.3 High-ResolutionTimers操作 258
9.4 時鍾中斷處理 268
9.4.1 時鍾維護 276
9.4.2 進程時間信息統計 281
9.5 軟件定時器 283
9.5.1 基本管理結構 283
9.5.2 初始化 284
9.5.3 注冊與過期處理 287
第10章 進程管理 295
10.1 進程描述符 296
10.1.1 進程狀態 297
10.1.2 進程標識 299
10.1.3 進程的親緣關係 300
10.1.4 進程的內核態堆棧 301
10.1.5 進程的虛擬內存布局 302
10.1.6 進程的文件信息 305
10.2 進程的建立 306
10.2.1 建立子進程的task_struct對象 308
10.2.2 子進程的內存區域 315
10.2.3 子進程的內核態堆棧 323
10.2.4 0號進程的建立 325
10.3 進程切換 327
10.4 進程的退齣 331
10.4.1 do_exit函數 331
10.4.2 task_struct結構的刪除 334
10.4.3 通知父進程 335
10.5 do_wait()函數 338
10.6 程序的加載 344
第11章 調度器 351
11.1 早期的調度器 351
11.2 CFS調度器的虛擬時鍾 353
11.3 CFS調度器的基本管理結構 357
11.4 CFS調度器對象 359
11.5 CFS調度操作 360
11.5.1 update_curr()函數 360
11.5.2 scheduler_tick()函數 362
11.5.3 put_prev_task_fair()函數 364
11.5.4 pick_next_task()函數 366
11.5.5 等待和喚醒操作 368
11.5.6 nice係統調用 373
第12章 文件係統 376
12.1 Ext2的磁盤結構 376
12.2 Ext2的內存結構 385
12.3 虛擬文件係統的管理結構 387
12.3.1 文件係統對象 388
12.3.2 VFS的超級塊 389
12.3.3 VFS的inode結構 400
12.3.4 VFS的文件對象 406
12.3.5 VFS的目錄對象 409
12.3.6 VFS在進程中的文件結構 412
12.4 文件係統的掛載 413
12.5 路徑定位 425
12.6 文件打開與關閉 441
12.7 文件讀寫 449
12.7.1 緩衝區管理 449
12.7.2 文件讀寫操作分析 456
第13章 常用內核分析方法 471
13.1 準確定位同名宏及結構體 471
13.2 準確定位同名函數 473
13.3 利用linkmap文件定位全局變量 474
13.4 準確定位函數調用綫索 476
13.5 SystemTap在代碼分析中的使用 479
· · · · · · (
收起)