出版時間:2010年4月 出版社:電子工業(yè)出版社 作者:潘愛民 頁數(shù):689 字數(shù):850000
Tag標簽:無
前言
《Windows內(nèi)核原理與實現(xiàn)》是一本講述Windows內(nèi)核機理,并配合Windows的源代碼來解釋其實現(xiàn)細節(jié)的學習用書。全書從操作系統(tǒng)原理的角度來組織內(nèi)容。本書適合于已經(jīng)有了操作系統(tǒng)基本概念的讀者進一步理解Windows操作系統(tǒng)。通過學習本書的內(nèi)容,讀者不僅可以掌握Windows的核心機制,也可以理解像Windows這樣的現(xiàn)代操作系統(tǒng)是如何構建起來的。因此,這是一本學習Windows操作系統(tǒng)內(nèi)核的書,而不是一本指導在Windows平臺上進行軟件開發(fā)的用書?! τ诮^大多數(shù)IT從業(yè)人員以及高校學生來說,Windows是一個熟悉得不能再熟悉的操作系統(tǒng)了,而且也有相當多人能夠熟練地開發(fā)各種類型的Windows應用程序,然而,真正熟悉Windows內(nèi)部機理的人卻少而又少。究其根源,很多人將這歸咎于Windows是一個閉源操作系統(tǒng),也就是說,除了Microsoft內(nèi)部的員工以外,人們接觸不到Windows的源代碼。這樣的解釋只能說是部分正確的,因為從歷史發(fā)展來看,UNIX類操作系統(tǒng)確實有廣泛的群眾基礎,很多人得益于閱讀各種UNIX版本的源代碼(包括Linux和FreeBSD)。但對于Windows操作系統(tǒng),這似乎并非一個合理的解釋,因為事實上,有相當多人在過去三四年間已經(jīng)獲得了Windows的源代碼,但是在代碼闡釋和核心深入理解方面卻并未表現(xiàn)出擁有源代碼而帶來的優(yōu)勢。反倒是在過去幾年間基于逆向工程而獲得的Windows核心知識要深刻得多?! ∵@么說并非指Windows源代碼沒有幫助,而是間接地揭示了一個事實:Windows的源代碼不是那么容易讀的,Windows的核心也不是那么好理解的。本書作者在過去幾年間,與國內(nèi)高校的操作系統(tǒng)課程的老師和學生有廣泛的接觸和了解,真切地理解到,要想在操作系統(tǒng)課程中完全融入Windows的內(nèi)容,迫切需要一本按照操作系統(tǒng)基本概念和理論來闡釋Windows實現(xiàn)機理的書籍?;谶@樣的動機,本書力圖讓學習操作系統(tǒng)的讀者能夠理解Windows中的核心機制,而且還可以近距離地觀察到Windows內(nèi)核中的實現(xiàn)細節(jié)。
內(nèi)容概要
本書從操作系統(tǒng)原理的角度,詳細解析了Windows如何實現(xiàn)現(xiàn)代操作系統(tǒng)的各個關鍵部件,包括進程、線程、物理內(nèi)存和虛擬內(nèi)存的管理,Windows中的同步和并發(fā)性支持,以及Windows的I/O模型。在介紹這些關鍵部件時,本書直接以Windows的源代碼(WRK, Windows Research Kernel)為參照,因而讀者可以了解像Windows這樣的復雜操作系統(tǒng)是如何在x86處理器上運行的。 在內(nèi)容選取方面,本書側重于Windows內(nèi)核中最基本的系統(tǒng)部件,同時也兼顧到作為一個操作系統(tǒng)的完整性,所以,本書也介紹了像存儲體系、網(wǎng)絡、Windows環(huán)境子系統(tǒng)等,這些雖然并不位于內(nèi)核模塊但卻支撐整個Windows運行的重要部件。在本書最后,也介紹了Windows Server 2003以后的內(nèi)核發(fā)展和變化?! ‰m然書中有大量關于Windows代碼實現(xiàn)的描述,但是本書并沒有羅列WRK中的代碼,即使讀者不對照WRK的源代碼,也可以從這些章節(jié)的描述中理解Windows的實現(xiàn)機理。在每一個技術專題的介紹中,本書幾乎都提供了一個框架圖,并且有關鍵細節(jié)的實現(xiàn)分析,這樣做的意圖是讓讀者既能夠對一項技術有總體上的把握,也通曉關鍵的實現(xiàn)細節(jié)?! indows操作系統(tǒng)已經(jīng)有20年歷史了,市面上有大量關于Windows技術的文檔和書籍,但是,真正從源代碼來詮釋Windows底層機理的,本書還是第一次嘗試。在本書覆蓋的內(nèi)容中,有相當一部分是第一次以文字形式披露出來的,期望這些內(nèi)容能消除人們對于Windows的神秘感?! 懽鞅緯哪康氖亲寣indows有好奇心的人真正了解到Windows中的核心機理,讓計算機專業(yè)的學生和老師,以及系統(tǒng)軟件工程師可以快速地領略到Windows中先進的系統(tǒng)技術,以及在Windows上編寫出更加高效的軟件。本書也配備了一些小工具,通過這些小工具,讀者可以查看內(nèi)核中的靜態(tài)或動態(tài)的信息,甚至觀察系統(tǒng)的行為,可通過Internet下載這些工具。
作者簡介
潘愛民,浙江海寧人,獲得了南開大學數(shù)學學士學位,清華大學工學碩士學位,以及北京大學計算機科學博士學位。他從中學時代開始接觸計算機編程,經(jīng)歷了從DOS到Windows各種版本的發(fā)展歷程。潘愛民曾經(jīng)長期從事軟件技術的研究和開發(fā)工作,撰寫了大量軟件技術文章,1999年曾經(jīng)是
書籍目錄
第1章 概述 1.1 操作系統(tǒng)基礎 1.1.1 計算機系統(tǒng)的硬件資源管理 1.1.2 為應用程序提供執(zhí)行環(huán)境 1.2 學習操作系統(tǒng)之必備知識 1.3 WINDOWS操作系統(tǒng)發(fā)展歷史 1.4 WINDOWS內(nèi)核的版本 1.5 操作系統(tǒng)的研究與發(fā)展 1.6 本章總結 第2章 WINDOWS系統(tǒng)總述 2.1 現(xiàn)代操作系統(tǒng)的基本結構 2.2 WINDOWS系統(tǒng)結構 2.2.1 Windows內(nèi)核結構 2.2.2 Windows內(nèi)核中的關鍵組件 2.2.3 Windows子系統(tǒng) 2.2.4 系統(tǒng)線程和系統(tǒng)進程 2.3 關于WINDOWS研究內(nèi)核 2.3.1 WRK包含了什么 2.3.2 WRK源代碼說明 2.3.3 本書對WRK源代碼的引用 2.4 WINDOWS內(nèi)核的基本概念 2.4.1 處理器模式 2.4.2 內(nèi)存管理 2.4.3 進程和線程管理 2.4.4 中斷和異常 2.4.5 同步 2.5 WINDOWS內(nèi)核中的公共管理設施 2.5.1 Windows內(nèi)核中的對象管理 2.5.2 注冊表和配置管理器 2.5.3 事件追蹤(ETW) 2.5.4 安全性管理 2.6 WINDOWS引導過程 2.6.1 內(nèi)核加載 2.6.2 內(nèi)核初始化 2.6.3 建立用戶登錄會話 2.7 本章總結 第3章 WINDOWS進程和線程 3.1 進程基本概念 3.1.1 多進程模型 3.1.2 進程和程序 3.2 線程基本概念 3.2.1 線程模型 3.2.2 線程調度算法 3.2.3 線程和進程的關系 3.3 WINDOWS中進程和線程數(shù)據(jù)結構 3.3.1 內(nèi)核層的進程和線程對象 3.3.2 執(zhí)行體層的進程和線程對象 3.4 WINDOWS的進程和線程管理 3.4.1 Windows進程中的句柄表 3.4.2 獲得當前線程和進程 3.4.3 進程和線程的創(chuàng)建過程 3.4.4 進程和線程的結束 3.4.5 系統(tǒng)初始進程和線程 3.5 WINDOWS中的線程調度 3.5.1 線程優(yōu)先級 3.5.2 線程狀態(tài)轉移 3.5.3 時限管理 3.5.4 優(yōu)先級調度和環(huán)境切換 3.6 進程和線程狀態(tài)監(jiān)視工具 3.6.1 ProcMon使用示例 3.6.2 ProcMon實現(xiàn)原理 3.7 本章總結 第4章 WINDOWS內(nèi)存管理 4.1 內(nèi)存管理概述 4.1.1 頁式內(nèi)存管理 4.1.2 段式內(nèi)存管理 4.1.3 內(nèi)存管理算法介紹 4.1.4 Windows內(nèi)存管理概述 4.2 WINDOWS系統(tǒng)內(nèi)存管理 4.2.1 系統(tǒng)地址空間初始化 4.2.2 系統(tǒng)地址空間內(nèi)存管理 4.2.3 系統(tǒng)PTE區(qū)域的管理 4.3 進程虛擬內(nèi)存管理 4.3.1 地址空間的創(chuàng)建和初始化 4.3.2 地址空間切換 4.3.3 虛擬地址空間的管理 4.3.4 內(nèi)存區(qū)對象 4.4 內(nèi)存頁面交換 4.4.1 x86中的PTE 4.4.2 軟件PTE:無效PTE和原型PTE 4.4.3 頁面錯誤處理 4.4.4 Windows的寫時復制 4.5 物理內(nèi)存管理 4.5.1 PFN數(shù)據(jù)庫 4.5.2 物理頁面的狀態(tài)變化 4.5.3 物理頁面鏈表的管理和操作 4.5.4 修改頁面寫出器 4.5.5 進程/棧交換器 4.5.6 低內(nèi)存通知和高內(nèi)存通知 4.6 工作集管理 4.6.1 Windows工作集管理器 4.6.2 平衡集管理器 4.7 內(nèi)存監(jiān)視工具MEM_MON 4.7.1 Mem_Mon使用介紹 4.7.2 Mem_Mon實現(xiàn)原理 4.8 本章總結 第5章 WINDOWS中的并發(fā)和同步 5.1 進程和線程同步基礎 5.1.1 并發(fā)性基礎 5.1.2 進程或線程之間的通訊 5.1.3 經(jīng)典的同步問題 5.2 WINDOWS中斷與異常 5.2.1 硬件中斷的發(fā)生和處理 5.2.2 中斷請求級別(IRQL) 5.2.3 中斷對象 5.2.4 DPC(延遲過程調用) 5.2.5 時鐘中斷和定時器管理 5.2.6 APC(異步過程調用) 5.2.7 異常分發(fā) 5.3 不依賴于線程調度的同步機制 5.3.1 提升IRQL實現(xiàn)數(shù)據(jù)同步 5.3.2 互鎖操作 5.3.3 無鎖的單鏈表實現(xiàn) 5.3.4 自旋鎖 5.4 基于線程調度的同步機制 5.4.1 線程進入等待 5.4.2 分發(fā)器對象 5.4.3 門等待 5.4.4 執(zhí)行體資源(executive resource) 5.4.5 推鎖(push lock) 5.4.6 死鎖 5.5 使用工具DPERFLITE 5.5.1 DPerfLite使用示例 5.5.2 DPerfLite實現(xiàn)原理 5.6 本章總結 第6章 WINDOWS I/O系統(tǒng) 6.1 I/O概述 6.1.1 現(xiàn)代計算機系統(tǒng)的I/O 6.1.2 I/O軟件技術 6.1.3 Windows的I/O系統(tǒng)結構 6.2 I/O管理器 6.2.1 驅動程序初始化 6.2.2 驅動程序對象和設備對象 6.2.3 文件對象 6.2.4 對象生命周期管理 6.3 即插即用管理器 6.3.1 即插即用的基本要求 6.3.2 Windows中驅動程序的即插即用支持 6.3.3 設備列舉與設備樹 6.4 電源管理器 6.4.1 電源管理概述 6.4.2 Windows中的電源管理 6.5 設備驅動程序 6.5.1 驅動程序分類 6.5.2 例子驅動程序toaster 6.5.3 驅動程序的代碼結構 6.5.4 toaster設備的設備棧 6.5.5 過濾驅動程序的配置和加載 6.5.6 非即插即用驅動程序 6.6 I/O處理 6.6.1 I/O請求包(IRP) 6.6.2 針對獨立設備對象的I/O處理 6.6.3 處理I/O請求過程中的事項 6.6.4 針對設備棧的I/O處理 6.6.5 I/O完成端口 6.7 I/O監(jiān)視工具IRPMON 6.7.1 IRPMon使用介紹 6.7.2 IRPMon實現(xiàn)原理 6.8 本章總結 第7章 WINDOWS存儲管理 7.1 存儲管理概述 7.1.1 硬件存儲體系(Memory hierarchy) 7.1.2 Windows的存儲管理結構 7.2 WINDOWS緩存管理 7.2.1 Windows緩存空間的內(nèi)存管理 7.2.2 緩存管理器的數(shù)據(jù)訪問路徑 7.2.3 直接使用緩存中的數(shù)據(jù) 7.2.4 緩存管理器的預讀處理 7.2.5 緩存管理器的延遲寫 7.3 WINDOWS卷管理 7.3.1 Windows中存儲棧結構 7.3.2 卷的掛載 7.3.3 卷與文件系統(tǒng) 7.3.4 文件對象的I/O處理 7.4 WINDOWS文件系統(tǒng) 7.4.1 文件系統(tǒng)驅動程序結構 7.4.2 RAW文件系統(tǒng)和FsRtl 7.4.3 文件系統(tǒng)的過濾 7.4.4 FAT文件系統(tǒng) 7.4.5 NTFS文件系統(tǒng) 7.5 本章總結 第8章 WINDOWS系統(tǒng)服務 8.1 WINDOWS系統(tǒng)服務原理 8.1.1 Intel x86的用戶模式-內(nèi)核模式切換 8.1.2 Windows的用戶模式-內(nèi)核模式切換 8.1.3 Windows中的系統(tǒng)服務分發(fā) 8.1.4 增加系統(tǒng)服務表或表項 8.2 LPC(本地過程調用)服務 8.2.1 LPC結構模型 8.2.2 LPC端口和LPC消息 8.2.3 LPC通訊模型的實現(xiàn) 8.2.4 LPC應用 8.3 命名管道(NAMED PIPE)服務 8.3.1 命名管道的名稱解析 8.3.2 命名管道的通訊模型 8.3.3 命名管道的實現(xiàn) 8.4 郵件槽(MAILSLOT)服務 8.4.1 郵件槽的名稱解析 8.4.2 郵件槽的通訊模型 8.4.3 郵件槽的實現(xiàn) 8.5 SDT顯示工具SDTVIEWER 8.5.1 SDTViewer使用介紹 8.5.2 SDTViewer實現(xiàn)原理 8.6 本章總結 第9章 WINDOWS內(nèi)核高級話題 9.1 網(wǎng)絡 9.1.1 Windows網(wǎng)絡體系結構 9.1.2 TDI(傳輸驅動程序接口) 9.1.3 NDSI(網(wǎng)絡驅動程序接口規(guī)范) 9.1.4 Windows Vista以后的網(wǎng)絡結構 9.2 WINDOWS子系統(tǒng) 9.2.1 Windows子系統(tǒng)結構 9.2.2 Windows子系統(tǒng)初始化與GUI線程 9.2.3 窗口管理 9.2.4 GDI(圖形設備接口) 9.2.5 Windows Vista以后的子系統(tǒng)變化 9.3 內(nèi)核日志 9.3.1 WRK中的內(nèi)核記錄器 9.3.2 利用ETW信息診斷性能問題 9.4 WINDOWS VISTA/SERVER /7的重要變化 9.4.1 MinWin工程 9.4.2 ?? 附錄A 建立編譯和調試WRK環(huán)境 A.1 編譯WRK A.2 啟動WRK A.3 調試WRK 附錄B 內(nèi)核代碼插入工具KINJECTTOOLKIT B.1 KINJECTTOOLKIT功能介紹 B.2 KINJECTTOOLKIT的代碼實現(xiàn) B.3 KINJECTTOOLKIT的限制
章節(jié)摘錄
其次,在支持多任務的基礎上,如果這些任務是相互獨立的,則操作系統(tǒng)總是可以采用適當?shù)姆绞阶屗鼈儷@得執(zhí)行機會,但在實踐中,應用程序為了實現(xiàn)各種功能邏輯,不同任務之間往往有一些邏輯上的關聯(lián)性。比如,任務之間必須強加某種時序關系,才能保證每個任務的狀態(tài)是有效的;當多個任務競爭某些稀有資源(注意,系統(tǒng)的硬件資源,像打印機和顯示器等,是共享的)時,系統(tǒng)必須確保這些任務有序執(zhí)行。所以,凡是存在共享資源的地方,操作系統(tǒng)都必須提供恰當?shù)姆椒▉硗綉贸绦驅λ脑L問?,F(xiàn)代操作系統(tǒng)通常會提供多種同步機制,例如互斥體(mutex)、信號量(semaphore)、臨界區(qū)(criticalsection)等。應用程序可以有選擇地使用這些同步機制,以確保多個任務有序地共享資源。 除了任務和同步的概念,每個應用程序還必須有它自己相對獨立的執(zhí)行空間。在現(xiàn)代操作系統(tǒng)中,進程也代表了一個應用程序和它的執(zhí)行空間。不同進程的空間是相互隔離的,這是現(xiàn)代操作系統(tǒng)的基本需求。操作系統(tǒng)必須在處理器的硬件特性基礎之上,實現(xiàn)一套行之有效的空間隔離方案。每個進程有它自己的內(nèi)存空間,并且無法直接訪問其他進程的內(nèi)存空間。進程之間如果要共享數(shù)據(jù),則必須通過操作系統(tǒng)提供的機制來進行。Intel x86體系結構上的操作系統(tǒng)基本上都利用硬件的虛擬內(nèi)存映射機制來隔離每個進程的內(nèi)存空間。所以,操作系統(tǒng)的職責是為每個進程維護好從虛擬地址到物理地址的映射關系,并且管理好物理內(nèi)存的分配和回收。另一方面,除了進程的空間隔離性,操作系統(tǒng)還必須提供相應的機制讓不同的進程可以相互通信,畢竟,很多軟件需要進程之間的協(xié)作來完成一些上層功能。同步機制和跨進程地共享內(nèi)存是典型的進程間通信(IPC,Inter-Process Communication)手段?! ∏懊嫣岬剑F(xiàn)代操作系統(tǒng)往往以統(tǒng)一的框架來管理I/0設備,這也隱含了操作系統(tǒng)向應用程序暴露的I/0接口是統(tǒng)一的這樣一層意思。應用程序通過此接口來訪問系統(tǒng)的外部設備,而操作系統(tǒng)不僅要管理好應用程序訪問外設的各種請求,包括它們的時序,還必須將應用程序的請求發(fā)送到對應的設備驅動程序中,最終由設備驅動程序來處理這些請求,而處理的結果也必須以某種方式回送給應用程序。操作系統(tǒng)通常以句柄(handle)來代表一個可訪問的抽象設備,抽grist備可能與物理設備連接,也可能并不存在對應的物理設備或資源。操作系統(tǒng)還提供在一個句柄上讀(read)、寫(write)數(shù)據(jù),以及發(fā)送控制命令的能力。所以,應用程序與系統(tǒng)設備打交道的方式非常簡潔明了:打開設備獲得句柄、向設備發(fā)送命令、讀或寫設備,以及關閉設備。操作系統(tǒng)的任務是管理這些設備和驅動程序,以及傳遞或解釋應用程序的命令。
編輯推薦
微軟亞洲研究院資深研究員潘愛民老師十年磨一劍之作 用真實的源代碼剖析Windows操作系統(tǒng)核心原理 Windows內(nèi)核專家Dave Probert作序力薦
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載
Windows內(nèi)核原理與實現(xiàn) PDF格式下載