译者序一
在所有介绍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平台上的应用程序时更好地理解各种设计决策背后的基本原理,调试复杂的问题。系统管理员也可以从这些信息中获益,因为理解了