譯者序一
在所有介紹Windows操作系統的圖書中,我相信都離不開Windows Internals系列提供的信息。除了公開可見到的Windows源代碼以外,本書是披露Windows系統機理最為詳盡的一份資料,尤其對于Windows的每一個最新版本。本書第6版專門針對Windows 7和Windows Server 2008 R2進行了大幅度更新。由于篇幅的增加,這一版本改成了上下兩冊來發行,由此也可見本書的“分量”。本書上冊中文版已于2014年4月出版,這幾年間,我經常收到讀者的詢問,本書下冊是否出版。現在,下冊中文版終于要出版了,讀者們可以如愿看到本書了。
在Windows操作系統的發展歷程中,Windows 7是一個具有特殊意義的版本。它可以算得上是最為復雜的單機操作系統,無論是從代碼規模、代碼復雜度,還是從系統適應場景的復雜程度,都超過了以前所有的版本。從某種意義上,Windows 7代表了軟件工程的一個頂峰——人類可以構造出如此復雜且能穩定工作的軟件系統!與此相對應,要用一本書來涵蓋其中的各種機理也同樣是一項艱巨的任務,本書作者基于他們過去所做的大量工作,以及對Windows的深入理解,出色地完成了這一詮釋工作。
本書的權威性毋庸置疑。Mark Russinovich因在Windows內核探索方面所作出的貢獻而成為Microsoft Fellow(現為Azure CTO),本書中用到的大量Sysinternals工具均出自他的手筆。David Solomon長期從事Windows NT內部機理的培訓,他不僅在全球各地培訓Windows系統程序員,甚至也為Microsoft的內部員工提供Windows內核培訓服務,他從本書第2版開始奠定了卓有成效的敘述風格。Alex Ionescu是一名年輕的黑客型Windows專家,曾經為ReactOS(一個開源的操作系統項目,旨在兼容Windows 2000/XP/Server 2003的應用程序)編寫了絕大多數內核代碼。他曾經發現和報告了一些與Windows內核相關的軟件漏洞,也跟David Solomon一起講授Windows內部機理的課程。有如此強大的作者組合,再加上Microsoft的內部支持(包括提供源代碼,以及Windows開發組的細致解釋),本書無疑是Windows最新版本的第一手技術資料。
每一個對Windows操作系統有濃厚興趣的讀者都不應該錯過這本書。本書上冊介紹了Windows的系統架構、系統機制、管理機制、進程與線程、安全性和網絡。下冊是上冊的直接延續,共有7章,分別介紹了Windows I/O、存儲管理、內存管理、緩存管理器、文件系統、啟動與停機,以及崩潰轉儲分析。每一章都是一個重要話題,讀者既可以在上冊的基礎上繼續深入鉆研Windows各個子系統,也可以有選擇地閱讀某些章節。在閱讀過程中,最好能動手做一做書中描述的實驗。做這些實驗的門檻并不高,但效果非常好,既可以讓你直觀地領會Windows內部的一些設計與實現,也可以積累一些洞察Windows內部活動的方法,這些方法對于排查Windows平臺上出現的問題往往很有幫助。
我與本書的淵源是從第4版(針對Windows XP/Server 2003)開始的,后來第5版(針對Windows Vista/Server 2008)錯過了出版周期,直至這次第6版又有機會翻譯。這三個版本,連同后來的第7版(針對Windows 10/Server 2016)都采用同樣的敘述框架,只是針對最新的Windows版本做了更新。本書講述的內容,雖然是針對Windows 7/Server 2008 R2,但更新幅度較大,尤其是有關64位系統的介紹,有較多新內容。即使讀者已經在Windows 8或者Windows 10上工作,本書中的內容仍然對你有價值。另外,如果讀者不滿足于本書Windows系統機理的系列介紹,而希望進一步理解Windows操作系統的源代碼實現以及內核中的各種基礎算法,則推薦閱讀另一本書《Windows內核原理與實現》,這是我在Windows XP/Server 2003 SP1內核代碼基礎上寫作的一本講解Windows內核的書,它幾乎將Windows內核大白于天下。
最后,我要特別感謝范德成先生,他在我第4版譯稿的基礎上,更新到了第6版。也要感謝電子工業出版社的編輯劉皎,依然把第6版的翻譯工作交給了我,使我有機會彌補第5版中文版未能出版之缺憾。
潘愛民
2018年1月于杭州
譯者序二
微軟的Windows操作系統歷經三十年左右的發展,早已成為一個博大精深的桌面及服務器操作系統,并在市場上獲得了很大的成功。但近十年來,以亞馬遜、谷歌、Facebook等為代表的互聯網企業在市場和技術兩方面開疆拓土,極大地推動了移動設備、云計算、大數據和人工智能等行業的發展,顯著影響了包括微軟在內的各大傳統軟件巨頭的發展態勢。繼2006年亞馬遜提出云計算之后,微軟于2008年首度公開Azure虛擬機云平臺,SAP也在2012年公開其應用程序云平臺。盡管各種新的技術不斷涌現,但本書的定位焦點仍然在Windows操作系統本身,在我看來,這本書的價值依然很高,因為技術的本源有共通性,Windows操作系統又可謂是微軟技術的中流砥柱——微軟的Azure云平臺的操作系統就是基于Windows開發的,其上運行的虛擬機管理器正是最早在Windows Server 2008中發布的Hyper-V。
如果你對Windows操作系統有著濃厚的興趣,自然不應該錯過本書。如果你是分布式系統架構師,也同樣能從本書中受益。這是因為,分布式系統和操作系統在許多方面都有著或多或少的相似性,對操作系統設計原理的掌握自然會對分布式系統的設計有重大啟發和幫助。比如,操作系統的線程調度和分布式系統的負載均衡、操作系統的磁盤緩存和分布式系統的緩存設計、操作系統的文件系統和分布式系統的文件系統、虛擬機管理器的VLAN和分布式系統的軟件定義網絡(SDN)、操作系統的性能監視器與分布式系統服務器的性能監視平臺等之間都有不少相似性。
以事務處理為例,Windows Vista中引入了KTM(內核事務管理器,參見本書第12章),它所實現的事務的隔離級別類似于數據庫的READ COMMITTED級別,是一種幾乎所有SQL數據庫都會實現的隔離級別;而分布式系統中的Paxos共識算法所能實現的分布式事務,其隔離級別也類似于READ COMMITTED。又以磁盤緩存為例(參見本書第11章),操作系統的磁盤緩存是強一致性的,而分布式系統緩存可以做成應用服務器內的,或者是專門的緩存層,前一種實現對負載均衡調度有特殊要求,而普通的負載均衡會大大降低緩存命中率從而導致系統性能低下,后一種實現則在網絡延遲上稍差些。兩種實現都要考慮是做成強一致性的還是最終一致性的,前者需要在寫的同時更新緩存,后者則需要自動淘汰舊的緩存數據。緩存的粒度也很重要,粒度過小可能導致索引數據量過大,這和操作系統磁盤緩存的原理是類似的。所以,理解操作系統的知識能拓展眼界,進而對基于這些系統的設計產生正面影響。
此外,理解操作系統的行為有助于設計性能更高的分布式程序。比如,了解操作系統磁盤緩存的原理,有助于設計出高性能的對象存儲服務——可以想辦法提高對象存儲在操作系統上的緩存命中率,或者在必要時禁用操作系統緩存而改為自己實現緩存機制。又如,了解操作系統網絡棧的工作模式,有助于編寫做高速網絡傳輸的程序,甚至可以深入驅動程序層面做進一步的性能優化。
我是Windows操作系統的深度用戶,學習和研究了包括Windows、Linux、FreeBSD、OpenBSD在內的多種操作系統。從1995年首次接觸Windows 3.1開始,就與Windows結下了不解之緣。陸續使用過Windows 3.1、Windows 95、Windows 98、Windows ME、Windows NT 4.0、Windows 2000、Windows XP、Windows Vista、Windows 7、Windows 8、Windows 8.1和Windows 10等各個版本,還接觸過Windows Server 2000、Windows Server 2003、Windows Server 2008、Windows Server 2008 R2等服務器版本,以及其上的Microsoft Virtual PC、Virtual Server和Hyper-V虛擬化技術。我會好奇它們有著怎樣的功能和性能,底層是怎樣工作的,為什么這樣設計而不是那樣設計的;正是因為這種好奇,所以Windows Internals一直是我十分感興趣的一本書。在完成本書上冊的翻譯工作后,我寫了一篇后記(http://www.fandecheng.com/personal/ interests/pwindows/wi_translation_ps.pdf里面講了很多個人的理解和感悟)。2012年,當好友高博打電話告訴我有機會參與《深入解析Windows操作系統》第6版的翻譯時,我非常欣喜。在高博的引薦下,我首次見到了仰慕已久的潘愛民老師。因此我非常感謝高博的引薦和潘愛民老師的認可,感謝電子工業出版社的劉皎和白濤兩位編輯,本書的出版離不開他們的策劃和編輯。
范德成
2018年1月于上海浦東張江
引言
《深入解析Windows操作系統(第6版)》的讀者對象是那些想要理解Microsoft Windows 7和Windows Server 2008 R2操作系統的核心組件內部工作機理的高級計算機專業人員(包括開發人員和系統管理員)。開發人員利用這些知識,可以在構建Windows平臺上的應用程序時更好地理解各種設計決策背后的基本原理,調試復雜的問題。系統管理員也可以從這些信息中獲益,因為理解了