第1章 概述 1
1.1 操作係統基礎 2
1.1.1 計算機係統的硬件資源管理 2
1.1.2 為應用程序提供執行環境 5
1.2 學習操作係統之必備知識 7
1.3 Windows操作係統發展曆史 9
1.4 Windows內核的版本 11
1.5 操作係統的研究與發展 13
1.6 本章總結 16
第2章 Windows係統總述 17
2.1 現代操作係統的基本結構 17
2.2 Windows係統結構 18
2.2.1 Windows內核結構 20
2.2.2 Windows內核中的關鍵組件 22
2.2.3 Windows子係統 32
2.2.4 係統綫程和係統進程 35
2.3 關於Windows研究內核 37
2.3.1 WRK包含瞭什麼 38
2.3.2 WRK源代碼說明 39
2.3.3 本書對WRK源代碼的引用 41
2.4 Windows內核的基本概念 42
2.4.1 處理器模式 43
2.4.2 內存管理 44
2.4.3 進程和綫程管理 46
2.4.4 中斷和異常 48
2.4.5 同步 51
2.5 Windows內核中的公共管理設施 53
2.5.1 Windows內核中的對象管理 53
2.5.2 注冊錶和配置管理器 61
2.5.3 事件追蹤(ETW) 72
2.5.4 安全性管理 75
2.6 Windows引導過程 81
2.6.1 內核加載 82
2.6.2 內核初始化 85
2.6.3 建立用戶登錄會話 90
2.7 本章總結 96
第3章 Windows進程和綫程 97
3.1 進程基本概念 97
3.1.1 多進程模型 98
3.1.2 進程與程序 99
3.2 綫程基本概念 102
3.2.1 綫程模型 102
3.2.2 綫程調度算法 104
3.2.3 綫程與進程的關係 106
3.3 Windows中進程和綫程的數據結構 106
3.3.1 內核層的進程和綫程對象 106
3.3.2 執行體層的進程和綫程對象 118
3.4 Windows的進程和綫程管理 129
3.4.1 Windows進程的句柄錶 129
3.4.2 獲得當前綫程或進程 135
3.4.3 進程和綫程的創建過程 136
3.4.4 進程和綫程的結束處理 146
3.4.5 係統初始進程和綫程 148
3.5 Windows中的綫程調度 150
3.5.1 綫程優先級 150
3.5.2 綫程狀態轉移 153
3.5.3 時限管理 163
3.5.4 優先級調度和環境切換 165
3.6 進程和綫程運行狀態監視工具 171
3.6.1 ProcMon使用示例 171
3.6.2 ProcMon實現原理 173
3.7 本章總結 174
第4章 Windows內存管理 175
4.1 內存管理概述 176
4.1.1 頁式內存管理 177
4.1.2 段式內存管理 181
4.1.3 內存管理算法介紹 184
4.1.4 Windows內存管理概述 192
4.2 Windows係統內存管理 194
4.2.1 係統地址空間初始化 194
4.2.2 係統地址空間內存管理 209
4.2.3 係統PTE區域的管理 223
4.3 進程內存管理 229
4.3.1 地址空間的創建和初始化 229
4.3.2 地址空間切換 234
4.3.3 進程地址空間的內存管理 235
4.3.4 內存區對象 241
4.4 內存頁麵交換 250
4.4.1 Intel x86中的PTE 251
4.4.2 軟件PTE:無效PTE和原型PTE 253
4.4.3 頁麵錯誤處理 257
4.4.4 Windows的寫時復製 263
4.5 物理內存管理 265
4.5.1 PFN數據庫 266
4.5.2 物理頁麵的狀態變化 272
4.5.3 物理頁麵鏈錶的管理和操作 275
4.5.4 修改頁麵寫齣器 280
4.5.5 進程/棧交換器 282
4.5.6 低內存通知和高內存通知 285
4.6 工作集管理 286
4.6.1 Windows工作集管理器 286
4.6.2 平衡集管理器 292
4.7 內存監視工具MemMon 293
4.7.1 MemMon使用介紹 293
4.7.2 MemMon實現原理 295
4.8 本章總結 295
第5章 Windows並發和同步 297
5.1 進程和綫程的同步基礎 297
5.1.1 並發性基礎 298
5.1.2 進程或綫程之間的通信 301
5.1.3 經典的同步問題 305
5.2 Windows中斷與異常 310
5.2.1 硬件中斷的發生和處理 311
5.2.2 中斷請求級彆(IRQL) 317
5.2.3 中斷對象 320
5.2.4 DPC(延遲過程調用) 323
5.2.5 時鍾中斷和定時器管理 327
5.2.6 APC(異步過程調用) 330
5.2.7 異常分發 336
5.3 不依賴於綫程調度的同步機製 343
5.3.1 提升IRQL實現數據同步 343
5.3.2 互鎖操作 345
5.3.3 無鎖的單鏈錶實現 346
5.3.4 自鏇鎖 349
5.4 基於綫程調度的同步機製 354
5.4.1 綫程進入等待 354
5.4.2 分發器對象 361
5.4.3 門等待 369
5.4.4 執行體資源(executive resource) 370
5.4.5 推鎖(push lock) 373
5.4.6 死鎖 378
5.5 觀察綫程同步關係——DPerfLite 379
5.5.1 DPerfLite使用示例 379
5.5.2 DPerfLite實現原理 381
5.6 本章總結 382
第6章 Windows I/O係統 383
6.1 I/O概述 384
6.1.1 現代計算機係統的I/O 384
6.1.2 I/O軟件技術 388
6.1.3 Windows I/O係統結構 390
6.2 I/O管理器 392
6.2.1 驅動程序初始化 393
6.2.2 驅動程序對象和設備對象 399
6.2.3 文件對象 404
6.2.4 對象生命周期管理 407
6.3 即插即用管理器 408
6.3.1 即插即用的基本要求 409
6.3.2 Windows中驅動程序的即插即用支持 410
6.3.3 設備列舉與設備樹 411
6.4 電源管理器 414
6.4.1 電源管理概述 414
6.4.2 Windows中的電源管理 417
6.5 設備驅動程序 422
6.5.1 設備驅動程序分類 423
6.5.2 例子驅動程序toaster 425
6.5.3 驅動程序的代碼結構 427
6.5.4 toaster設備的設備棧 432
6.5.5 過濾驅動程序的配置和加載 434
6.5.6 非即插即用驅動程序 437
6.6 I/O處理 440
6.6.1 I/O請求包(IRP) 440
6.6.2 針對獨立設備對象的I/O處理 447
6.6.3 處理I/O請求過程中的事項 451
6.6.4 針對設備棧的I/O處理 461
6.6.5 I/O完成端口 465
6.7 I/O請求監視工具IRPMon 468
6.7.1 IRPMon使用介紹 468
6.7.2 IRPMon實現原理 469
6.8 本章總結 470
第7章 Windows存儲管理 471
7.1 存儲管理概述 471
7.1.1 硬件存儲體係(memory hierarchy) 472
7.1.2 Windows的存儲管理結構 474
7.2 Windows緩存管理 476
7.2.1 Windows緩存空間的內存管理 476
7.2.2 緩存管理器的數據訪問路徑 483
7.2.3 直接使用係統緩存中的數據 486
7.2.4 緩存管理器的預讀處理 493
7.2.5 緩存管理器的延遲寫 496
7.3 Windows中捲的管理 499
7.3.1 Windows存儲棧結構 500
7.3.2 捲的掛載 504
7.3.3 捲與文件係統 507
7.3.4 文件對象的I/O處理 510
7.4 Windows文件係統 513
7.4.1 文件係統驅動程序結構 514
7.4.2 RAW文件係統與FsRtl 519
7.4.3 文件係統的I/O過濾 522
7.4.4 FAT文件係統 530
7.4.5 NTFS文件係統 534
7.5 本章總結 542
第8章 Windows係統服務 545
8.1 Windows係統服務原理 545
8.1.1 Intel x86的用戶模式-內核模式切換 545
8.1.2 Windows的用戶模式-內核模式切換 550
8.1.3 Windows中的係統服務分發 555
8.1.4 增加係統服務錶或錶項 562
8.2 LPC(本地過程調用)服務 565
8.2.1 LPC結構模型 565
8.2.2 LPC端口和LPC消息 567
8.2.3 LPC通信模型的實現 569
8.2.4 LPC應用 575
8.3 命名管道(Named Pipe)服務 577
8.3.1 命名管道的名稱解析 577
8.3.2 命名管道的通信模型 579
8.3.3 命名管道的實現 581
8.4 郵件槽(Mailslot)服務 584
8.4.1 郵件槽的名稱解析 584
8.4.2 郵件槽的通信模型 585
8.4.3 郵件槽的實現 586
8.5 SDT顯示工具SDTViewer 588
8.5.1 SDTViewer使用介紹 588
8.5.2 SDTViewer實現原理 589
8.6 本章總結 590
第9章 Windows係統高級話題 591
9.1 網絡 591
9.1.1 Windows網絡體係結構 591
9.1.2 TDI(傳輸驅動程序接口) 595
9.1.3 NDIS(網絡驅動程序接口規範) 599
9.1.4 Windows Vista及以後版本的網絡結構 601
9.2 Windows子係統 603
9.2.1 Windows子係統結構 603
9.2.2 Windows子係統初始化與GUI綫程 607
9.2.3 窗口管理 610
9.2.4 GDI(圖形設備接口) 620
9.2.5 Windows Vista及以後的子係統變化 627
9.3 內核日誌 629
9.3.1 內核日誌記錄器 629
9.3.2 利用內核日誌信息診斷性能問題 632
9.4 Windows Vista/Server 2008/7的重要變化 640
9.4.1 MinWin工程 640
9.4.2 進程和綫程管理 643
9.4.3 內存管理 645
9.4.4 I/O處理的改進 647
9.5 本章總結 650
附錄A 建立WRK工作環境 651
A.1 編譯WRK 651
A.2 啓動WRK 655
A.3 調試WRK 658
附錄B 內核代碼插入工具KInjectToolKit 665
B.1 KInjectToolKit功能介紹 666
B.2 KInjectToolKit的代碼實現 667
B.3 KInjectToolKit的限製 671
參考資料 673
術語對照錶 681
索引 687
· · · · · · (
收起)