Linux 技術內幕

羅秋明

  • 出版商: 清華大學
  • 出版日期: 2017-01-01
  • 定價: $588
  • 售價: 8.5$500
  • 語言: 簡體中文
  • ISBN: 7302451001
  • ISBN-13: 9787302451006
  • 相關分類: Linux
  • 已絕版

  • Linux 技術內幕-preview-1
  • Linux 技術內幕-preview-2
  • Linux 技術內幕-preview-3
Linux 技術內幕-preview-1

買這商品的人也買了...

相關主題

商品描述

本書內容分成兩篇,第一篇是基本框架,第二篇是文件系統及相關內容。在第一篇的各章中:第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_device 407

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