第一篇基本框架第1章Linux內核概述 3
1.1UNIX與Linux 3
1.1.1UNIX 3
1.1.2Linux 3
1.1.3宏內核與微內核 6
1.1.4Linux內核源碼及版本 6
1.2Linux內核模型 11
1.2.1多視角下的內核 11
1.2.2功能模型 14
1.2.3內存模型 15
1.2.4時空模型 16
1.2.5特權模型 17
1.3本書局限性 18
小結 18
第2章進程影像 20
2.1從源代碼到進程 20
2.1.1源代碼、目標文件 20
2.1.2可執行文件與進程影像 26
2.2proc中的進程 32
2.2.1進程內存空間 32
2.2.2進程運行狀態等信息 33
2.3進程空間 35
2.3.1進程空間描述符 36
2.3.2虛存區域VMA 40
2.3.3VMA屬性 45
2.4ELF可執行文件裝入過程 48
2.4.1ELF裝入函數 49
2.4.2ELF格式 49
2.5進程空間的動態變化 54
2.5.1VMA上的操作 54
2.5.2文件映射 55
2.5.3堆的調整 58
2.5.4棧的變化 60
2.6并發的進程空間 60
小結 61
第3章虛擬空間的物理支撐 63
3.1物理內存組織與管理 64
3.1.1節點與內存域 64
3.1.2物理頁幀 79
3.1.3buddy系統 84
3.1.4頁幀遷移 94
3.1.5內存熱插拔 98
3.2地址映射與頁表 99
3.2.1分頁機制與頁表 99
3.2.2缺頁異常 103
3.3內核空間 104
3.3.1一致映射與高端內存 104
3.3.2一致內存分配 108
3.3.3非一致內存分配 109
3.3.4slub分配器 115
小結 130
第4章進程組織與基礎行為 131
4.1進程組織管理 131
4.1.1PCB進程控制塊 131
4.1.2命名空間 135
4.1.3進程標識 141
4.1.4進程間關系 148
4.1.5進程資源限制 151
4.2進程創建與撤銷 152
4.2.1進程創建 152
4.2.2execve系統調用 159
4.2.3內核線程 160
4.2.4Linux進程樹 162
4.2.5進程的撤銷 167
4.3進程切換 167
4.3.1切換時機 168
4.3.2切換過程 169
4.3.3切換示例 178
小結 181
第5章進程調度與負載均衡 193
5.1調度與均衡基本框架 193
5.2進程狀態與轉換 194
5.2.1進程調度狀態 194
5.2.2進程狀態變遷 196
5.3進程調度 198
5.3.1調度框架 198
5.3.2完全公平調度 215
5.3.3實時調度 230
5.3.4STOP和IDLE調度類 234
5.3.5調度控制與proc接口 236
5.4負載均衡 241
5.4.1處理器層次結構 242
5.4.2調度的層次管理 243
5.4.3CFS任務的負載均衡 250
5.4.4實時負載均衡 254
小結 258
第6章進程間通信與同步 259
6.1管道通信 260
6.1.1無名管道 260
6.1.2命名管道 261
6.1.3管道數據結構 261
6.1.4管道操作 266
6.2SystemVIPC 269
6.2.1IPC標識與命名空間 269
6.2.2IPC公共框架 275
6.2.3IPC信號量 279
6.2.4IPC消息隊列 283
6.2.5IPC共享內存 287
6.3信號 290
6.3.1信號分類 290
6.3.2數據結構 294
6.3.3信號產生與發送 302
6.3.4信號的遞交和處理 305
小結 312
第7章內核活動 313
7.1中斷分類 313
7.1.1x86的中斷和異常 314
7.1.2后半部機制與軟中斷 315
7.1.3中斷相關概念的關系 315
7.2中斷處理 316
7.2.1中斷號 317
7.2.2中斷描述符表 320
7.2.3公共入口 325
7.2.4異常處理 329
7.3高層中斷處理 332
7.3.1轉向高層處理 333
7.3.2中斷的高層數據結構 336
7.3.3中斷返回處理 342
7.3.4中斷的線程化 349
7.4中斷嵌套與中斷管理 350
7.4.1中斷嵌套與中斷上下文 350
7.4.2中斷管理 353
7.5軟中斷和tasklet 355
7.5.1中斷的下半部 355
7.5.2軟中斷執行時機 356
7.5.3相關數據結構 360
7.5.4軟中斷的執行 361
7.5.5軟中斷的相關操作 363
7.5.6tasklet 365
7.6工作隊列 369
7.6.1工作隊列機制 369
7.6.2cmwq數據結構 371
7.6.3工作項 371
7.6.4cmwq工作隊列 375
7.6.5工作者池worker_pool 383
7.6.6并發度、應急處理等 386
7.7系統調用 388
7.7.1POSIXAPI、C庫和系統調用 388
7.7.2系統調用的實現 389
小結 399
第8章時間管理 400
8.1時間管理框架 400
8.1.1基本概念 400
8.1.2時間中斷和事件 406
8.1.3clock_event_device與tick_device 407
8.1.4TIMER_SOFTIRQ軟中斷 413
8.1.5timekeeper 414
8.2定時器 416
8.2.1低分辨率定時器 416
8.2.2高精度定時器 419
8.2.3模擬tick事件 422
8.2.4通知鏈技術 423
小結 424
第9章內核并發與同步 426
9.1同步的需求 426
9.1.1內核并發情形 426
9.1.2內核搶占 429
9.2內核共享變量的保護 432
9.2.1被保護對象 432
9.2.2保護原則 433
9.2.3禁止內核并發 435
9.3內核同步手段 437
9.3.1原子操作 437
9.3.2自旋鎖、讀寫鎖和順序鎖 439
9.3.3RCU機制 444
9.3.4順序和屏障 447
9.3.5信號量與互斥量 448
9.3.6等待隊列與完成變量 452
9.3.7每CPU變量 455
小結 458
第二篇盤根錯節的文件系統
第10章文件系統 461
10.1文件系統的抽象層次 461
10.1.1進程視角下的文件 462
10.1.2VFS虛擬文件系統 468
10.1.3多角度分層模型 472
10.2VFS核心對象 475
10.2.1文件對象 475
10.2.2目錄項對象 479
10.2.3索引節點對象 484
10.2.4超級塊對象 490
10.3文件系統類型與掛載 495
10.3.1文件系統類型與注冊 495
10.3.2掛載操作 503
10.3.3掛載模式 513
10.3.4特殊文件系統 519
小結 525
第11章頁緩存和塊緩存 526
11.1頁高速緩存 527
11.1.1address_space 528
11.1.2頁高速緩存的組織 530
11.1.3反向映射 534
11.2塊高速緩存 540
11.2.1塊緩存 540
11.2.2LRU塊緩存 542
11.2.3塊緩存操作 543
小結 547
第12章VFS的文件操作 548
12.1VFS系統調用 548
12.2open()與close()系統調用 549
12.2.1open的框架 549
12.2.2文件定位過程 552
12.2.3close()系統調用 558
12.3讀/寫系統調用 558
12.3.1入口代碼 560
12.3.2通用write寫例程 568
12.3.3通用read讀例程 570
12.3.4其他讀寫細節 583
12.3.5向BIO層提交請求 587
小結 588
第13章ext2文件系統 590
13.1ext2磁盤數據結構 590
13.1.1磁盤分區的組織 590
13.1.2塊組描述符和位圖 591
13.1.3盤上和內存數據結構 592
13.2ext2超級塊 593
13.2.1ext2超級塊數據結構 593
13.2.2掛載與訪問 597
13.3ext2索引節點 598
13.3.1盤上ext2索引節點 599
13.3.2內存ext2索引節點 601
13.3.3inode_operations 603
13.3.4ext2地址空間與文件操作 604
13.4目錄及目錄項 607
13.4.1ext2_dir_entry 607
13.4.2ext2_lookup() 609
小結 610
第14章頁緩存同步(回寫) 611
14.1同步/回寫、交換與回收 611
14.2臟頁同步(回寫) 613
14.2.1回寫機制演變 613
14.2.2同步時機與框架 615
14.2.3基本數據結構 617
14.3回寫接口 627
14.3.1sync系列系統調用 627
14.3.2sys_sync() 628
14.3.3sys_syncfs 633
14.3.4單個文件的同步 635
14.3.5被動回寫 637
14.4回寫工作隊列 638
14.4.1初始化 638
14.4.2工作隊列處理函數 640
14.5回寫操作 643
14.5.1do_writepages() 644
14.5.2ext2_writepages() 645
14.5.3回寫等待 647
小結 649
第15章內存回收與交換 650
15.1頁幀回收 650
15.1.1直接釋放 650
15.1.2LRU頁幀組織 651
15.1.3PFRA回收算法 655
15.2核心回收操作 659
15.2.1shrink_zone() 659
15.2.2shrink_slab() 666
15.2.3解除頁表映射 667
15.3交換 667
15.3.1交換功能 668
15.3.2交換分區 668
15.3.3交換緩存 673
小結 675
第16章設備管理 676
16.1設備管理組織 676
16.1.1設備驅動模型 677
16.1.2sysfs 678
16.1.3基礎組件 679
16.1.4容器 682
16.2設備的VFS接口 688
16.2.1設備文件 689
16.2.2從VFS中訪問設備 691
16.3字符設備 693
16.3.1設備的散列組織 694
16.3.2初始化與注冊 695
16.3.3打開字符設備 696
16.4PCI設備 698
16.4.1pci_bus_type和pci_bus 699
16.4.2pci_driver 700
16.4.3pci_dev 701
16.4.4uevent 704
小結 705
第17章塊設備 706
17.1基本概念 706
17.1.1塊設備層 706
17.1.2傳送單位 708
17.2塊設備層組件 709
17.2.1磁盤與磁盤分區 709
17.2.2塊設備 712
17.2.3請求隊列 715
17.3提交請求及處理 728
17.3.1plug/unplug機制 728
17.3.2提交請求 733
17.3.3提交到驅動程序 742
17.3.4硬盤的request_fn 744
17.3.5中斷處理 746
17.4IO調度 749
17.4.1IO調度器 749
17.4.2調度器數據結構 751
17.5初始化及注冊 754
17.5.1塊設備初始化 754
17.5.2硬盤初始化 759
小結 764
附錄 765
后記 774