商家名称 | 信用等级 | 购买信息 | 订购本书 |
深入解析:Windows操作系统(第4版) [平装] | |||
深入解析:Windows操作系统(第4版) [平装] |
★是微软官方权威参考书,名著名译!重量级专家Mark E.Russinovich, David A.Solomon所著的轰动一时的巨著Windows Internals的第四版,彻底解析Windows Server 2003的内部结构。
★Windows系统之父、微软公司平台开发副总裁Jim Allchin撰文推荐!
★微软公司Senior Distinguished Engineer、Windows NT 首席设计师David N. Cutler撰文推荐!
“本书是有关Windows内部机理核心的权威之作。如果你想要知道Windows内部是如何工作的,那么,这就是你想要的书。……如果你跟我一样,想要“深入浅出”地看一看Windows,那么,这本书正好是你的一个起点。”
——Windows系统之父、Windows平台开发副总裁Jim Allchin
“每一位认真的操作系统开发人员都应该在他或她的案头有这本书。”
——微软公司Senior Distinguished Engineer、Windows NT首席设计师David N. Cutler! !
《深入解析:Windows操作系统》(第4版)是国内知名译者潘爱民先生译作
Windows系统之父Jim Allchin亲自撰文推荐!
Windows NT首席设计师David N. Cutler亲自撰文推荐!
深入解析Windows操作系统!彻底揭开Windows技术内幕!
Csdn、博客堂、博客园、《程序员》杂志鼎力推荐!
译 序
这是一本随Windows NT一起发展和成长起来的经典图书。我在1995年的时候阅读过这本书的第1版中文版,通过该书了解到了Windows NT设计的诸多考虑。它对于我理解Windows曾经起到了重要的作用。除了这本书以外,另外一套讲述Windows SDK开发指南的图书(记得有四卷)也深刻地影响了我对于Windows的理解。虽然第4版与早期的版本有了很大的变化(原作者也不相同,请参考引言部分关于本书历史的介绍),但由于Windows NT的内核结构一直沿袭下来了,无疑本书新的版本更趋成熟,而且新版作者们编写的许多工具更是使本书增色不少。
时隔10年以后,当编辑找到我,希望我来翻译这本书的第4版时,我的第一感觉是,我不能翻译这本书,所以我直截了当地拒绝了编辑。我的顾虑在于两个方面:首先,这是一本重量级的书,更适合于操作系统领域中的资深专家来把握和诠译;其次,我担心没有足够的时间来及时地完成这本书的翻译工作。两周以后,当编辑再次找到我时,我答应找一个帮手来翻译这本书,但是,合适的帮手并不好找。最后,我决定独立翻译本书,但需要一年时间。而实际上,我花了一年半时间才完成本书的翻译工作。无奈,在质量和进度之间,我选择了前者。
这是一本独特的书,它既不像教材那样宣讲Windows操作系统的原理,也不教读者如何编写内核驱动程序或者如何更好地配置Windows系统。相反地,它按照Windows操作系统的体系结构,把内核几乎翻了个遍,目的在于帮助读者理解Windows内核的每一部分是如何工作的,并且通过各种工具让你真正能够看到Windows内部的数据结构和状态,甚至一些运行过程。阅读这本书的过程,其实也是玩转Windows的过程。经过作者们的剖析,Windows已经完完全全不再神秘。如果你想知道Windows的内部工作原理,那么,这本书对你来说再合适不过了。
Microsoft提供了很多工具(并且许多工具可直接通过Microsoft的Web站点获得),可用来观察或控制系统内核的方方面面,其中最为重要的当然非内核调试器(Windbg)莫属了。除此以外,本书作者们也提供了大量实用的工具(有的还相当好玩,见本书第14章最后一节。所有这些工具都可通过www.sysinternals.com下载而得到),你不仅在阅读本书的时候能使用这些工具来帮助你更好地理解书中的内容,在日常的工作或生活中也可以使用这些工具来解决一些实际问题。例如,我和同事们通过Process Explorer(在本书中我将其翻译为“进程管理器”)发现过机器上的流氓软件的痕迹,有时候,当目录无法删除或移动设备无法卸载的时候,通过它也能查到哪个进程还在抓着不放手。对于有些工具,作者们还在书中介绍了实现原理,比如Filemon就是一个很好的例子。
这本书确实打破了Windows操作系统的神秘感,但是,更让Windows大白于天下的,当是Windows的源代码了。2006年7月,Microsoft真正开放了一份可编译的内核源代码(仅核心部分),编译得到的内核文件可以在Windows Server 2003 (SP1)上启动和运行。如果读者有资格获得这一份代码,那么,在阅读本书的时候,你甚至可以直接参考源代码。我想,在这一点上,Microsoft的确体现了诚意。有关详细的信息,请参考http://www.microsoft.com/resources/sharedsource/ Licensing/WindowsAcademic.mspx。
说到本书的权威性,看一看David Culter(NT内核的最初设计者,奠定了Windows NT的基础)和Jim Allchin为本书写的序言就能知晓。作者之一David Solomon从事Windows NT内部机理的培训和研讨有10多年经历了,而且也在Microsoft内部对员工进行培训。我有幸参加了他2006年春天在北京的一次培训。而另一名作者Mark Russinovich呢,www.sysinternals.com上这么多优秀的工具皆出自他的手笔,现在已经加入Microsoft了。有兴趣的读者,可以到网站上看一看Mark的blog,一些技术文章非常有意思。
这一年多翻译本书的过程,于我也是一个学习的过程。这些知识帮助我解决了在工作中遇到的许多难题,也让我更好地理解了Windows操作系统。我经常向同事和实习生们推荐这本书,希望能帮助他们解决手头的一些技术难题,以及更好地在Windows平台上开展工作。如果你的工作也需要紧密地接触Windows,那么,不管是科研人员、开发人员,还是系统管理员,都可以从这本书中获益良多。
如何更有效地发挥本书的作用呢?以我的感觉而言,这本书的叙述并不像教材那样严谨,也不像教材那样按照学习的顺序来组织内容,它应该是一本讲述Windows系统内部机理的实用参考书。所以,如果你没有计算机科学的专业背景,我建议你配合学习一本讲述操作系统原理的书籍。有了操作系统理论的基础以后,再阅读本书无疑会有更好的效果。另外,在阅读过程中,若有条件,一定要动手做一做书中描述的实验。这些实验很容易做,你若能举一反三,则掌控Windows就不在话下了。
最后,借此机会,感谢两位作者写了这么一本有用的书以及一组实用工具。谢谢周筠编辑让我翻译这本书,并容许我这么久才完稿。今年4月份她说的一句话让我感动,她说“我不催你,我知道你很忙”,而实际上,原书的出版社正在催她,她是顶着压力说这句话的。谢谢微软亚洲研究院高校关系经理马歆小姐,她在过去几年中为推广Windows在国内高校的教学和科研做了大量幕后工作,包括组织国内高校的操作系统教师编写了《Windows操作系统原理》一书,正是在跟她的接触和交流过程中,让我更加意识到了这本书有多么重要。也要谢谢本书编辑方舟和陈元玉,他们配合我的翻译进度,使得我们的工作能以流水线方式进行,他们的工作态度让我感受到了从未有过的编辑对译者的尊重。
在翻译过程中,我也尽可能地改正原著中的一些错误,但我相信这本书还远没有达到完美,尤其是,因翻译而新引入的错误更是在所难免。尽管我花了四个月的时间来复查一遍译稿,但交稿之后还是能发现一些翻译不妥之处,甚至错译的句子,请读者原谅。另外,本书正文之后列出了英汉习惯用语对照表,以方便阅读。
潘爱民
2006年12月于北京
引 言
引 言
《深入解析Windows操作系统,第4版》的读者对象是那些想要理解Microsoft Windows 2000、Windows XP和Microsoft Windows Server 2003操作系统的核心组件内部工作机理的高级计算机专业人员(包括开发人员和系统管理员)。开发人员利用这些知识,可以在构建Windows平台上的应用程序时更好地理解各种设计决策背后的基本原理。这样的知识也可以帮助开发人员调试复杂的问题。系统管理员也可以从这些信息中获益,因为理解了操作系统背后的工作原理,可以有助于理解系统的性能行为,以及当事情变糟时更易于诊断各种系统问题。在阅读了这本书以后,你应该可以更好地理解Windows是如何工作的,以及它为什么有这样那样的表现。
本书的结构
前两章(“概念和工具”和“系统结构”)奠定了本书后面用到的术语和概念的基础。接下去的三章——“系统机制”、“管理机制”以及“启动和停机”——讲述了系统中关键的底层机制。接下来的八章解释了操作系统的核心组件:进程、线程和作业、内存管理、安全性、I/O系统、存储管理、缓存管理器、文件系统,以及网络,最后一章介绍了崩溃转储分析。
本书的历史
本书以前的名称是Inside Windows NT(Microsoft Press,1992,中文版的名称是《Windows NT技术内幕》),现在是第4版。第1版是由Helen Custer著的(在Microsoft Windows NT 3.1的最初发布以前出版)。Inside Windows NT是第一本关于Windows NT的书籍,它提供了有关Windows NT系统的体系结构和设计方面的关键要点。Inside Windows NT,Second Edition(Microsoft Press, 1998)是由David Solomon著的。该书在内容上做了更新,涵盖了Windows NT 4.0,并且大大地提高了技术深度的层次。Inside Windows 2000,Third Edition(Microsoft Press,2000)是由David Solomon和Mark Russinovich合著的。第3版增加了许多新的话题,比如启动和停机、Windows服务的内部机理、注册表的内部机理、文件系统驱动程序、网络,以及Windows 2000中内核的变化,其中,关于Windows 2000中内核的变化,包含了Windows驱动程序模型(WDM,Windows Driver Model)、即插即用、电源管理、Windows管理规范(WMI,Windows Management Instrumentation)、加密、作业对象和终端服务。
第4版的变化
这一最新的版本,现在称为“Microsoft Windows Internals(Fourth Edition)”,在内容上做了更新,以覆盖Windows XP和Windows Server 2003中所做的内核变化,包括对于64位系统的支持。练习用的实验也相应地做了更新,以反映出工具中的变化;新增加的实验用到了一些在第3版写作时尚未可用的新工具。
由于从Windows 2000到后续版本之间的内核变化相对较小(与“Windows NT 4.0和Windows 2000之间的变化”相比较而言),所以,本书中绝大部分内容适用于Windows 2000、Windows XP和Windows Server 2003。因此,除非特别声明,否则一切内容都适用于这三个版本。
练习实验
即使没有访问源代码,你也可以通过一些工具(比如内核调试器)来获得许多有关Windows内部机理的知识。每当可以通过一个工具来揭示或演示Windows内部行为的某一方面时,本书中的“实验”辅助章节就会列出让你自己试用该工具时遵从的步骤。这样的实验遍布全书,我们鼓励你在阅读本书时试一试这些实验——看一看Windows内部是如何工作的,这比你仅仅读一遍本书所得到的印象要深刻得多。
本书没有涵盖的话题
Windows是一个大而复杂的操作系统。本书并没有涵盖与Windows内部机理相关的一切内容,而是把焦点集中在基本的系统组件上。例如,本书没有讲述COM+(Windows分布式面向对象编程基础设施),也没有讲述.NET框架(下一代托管代码的应用程序的基础)。
因为这是一本讲述内部机理的书籍,不是一本用户指南、程序设计或系统管理类型的书籍,所以,本书没有描述如何使用、编程或配置Windows。
提醒和告诫
因为本书讲述的是Windows操作系统中未文档化的内部结构和内部操作的行为(比如内核结构和函数),所以,这些内容有可能会在不同的发行版本中有所变化(外部的接口,比如Windows API,则不会受到不兼容变化的影响)。
说到“受版本变化的影响”,我们并不是指,本书讲述的细节会在不同发行版本中一定有所变化,但是你不能认为它们不会改变。任何使用了这些未文档化接口的软件都有可能在将来
的Windows版本上无法正常工作。更糟的是,在内核模式下运行并且用到了这些未文档化接口的软件(比如设备驱动程序)在新的Windows发行版本中运行时可能会导致系统崩溃。
支持
我们做了各种努力来确保本书的精确性。如果你遇到了任何问题,或者有任何疑问,请参考下面列出的资源。
来自作者的支持
本书远未达到完美。毫无疑问,它包含一些不精确的地方;或者也有可能,我们忽略了一些本该讲述的话题。如果你发现了任何你认为不正确的地方,或者你相信我们应该包含一些尚未涵盖的材料,欢迎发送电子邮件到windowsinternals@sysinternals.com。本书的更新和修正将张贴在www.microsoft.com/technet/sysinternals/information.windowsinternals.mspx页面上。
来自出版商Microsoft Press的支持
Microsoft也通过Web为本书提供修正内容,地址如下:
http://www.microsoft.com/learning/support
你可以直接连接到Microsoft学习知识库(Microsoft Learning Knowledge Base),针对你学习过程中可能碰到的问题,输入一个相关的查询请求,Web地址是:http://www.microsoft.com/learning/support/search.asp。
除了直接给作者们发送反馈信息以外,如果你对本书的表述或用途有任何建议、疑问或者想法,可以通过以下任何一种方法将它们发送给Microsoft。
通信地址:
Microsoft Press
Attn: Windows Internals Editor
One Microsoft Way
Redmond, WA 98052-6399
电子邮件地址:
mspinput@microsoft.com
请注意,通过上述地址并不提供产品支持。关于Microsoft Windows的支持信息,请访问www.microsoft.com/windows。你也可以在工作日的太平洋时间上午6点到下午6点打电话给(425) 635-7011,呼叫标准支持程序,或者搜索Microsoft的在线支持站点:suppport.microssft.com/support。
作者:(美)罗斯 所罗门 译者:潘爱民
潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京.. << 查看详细
第1章 概念和工具 1
1.1 Windows操作系统的版本 1
1.2 基础概念和术语 3
Windows API 3
服务、函数和例程 5
进程、线程和作业 6
虚拟内存 14
内核模式和用户模式 16
终端服务及多个会话 21
对象和句柄 22
安全性 23
注册表 24
Unicode 25
1.3 挖掘Windows内部机理 25
性能工具 27
Windows支持工具箱 27
Windows资源工具箱 27
内核调试 28
Platform SDK 33
DDK(设备驱动程序开发工具) 34
Sysinternals工具 34
1.4 本章总结 34
第2章 系统结构 35
2.1 需求和设计目标 35
2.2 操作系统模型 36
2.3 总体结构 37
可移植性 40
对称多处理 41
可伸缩性 46
客户和服务器版本之间的差异 47
检查版本 49
2.4 关键的系统组件 51
环境子系统和子系统DLL 53
硬件抽象层(HAL) 67
设备驱动程序 69
系统进程 75
2.5 本章总结 84
第3章 系统机制 85
3.1 陷阱分发 85
中断分发 87
异常分发 109
系统服务分发 119
3.2 对象管理器 124
执行体对象 126
对象结构 128
3.3 同步 149
高IRQL的同步 151
低IRQL的同步 155
3.4 系统辅助线程 166
3.5 Windows全局标志 168
3.6 本地过程调用(LPC) 171
3.7 内核事件追踪 175
3.8 Wow64 178
Wow64进程地址空间布局结构 179
系统调用 179
异常分发 179
用户回调 179
文件系统重定向 180
注册表的重定向和反射 180
I/O控制请求 181
16位安装器应用程序 182
打印 182
一些限制 182
3.9 本章总结 182
第4章 管理机制 183
4.1 注册表 183
查看和修改注册表 183
注册表用法 184
注册表数据类型 185
注册表逻辑结构 186
注册表问题的诊断 192
注册表的内部机理 197
4.2 服务 211
服务应用 212
服务账户 217
服务控制管理器 223
服务启动 225
启动错误 229
接受当前引导和“最后已知的好控制集” 230
服务失败 231
服务停机 232
共享的服务进程 233
服务控制程序 236
4.3 Windows管理规范 237
WMI体系结构 237
提供者 239
公共信息模型(CIM)和可管理对象的格式语言 240
WMI名字空间 243
类关联 244
WMI实现 247
WMI安全性 248
4.4 本章总结 249
第5章 启动和停机 251
5.1 引导过程 251
x86和x64引导准备 251
x86/x64引导扇区和Ntldr 255
IA64引导过程 264
初始化内核和执行体子系统 266
Smss、Csrss和Winlogon 269
自动启动的映像文件 273
5.2 引导和启动问题的故障检查 274
最后已知的好配置 274
安全模式 274
安全模式下的驱动程序加载 275
恢复控制台(Recovery Console) 279
解决常见的引导问题 281
5.3 停机 286
5.4 本章总结 288
第6章 进程、线程和作业 289
6.1 进程的内部机理 289
数据结构 289
内核变量 297
性能计数器 297
有关的函数 298
6.2 CreateProcess的流程 300
阶段1:打开将要被执行的映像 302
阶段2:创建Windows执行体进程对象 304
阶段3:创建初始线程,以及它的栈和执行环境 308
阶段4:将新进程通知Windows子系统 309
阶段5:启动初始线程的执行 310
阶段6:在新进程环境下执行进程初始化 310
6.3 线程的内部机理 313
数据结构 313
内核变量 320
性能计数器 321
有关的函数 322
一个线程的产生 322
6.4 检查线程活动 323
6.5 线程调度 325
Windows调度的概述 326
优先级别 327
Windows调度API 330
有关的工具 331
实时优先级 333
线程状态 334
分发器数据库 338
时限 340
调度情形 345
环境切换 347
空闲(Idle)线程 348
优先级提升 348
多处理器系统 357
多处理器的线程调度算法 366
6.6 作业对象 369
6.7 本章总结 374
第7章 内存管理 375
7.1 内存管理器简介 375
内存管理器组件 376
内部同步 377
配置内存管理器 378
检查内存的使用情况 378
7.2 内存管理器提供的服务 382
大页面和小页面 382
保留的和提交的页面 384
锁住内存 385
分配粒度 385
共享内存和映射文件 386
保护内存 388
“不可执行”页面保护 390
写时复制 392
堆管理器 394
地址窗口扩展 399
7.3 系统内存池 401
配置内存池的大小 401
监视内存池的使用 404
预读列表(Look-Aside List) 408
驱动程序检验器(Driver Verifier) 409
7.4 虚拟地址空间的布局结构 413
x86用户地址空间的布局结构 415
x86系统地址空间的布局结构 417
x86会话空间 418
系统页表项(PTE,Page Table Entry) 421
64位地址空间布局结构 422
7.5 地址转译 425
x86虚拟地址转译 425
地址转译快查缓冲区 434
物理地址扩展(PAE) 435
IA-64虚拟地址转译 437
x64虚拟地址转译 438
7.6 页面错误处理 439
无效PTE 440
原型PTE 441
页面换入I/O 443
冲突的页面错误 444
页面文件 444
7.7 虚拟地址描述符 448
7.8 内存区对象 450
7.9 工作集 457
按需换页 458
7.10 逻辑预取器 458
放置策略 462
工作集管理 463
平衡集管理器和交换器 466
系统工作集 467
7.11 页面帧编号数据库 469
页面列表的动态变化 472
已修改页面写出器 475
PFN数据结构 476
低内存通知和高内存通知 479
7.12 本章总结 483
第8章 安全性 485
8.1 安全系统组件 488
8.2 保护对象 492
访问检查 493
安全描述符和访问控制 506
8.3 账户权限和特权 516
账户权限 517
特权 518
超级特权 523
8.4 安全审计 524
8.5 登录(Logon) 526
Winlogon初始化 528
用户登录步骤 529
8.6 软件限制策略 533
8.7 本章总结 535
第9章 I/O系统 537
9.1 I/O系统组件 537
I/O管理器 539
典型的I/O处理过程 540
9.2 设备驱动程序 541
设备驱动程序的类型 541
驱动程序的结构 548
驱动程序对象和设备对象 550
打开设备 555
9.3 I/O处理 561
I/O类型 561
映射文件I/O和文件缓存 564
I/O请求包 564
针对单层驱动程序的I/O请求 569
针对分层的驱动程序的I/O请求 577
I/O完成端口 585
驱动程序检验器(Driver Verifier) 589
9.4 即插即用(PnP)管理器 590
即插即用支持的级别 591
驱动程序对于即插即用的支持 592
驱动程序加载、初始化和安装 594
驱动程序安装 603
9.5 电源管理器 607
电源管理器的操作 609
驱动程序的电源操作 610
驱动程序对于设备电源的控制 613
9.6 本章总结 613
第10章 存储管理 615
10.1 有关存储的术语 615
10.2 磁盘驱动程序 616
Ntldr 616
磁盘类、端口和小端口驱动程序 617
磁盘设备对象 620
分区管理器 622
10.3 卷的管理 622
基本磁盘 624
动态磁盘 626
多分区卷的管理 632
卷名字空间 638
卷的I/O操作 646
虚拟磁盘服务 648
卷影像(shadow)拷贝服务 649
10.4 本章总结 654
第11章 缓存管理器 655
11.1 缓存管理器的关键特性 655
单个中心化的系统缓存 656
内存管理器 656
缓存一致性 656
虚拟块缓存 658
流式缓存机制 658
对可恢复文件系统的支持 658
11.2 缓存的虚拟内存管理 660
11.3 缓存的大小 662
LargeSystemCache 662
缓存的虚拟大小 663
缓存的工作集大小 665
缓存的物理大小 667
11.4 缓存的数据结构 668
系统范围的缓存数据结构 669
针对每个文件的缓存数据结构 670
11.5 文件系统接口 674
从缓存中来回拷贝数据 676
通过映射和锁定接口进行缓存 677
通过直接内存访问接口进行缓存 678
11.6 快速I/O 679
11.7 预读(Read Ahead)和滞后写(Write Behind) 682
智能预读 682
回写缓存(Write-Back Caching)和延迟写(Lazy Writing) 683
写节流(Write Throttling) 686
系统线程 687
11.8 本章总结 688
第12章 文件系统 689
12.1 Windows文件系统格式 690
CDFS 690
UDF 691
FAT12、FAT16和FAT32 691
NTFS 694
12.2 文件系统驱动程序总体结构 694
本地FSD 695
远程FSD 696
文件系统操作 700
文件系统过滤型驱动程序 705
12.3 诊断文件系统的问题 711
Filemon的基本和高级模式 711
Filemon诊断技巧 712
12.4 NTFS设计目标和特性 717
高端(High-End)文件系统的需求 717
NTFS的高级特性 719
12.5 NTFS文件系统驱动程序 729
12.6 NTFS在磁盘上的结构 732
卷(volume) 732
簇(cluster) 732
主文件表(MFT) 733
文件引用号 739
文件纪录 740
文件名 742
驻留的和非驻留的属性 744
数据压缩和稀疏文件 747
变化日志文件 752
索引 753
对象ID 754
配额跟踪 755
统一的安全性 756
重解析点 758
12.7 NTFS的恢复支持 758
文件系统设计的演变 759
日志记录 761
恢复 767
NTFS的坏簇恢复 771
12.8 加密文件系统(EFS)安全性 775
第一次加密一个文件 778
解密过程 783
加密文件的备份 784
12.9 本章总结 785
第13章 网络 787
13.1 Windows的网络总体结构 787
OSI参考模型 787
Windows网络组件 789
13.2 网络API 791
Windows套接字(Windows Sockets) 791
远过程调用 798
Web访问API 803
命名管道和邮件槽 804
NetBIOS 811
NetBIOS的操作 812
其他的网络API 813
13.3 多重定向器支持 815
多提供者转发器 816
多UNC提供者 818
13.4 名称解析 820
域名系统 820
Windows Internet名称服务 820
13.5 协议驱动程序 821
TCP/IP的扩展 824
13.6 NDIS驱动程序 828
NDIS小端口的变化形式 832
面向连接的NDIS 832
外接NDIS(Remote NDIS) 835
QOS 836
13.7 绑定 838
13.8 分层的网络服务 839
远程访问(Remote Access) 839
活动目录 840
网络负载平衡 841
文件复制服务 843
分布式文件系统 843
13.9 本章总结 844
第14章 崩溃转储分析 845
14.1 Windows为什么会崩溃 845
14.2 蓝屏 846
14.3 崩溃转储文件 849
崩溃转储的生成 852
14.4 Windows错误报告 853
14.5 在线崩溃分析 854
14.6 基本的崩溃转储分析 855
Notmyfault 855
基本的崩溃转储分析 856
详细的分析 858
14.7 使用崩溃诊断工具 860
缓冲区溢出和特殊内存池 861
代码改写和系统代码写保护 863
14.8 高级的崩溃转储分析 864
栈破坏 865
挂起的系统或无响应的系统 866
当没有崩溃转储时 869
术语表 871
术语对照表 895
索引 901
《深入解析Windows操作系统,第4版》的读者对象是那些想要理解Microsoft Windows 2000、Windows XP和Microsoft Windows Server 2003操作系统的核心组件内部工作机理的高级计算机专业人员(包括开发人员和系统管理员)。开发人员利用这些知识,可以在构建Windows平台上的应用程序时更好地理解各种设计决策背后的基本原理。这样的知识也可以帮助开发人员调试复杂的问题。系统管理员也可以从这些信息中获益,因为理解了操作系统背后的工作原理,可以有助于理解系统的性能行为,以及当事情变糟时更易于诊断各种系统问题。在阅读了这本书以后,你应该可以更好地理解Windows是如何工作的,以及它为什么有这样那样的表现。
本书的结构
前两章(“概念和工具”和“系统结构”)奠定了本书后面用到的术语和概念的基础。接下去的三章——“系统机制”、“管理机制”以及“启动和停机”——讲述了系统中关键的底层机制。接下来的八章解释了操作系统的核心组件:进程、线程和作业、内存管理、安全性、I/O系统、存储管理、缓存管理器、文件系统,以及网络,最后一章介绍了崩溃转储分析。
本书的历史
本书以前的名称是Inside Windows NT(Microsoft Press,1992,中文版的名称是《Windows NT技术内幕》),现在是第4版。第1版是由Helen Custer著的(在Microsoft Windows NT 3.1的最初发布以前出版)。Inside Windows NT是第一本关于Windows NT的书籍,它提供了有关Windows NT系统的体系结构和设计方面的关键要点。Inside Windows NT,Second Edition(Microsoft Press, 1998)是由David Solomon著的。该书在内容上做了更新,涵盖了Windows NT 4.0,并且大大地提高了技术深度的层次。Inside Windows 2000,Third Edition(Microsoft Press,2000)是由David Solomon和Mark Russinovich合著的。第3版增加了许多新的话题,比如启动和停机、Windows服务的内部机理、注册表的内部机理、文件系统驱动程序、网络,以及Windows 2000中内核的变化,其中,关于Windows 2000中内核的变化,包含了Windows驱动程序模型(WDM,Windows Driver Model)、即插即用、电源管理、Windows管理规范(WMI,Windows Management Instrumentation)、加密、作业对象和终端服务。
第4版的变化
这一最新的版本,现在称为“Microsoft Windows Internals(Fourth Edition)”,在内容上做了更新,以覆盖Windows XP和Windows Server 2003中所做的内核变化,包括对于64位系统的支持。练习用的实验也相应地做了更新,以反映出工具中的变化;新增加的实验用到了一些在第3版写作时尚未可用的新工具。
由于从Windows 2000到后续版本之间的内核变化相对较小(与“Windows NT 4.0和Windows 2000之间的变化”相比较而言),所以,本书中绝大部分内容适用于Windows 2000、Windows XP和Windows Server 2003。因此,除非特别声明,否则一切内容都适用于这三个版本。
练习实验
即使没有访问源代码,你也可以通过一些工具(比如内核调试器)来获得许多有关Windows内部机理的知识。每当可以通过一个工具来揭示或演示Windows内部行为的某一方面时,本书中的“实验”辅助章节就会列出让你自己试用该工具时遵从的步骤。这样的实验遍布全书,我们鼓励你在阅读本书时试一试这些实验——看一看Windows内部是如何工作的,这比你仅仅读一遍本书所得到的印象要深刻得多。
本书没有涵盖的话题
Windows是一个大而复杂的操作系统。本书并没有涵盖与Windows内部机理相关的一切内容,而是把焦点集中在基本的系统组件上。例如,本书没有讲述COM+(Windows分布式面向对象编程基础设施),也没有讲述.NET框架(下一代托管代码的应用程序的基础)。
因为这是一本讲述内部机理的书籍,不是一本用户指南、程序设计或系统管理类型的书籍,所以,本书没有描述如何使用、编程或配置Windows。
提醒和告诫
因为本书讲述的是Windows操作系统中未文档化的内部结构和内部操作的行为(比如内核结构和函数),所以,这些内容有可能会在不同的发行版本中有所变化(外部的接口,比如Windows API,则不会受到不兼容变化的影响)。
说到“受版本变化的影响”,我们并不是指,本书讲述的细节会在不同发行版本中一定有所变化,但是你不能认为它们不会改变。任何使用了这些未文档化接口的软件都有可能在将来
的Windows版本上无法正常工作。更糟的是,在内核模式下运行并且用到了这些未文档化接口的软件(比如设备驱动程序)在新的Windows发行版本中运行时可能会导致系统崩溃。
支持
我们做了各种努力来确保本书的精确性。如果你遇到了任何问题,或者有任何疑问,请参考下面列出的资源。
来自作者的支持
本书远未达到完美。毫无疑问,它包含一些不精确的地方;或者也有可能,我们忽略了一些本该讲述的话题。如果你发现了任何你认为不正确的地方,或者你相信我们应该包含一些尚未涵盖的材料,欢迎发送电子邮件到windowsinternals@sysinternals.com。本书的更新和修正将张贴在www.microsoft.com/technet/sysinternals/information.windowsinternals.mspx页面上。
来自出版商Microsoft Press的支持
Microsoft也通过Web为本书提供修正内容,地址如下:
http://www.microsoft.com/learning/support
你可以直接连接到Microsoft学习知识库(Microsoft Learning Knowledge Base),针对你学习过程中可能碰到的问题,输入一个相关的查询请求,Web地址是:http://www.microsoft.com/learning/support/search.asp。
除了直接给作者们发送反馈信息以外,如果你对本书的表述或用途有任何建议、疑问或者想法,可以通过以下任何一种方法将它们发送给Microsoft。
通信地址:
Microsoft Press
Attn: Windows Internals Editor
One Microsoft Way
Redmond, WA 98052-6399
电子邮件地址:
mspinput@microsoft.com
请注意,通过上述地址并不提供产品支持。关于Microsoft Windows的支持信息,请访问www.microsoft.com/windows。你也可以在工作日的太平洋时间上午6点到下午6点打电话给(425) 635-7011,呼叫标准支持程序,或者搜索Microsoft的在线支持站点:suppport.microssft.com/support。
现在我们已经了解了必须熟悉的术语、概念和工具,所以,我们准备开始挖掘Microsoft Windows操作系统的内部设计目标和数据结构。这一章讲述系统的总体结构——关键的部件、它们相互之间如何交互,以及它们分别运行在什么样的环境下。为了提供一个有助于理解Windows内部机理的框架,首先回顾一下最初的需求和设计目标,这些需求和目标基本上勾画出了Windows系统最初的设计和规范。
2.1 需求和设计目标
回到1989年,下面的需求导致了Windows NT的以下规范:
n 提供一个真正32位的、抢先式的(preemptive)、可重入的(reentrant)虚拟内存操作系统;
n 在多种硬件体系结构和平台上运行;
n 可在对称多处理器系统(symmetric multiprocessing systems)上运行,并且能很好地适应处理器的数量;
n 成为一个主要的分布式计算平台,无论是作为网络客户还是服务器;
n 能够运行大多数已有的16位MS-DOS和Microsoft Windows 3.1应用程序;
n 符合政府对于POSIX 1003.1兼容性的要求;
n 符合政府和工业界对于操作系统安全性方面的要求;
n 支持Unicode,以便很容易地适应全球市场。
要创建一个满足这些需求的系统,必须做出数千个决定;为了便于做出这些决定,Windows NT设计小组在项目开始之初选择了下面的设计目标:
n 扩展性(Extensibility) 编写的系统代码必须能够随着市场需求的变化而自如地增长和改变;
n 可移植性(Portability) 系统必须能运行在多种硬件体系结构上,必须能根据市场的需要,相对容易地移到新的体系结构上;
n 可靠性和健壮性(Reliability and Robustness) 系统应该能够保护自己,不会因内部的错误和外部的篡改而不能工作。应用程序应该无法伤害操作系统或者其他的应用程序;
n 兼容性(Compatibility) 虽然Windows NT应该扩展已有的技术,但是它的用户界面和API应该与老版本的Windows和MS-DOS兼容。而且它也应该能与其他的系统,比如UNIX、OS/2和NetWare,很好地互操作;
n 性能(Performance) 在其他设计目标的约束下,系统在每一种硬件平台上应尽可能运行得更快,对外部的响应尽可能地及时。
随着我们挖掘Windows内部结构和内部操作的各种细节,你将会看到,这些原始的设计目标和市场要求是如何成功地融入到系统的构造过程中的。但是,在我们开始挖掘内部细节之前,先来看一下Windows的总体设计模型,并且将它与其他的现代操作系统作一比较。
喜欢深入解析:Windows操作系统(第4版) [平装]请与您的朋友分享,由于版权原因,读书人网不提供图书下载服务