Linux技術內幕(2017年清華大學出版社出版的圖書)

Linux技術內幕(2017年清華大學出版社出版的圖書)

本詞條是多義詞,共2個義項
更多義項 ▼ 收起列表 ▲

(1)內容全面,全書分成兩篇,第一篇是Linux基本框架,第二篇是Linux檔案系統及相關內容。(2)表述清晰明了,以記憶體模型和時空模型為主要參考來分析各章的相關內容,給出了比較直觀的圖示。(3)對希望了解Linux核心和相關開發人員也非常有參考價值。

基本介紹

內容簡介,圖書目錄,

內容簡介

本書內容分成兩篇,篇是基本框架,第白朵二篇是檔案系統及相關內容。在篇的各章中:第1章先對Linux進行簡要介紹並給出本書分析時所用的模型;第2章從C語言程式、執行檔到進程的虛存籃碑蜜空間影像的全過程作為起點,給讀者建立起進程用戶空間管理的概念;然後第3章討論物理頁幀如何支撐這些虛存空間,並且討論了與物理空間一致的核心空辯贈辣雄間的管理;接著第4章就是進程的概念、進程的組織、進程切換和進程的創建撤銷等活動;第5章專門討論進程調度和負載均衡問題;後面4章繼續討論進程間通信、系統調用、核心的並發活動和同步問題。第二篇開始討論盤根錯節的檔案系統:先在第10章分析檔案系統和VFS的基本概念;臘夜定然後在第11章討論頁高速快取及塊緩希兆駝存;第12章海雅戒分析了VFS的通用檔案訪問操作;第13章討論ext2檔案系統的具體格式和操作細節;接著第14章討論同步;第15章討論記憶體回收問題;後第16章店籃擔墓和第17章討論設備管理和塊設備問題。 本書以記憶體模型和時空模型為主要參考來分析各章的相關內容,給出了比較直觀的圖示,這不僅對初學者非常有用,對希望了解Linux核心的讀者和相關開發人員也非常有參考價值。

圖書目錄

目 錄
篇 基 本 框 架
第1章 Linux核心概述 3
1.1 UNIX與Linux 3
1.1.1 UNIX 3
1.1.2 Linux 3
1.1.3 宏核心與微核心 6
1.1.4 Linux核心源碼及版本 6
1.2 Linux核心模型 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.2 proc中的進程 32
2.2.1 進程記憶體空間 32
2.2.2 進程運行狀態等信息 33
2.3 進程空間 35
2.3.1 進程空間描述符 36
2.3.2 虛存區域VMA 40
2.3.3 VMA屬性 45
2.4 ELF執行檔裝入過程48
2.4.1 ELF裝入函式 49
2.4.2 ELF格式 49
2.5 進程空間的動態變化 54
2.5.1 VMA上的操作 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.3 buddy系統 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.4 slub分配器115
小結 130
第4章 進程組織與基礎行為131
4.1 進程組織管理 131
4.1.1 PCB進程控制塊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.2 execve系統調用 159
4.2.3 核心執行緒 160
4.2.4 Linux進程樹 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.4 STOP和IDLE調度類 234
5.3.5 調度控制與proc接口 236
5.4 負載均衡 241
5.4.1 處理器層次結構 242
5.4.2 調度的層次管理 243
5.4.3 CFS任務的負載均衡 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.2 System V IPC 269
6.2.1 IPC標識與命名空間 269
6.2.2 IPC公共框架 275
6.2.3 IPC信號量 279
6.2.4 IPC訊息佇列 283
6.2.5 IPC共享記憶體 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.1 x86的中斷和異常 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.6 tasklet 365
7.6 工作佇列 369
7.6.1 工作佇列機制 369
7.6.2 cmwq數據結構 371
7.6.3 工作項 371
7.6.4 cmwq工作佇列 375
7.6.5 工作者池worker_pool 383
7.6.6 並發度、應急處理等 386
7.7 系統調用 388
7.7.1 POSIX API、C庫和系統調用 388
7.7.2 系統調用的實現 389
小結 399
第8章 時間管理400
8.1 時間管理框架 400
8.1.1 基本概念 400
8.1.2 時間中斷和事件 406
8.1.3 clock_event_device與tick_device407
8.1.4 TIMER_SOFTIRQ軟中斷413
8.1.5 timekeeper 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.3 RCU機制 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.2 VFS虛擬檔案系統 468
10.1.3 多角度分層模型 472
10.2 VFS核心對象 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.1 address_space 528
11.1.2 頁高速快取的組織 530
11.1.3 反向映射 534
11.2 塊高速快取 540
11.2.1 塊快取 540
11.2.2 LRU塊快取 542
11.2.3 塊快取操作 543
小結 547
第12章 VFS的檔案操作 548
12.1 VFS系統調用 548
12.2 open()與close()系統調用 549
12.2.1 open的框架 549
12.2.2 檔案定位過程 552
12.2.3 close()系統調用 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.1 ext2磁碟數據結構 590
13.1.1 磁碟分區的組織 590
13.1.2 塊組描述符和點陣圖 591
13.1.3 盤上和記憶體數據結構 592
13.2 ext2超級塊 593
13.2.1 ext2超級塊數據結構 593
13.2.2 掛載與訪問 597
13.3 ext2索引節點 598
13.3.1 盤上ext2索引節點 599
13.3.2 記憶體ext2索引節點 601
13.3.3 inode_operations 603
13.3.4 ext2地址空間與檔案操作 604
13.4 目錄及目錄項 607
13.4.1 ext2_dir_entry 607
13.4.2 ext2_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.1 sync系列系統調用 627
14.3.2 sys_sync() 628
14.3.3 sys_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.1 do_writepages() 644
14.5.2 ext2_writepages()645
14.5.3 回寫等待 647
小結 649
第15章 記憶體回收與交換 650
15.1 頁幀回收 650
15.1.1 直接釋放 650
15.1.2 LRU頁幀組織 651
15.1.3 PFRA回收算法 655
15.2 核心回收操作 659
15.2.1 shrink_zone()659
15.2.2 shrink_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.2 sysfs 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.4 PCI設備 698
16.4.1 pci_bus_type和pci_bus 699
16.4.2 pci_driver 700
16.4.3 pci_dev 701
16.4.4 uevent 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.1 plug/unplug機制 728
17.3.2 提交請求 733
17.3.3 提交到驅動程式 742
17.3.4 硬碟的request_fn 744
17.3.5 中斷處理 746
17.4 IO調度749
17.4.1 IO調度器 749
17.4.2 調度器數據結構 751
17.5 初始化及註冊 754
17.5.1 塊設備初始化 754
17.5.2 硬碟初始化 759
小結 764
附錄 765
後記 774
2.3.3 VMA屬性 45
2.4 ELF執行檔裝入過程48
2.4.1 ELF裝入函式 49
2.4.2 ELF格式 49
2.5 進程空間的動態變化 54
2.5.1 VMA上的操作 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.3 buddy系統 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.4 slub分配器115
小結 130
第4章 進程組織與基礎行為131
4.1 進程組織管理 131
4.1.1 PCB進程控制塊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.2 execve系統調用 159
4.2.3 核心執行緒 160
4.2.4 Linux進程樹 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.4 STOP和IDLE調度類 234
5.3.5 調度控制與proc接口 236
5.4 負載均衡 241
5.4.1 處理器層次結構 242
5.4.2 調度的層次管理 243
5.4.3 CFS任務的負載均衡 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.2 System V IPC 269
6.2.1 IPC標識與命名空間 269
6.2.2 IPC公共框架 275
6.2.3 IPC信號量 279
6.2.4 IPC訊息佇列 283
6.2.5 IPC共享記憶體 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.1 x86的中斷和異常 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.6 tasklet 365
7.6 工作佇列 369
7.6.1 工作佇列機制 369
7.6.2 cmwq數據結構 371
7.6.3 工作項 371
7.6.4 cmwq工作佇列 375
7.6.5 工作者池worker_pool 383
7.6.6 並發度、應急處理等 386
7.7 系統調用 388
7.7.1 POSIX API、C庫和系統調用 388
7.7.2 系統調用的實現 389
小結 399
第8章 時間管理400
8.1 時間管理框架 400
8.1.1 基本概念 400
8.1.2 時間中斷和事件 406
8.1.3 clock_event_device與tick_device407
8.1.4 TIMER_SOFTIRQ軟中斷413
8.1.5 timekeeper 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.3 RCU機制 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.2 VFS虛擬檔案系統 468
10.1.3 多角度分層模型 472
10.2 VFS核心對象 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.1 address_space 528
11.1.2 頁高速快取的組織 530
11.1.3 反向映射 534
11.2 塊高速快取 540
11.2.1 塊快取 540
11.2.2 LRU塊快取 542
11.2.3 塊快取操作 543
小結 547
第12章 VFS的檔案操作 548
12.1 VFS系統調用 548
12.2 open()與close()系統調用 549
12.2.1 open的框架 549
12.2.2 檔案定位過程 552
12.2.3 close()系統調用 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.1 ext2磁碟數據結構 590
13.1.1 磁碟分區的組織 590
13.1.2 塊組描述符和點陣圖 591
13.1.3 盤上和記憶體數據結構 592
13.2 ext2超級塊 593
13.2.1 ext2超級塊數據結構 593
13.2.2 掛載與訪問 597
13.3 ext2索引節點 598
13.3.1 盤上ext2索引節點 599
13.3.2 記憶體ext2索引節點 601
13.3.3 inode_operations 603
13.3.4 ext2地址空間與檔案操作 604
13.4 目錄及目錄項 607
13.4.1 ext2_dir_entry 607
13.4.2 ext2_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.1 sync系列系統調用 627
14.3.2 sys_sync() 628
14.3.3 sys_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.1 do_writepages() 644
14.5.2 ext2_writepages()645
14.5.3 回寫等待 647
小結 649
第15章 記憶體回收與交換 650
15.1 頁幀回收 650
15.1.1 直接釋放 650
15.1.2 LRU頁幀組織 651
15.1.3 PFRA回收算法 655
15.2 核心回收操作 659
15.2.1 shrink_zone()659
15.2.2 shrink_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.2 sysfs 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.4 PCI設備 698
16.4.1 pci_bus_type和pci_bus 699
16.4.2 pci_driver 700
16.4.3 pci_dev 701
16.4.4 uevent 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.1 plug/unplug機制 728
17.3.2 提交請求 733
17.3.3 提交到驅動程式 742
17.3.4 硬碟的request_fn 744
17.3.5 中斷處理 746
17.4 IO調度749
17.4.1 IO調度器 749
17.4.2 調度器數據結構 751
17.5 初始化及註冊 754
17.5.1 塊設備初始化 754
17.5.2 硬碟初始化 759
小結 764
附錄 765
後記 774

相關詞條

熱門詞條

聯絡我們