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