新書推薦:
《
无法忍受谎言的人:一个调查记者的三十年
》
售價:HK$
63.8
《
战争社会学专论
》
售價:HK$
118.8
《
剑桥意大利戏剧史(剑桥世界戏剧史译丛)
》
售價:HK$
162.8
《
教育何用:重估教育的价值
》
售價:HK$
65.8
《
理想城市:环境与诗性
》
售價:HK$
85.8
《
大模型推荐系统:算法原理、代码实战与案例分析
》
售價:HK$
97.9
《
逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
》
售價:HK$
137.5
《
工业互联网导论
》
售價:HK$
97.9
|
內容簡介: |
本书是Windows技术权威参考书的*版本,本书主要介绍了基于Windows 7 and Windows Server 2008 R2的核心技术与底层技术,全面阐释Windows技术机理,是广大Windows开发人员必备的参考书。
|
關於作者: |
Mark Russinovich(马克·拉希诺维奇)是微软windows Azure组技术人员,是Sysinternals工具的作者之一,合著了《深入解析Windows操作系统》系列图书;David A.Solomon(大卫·A.所罗门)是《深入解析Windows操作系统》系列图书的合著者,并为全球成千上万的开发人员和IT专业人士,包括微软员工,讲授Windows内幕课程。他时常在微软举办的会议中发言,包括TechNet和PDC
范德成,2004年毕业于上海交通大学,在微软和SAP公司有多年项目经验,构建了微型开源项目Robbie''s Shell.潘爱民,任职于阿里巴巴,长期从事软件和系统技术的研究与开发工作,撰写了大量软件技术文章,著译了多部经典计机图书,在国内外学术刊物上发表了30多篇文章。曾经任教于北京大学和清华大学(兼职),后进入工业界,先后任职于微软亚洲研究院、盛大网络发展有限公司和阿里云计算有限公司,目前也是工信部移动操作系统专家组成员。潘爱民先生获得了数学学士学位和计算机科学博士学位,主要研究领域包括软件设计、信息安全、操作系统和互联网技术。
|
目錄:
|
第8章IO系统1
8.1IO系统组件1
IO管理器3
典型的IO处理过程4
8.2设备驱动程序5
设备驱动程序的类型5
WDM驱动程序6
分层的驱动程序7
实验:查看已加载的驱动程序列表9
驱动程序的结构11
驱动程序对象和设备对象13
实验:看一看设备对象15
实验:显示驱动程序和设备对象17
打开设备18
实验:查看设备句柄21
实验:查看Windows设备名称之间的映射23
8.3IO处理24
IO类型24
同步IO和异步IO24
快速IO25
实验:查看一个驱动程序登记的快速IO例程25
映射文件IO和文件缓存26
分散聚集IO27
IO请求包27
IRP栈单元28
实验:查看驱动程序的分发例程29
实验:查看一个线程的未完成IRP29
IRP缓冲区管理30
针对单层驱动程序的IO请求32
为一个中断提供服务33
完成一个IO请求34
同步36
针对分层的驱动程序的IO请求38
实验:查看一个设备栈39
实验:查看IRP40
线程无关IO45
IO取消45
用户发起的IO取消46
线程终止时的IO取消47
实验:调试一个无法被杀死的进程48
IO完成端口49
IoCompletion对象50
使用完成端口50
IO完成端口操作52
IO优先级支持54
IO优先级54
优先化策略55
IO优先级反转的避免(IO优先级继承)57
IO优先级提升和撞升57
实验:非常低和正常IO吞吐量的对比58
实验:IO优先级提升撞升的性能分析59
带宽预留(计划的文件IO)60
容器通知60
驱动程序检验器(Driver Verifier)61
8.4内核模式驱动程序框架(KMDF)63
KMDF驱动程序的结构和操作64
实验:显示KMDF驱动程序65
KMDF数据模型66
KMDF的IO模型69
8.5用户模式驱动程序框架(UMDF)72
8.6即插即用(PnP)管理器76
即插即用支持的级别77
驱动程序对于即插即用的支持77
驱动程序加载、初始化和安装79
Start值80
设备列举81
实验:将设备树转储出来84
设备栈85
设备栈的驱动程序加载86
实验:在设备管理器中查看详细的devnode信息88
驱动程序安装90
实验:检查一个驱动程序的INF文件92
实验:查看目录(catalog)文件93
8.7电源管理器94
电源管理器的操作96
驱动程序的电源操作97
实验:查看一个驱动程序的电源映射关系97
实验:查看系统的电源能力和策略98
驱动程序和应用程序对于设备电源的控制100
电源可用性请求100
实验:在调试器中查看一个电源可用性请求101
实验:利用Powercfg查看电源可用性请求103
处理器电源管理(PPM)103
核心停运的策略104
利用率函数105
实验:查看利用率和频率的信息106
实验:查看利用率和频率的历史107
算法覆盖108
增加减少动作108
各种阈值和策略的设置109
实验:查看当前的核心停运策略111
性能检查算法112
实验:查看当前的PPM检查信息116
8.8本章总结118
第9章存储管理119
9.1有关存储的术语119
9.2磁盘设备120
旋转磁盘120
磁盘的扇区格式120
固态硬盘122
NAND型闪存122
文件的删除和irim命令124
9.3磁盘驱动程序125
Winload125
磁盘类、端口和小端口驱动程序126
iSCSI驱动程序127
多路径IO(MPIO)驱动程序128
实验:观察物理磁盘IO130
磁盘设备对象130
分区管理器131
9.4卷的管理132
基本磁盘133
MBR风格的分区133
GPT(GUID分区表)分区方案133
基本磁盘卷管理器134
动态磁盘135
LDM数据库135
实验:使用LDMDump来查看LDM数据库137
LDM和GPT或MBR风格的分区方案139
动态磁盘的卷管理器140
多分区卷的管理140
跨距卷141
条带卷142
实验:观察镜像卷的IO操作143
RAID-5卷145
卷名字空间145
挂载管理器146
挂载点147
卷的挂载148
实验:查看VPB149
卷的IO操作152
虚拟磁盘服务153
9.5虚拟硬盘(VHD文件)支持155
附载VHD的操作156
嵌套的文件系统156
9.6BitLocker驱动器加密157
加密密钥159
可信平台模块(TPM)161
BitLocker引导过程163
BitLocker密钥的恢复165
全卷加密驱动程序166
BitLocker的管理167
BitLocker To Go168
9.7卷影像(shadow)拷贝服务170
影像拷贝170
克隆影像拷贝170
写时复制影像拷贝170
VSS的架构170
VSS的操作171
影像拷贝提供者172
实验:查看Microsoft影像拷贝提供者的过滤型设备对象173
Windows中的用途174
备份174
实验:查看影像卷的设备对象174
之前的版本和系统还原175
实验:导航到之前的版本176
实验:映射卷影像设备对象177
9.8本章总结178
第10章内存管理179
10.1内存管理器简介179
内存管理器组件180
内部同步181
检查内存的使用情况182
实验:查看系统内存信息182
10.2内存管理器提供的服务184
大页面和小页面185
保留页面和提交页面187
实验:保留的页面对比提交的页面188
提交限额190
锁住内存190
分配粒度191
共享内存和映射文件192
实验:查看内存映射文件193
保护内存194
不可执行页面保护196
实验:查看进程上的DEP保护199
软件的数据执行保护200
写时复制201
地址窗口扩展203
10.3内核模式堆(系统内存池)204
内存池的大小205
实验:确定最大的池大小值206
监视内存池的使用208
实验:诊断内存池泄漏210
快查表(Look-Aside List)211
实验:查看系统的快查表212
10.4堆管理器212
堆的类型213
堆管理器结构214
堆同步215
低碎片堆215
堆的安全特性216
堆的调试特性217
pageheap218
容错堆218
10.5虚拟地址空间的布局结构219
x86地址空间的布局结构221
实验:检查一个应用程序能否感知大地址空间222
x86系统地址空间的布局结构223
x86会话空间224
实验:查看会话224
实验:查看会话空间的使用情况225
系统页表项(PTE,Page Table Entry)226
实验:查看会话空间的使用情况226
64位地址空间布局结构227
x64虚拟寻址的限制230
Windows x64的16TB限制231
动态的系统虚拟地址空间管理233
实验:查询系统虚拟地址的用量234
实验:设置系统虚拟地址的限制值235
系统的虚拟地址空间配额236
用户地址空间的布局结构237
实验:对用户虚拟地址空间进行分析238
映像随机化239
栈的随机化240
堆的随机化240
内核地址空间中的ASLR240
对安全性缓和措施的控制240
实验:查看进程上的ASLR保护241
10.6地址转译241
x86虚拟地址转译242
页目录245
实验:检查页目录和PDE245
页表和页表项246
页表项中硬件和软件的写位247
页面内的字节248
地址转译快查缓冲区248
物理地址扩展(PAE)249
实验:转译地址251
x64虚拟地址转译253
IA64虚拟地址转译254
10.7页面错误处理255
无效PTE256
原型PTE258
页面换入IO259
冲突的页面错误260
聚簇的页面错误260
页面文件261
实验:查看系统页面文件262
提交用量和系统提交限额263
提交用量和页面文件的大小266
实验:利用任务管理器来查看页面文件使用量266
10.8栈268
用户栈268
实验:创建最大数量的线程268
内核栈269
实验:观察内核栈的使用量269
DPC栈270
10.9虚拟地址描述符270
进程的VAD271
实验:查看虚拟地址描述符272
旋转VAD272
10.10NUMA273
10.11内存区对象274
实验:查看内存区对象275
实验:查看控制区域277
10.12驱动程序检验器280
10.13页面帧编号数据库284
实验:查看PFN数据库287
页面列表的动态变化288
实验:空闲列表和零页面列表289
实验:已修改列表和备用列表291
页面优先级296
实验:观察区分优先级的备用列表298
已修改页面写出器299
PFN数据结构301
实验:查看PFN项304
10.14物理内存的限制305
Windows客户版本的限制306
32位客户的有效内存限制307
10.15工作集309
按需换页309
逻辑预取器310
实验:窥探预取文件内部312
实验:观察预取文件的读和写312
放置策略313
工作集管理314
实验:查看进程工作集大小316
实验:工作集与虚拟大小316
实验:在调试器中查看工作集列表317
平衡集管理器和交换器318
系统工作集319
内存通知事件320
实验:查看内存资源通知事件321
10.16主动式内存管理(Superfetch)322
各个组件322
跟踪过程和日志记录324
场景325
页面优先级和重平衡326
鲁棒性能328
RAM优化软件329
ReadyBoost330
ReadyDrive331
统一缓存332
进程反射334
实验:利用Preflect来观察进程反射的行为336
10.17本章总结337
第11章缓存管理器338
11.1缓存管理器的关键特性338
单个中心化的系统缓存339
内存管理器339
缓存一致性339
虚拟块缓存341
流式缓存机制341
对可恢复文件系统的支持341
11.2缓存的虚拟内存管理342
11.3缓存的大小344
缓存的虚拟大小344
缓存的工作集大小344
实验:查看系统缓存的工作集345
缓存的物理大小345
11.4缓存的数据结构347
系统范围的缓存数据结构347
实验:查看系统缓存的工作集
|
內容試閱:
|
译者序一
在所有介绍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 2000XPServer 2003的应用程序)编写了绝大多数内核代码。他曾经发现和报告了一些与Windows内核相关的软件漏洞,也跟David Solomon一起讲授Windows内部机理的课程。有如此强大的作者组合,再加上Microsoft的内部支持(包括提供源代码,以及Windows开发组的细致解释),本书无疑是Windows最新版本的第一手技术资料。
每一个对Windows操作系统有浓厚兴趣的读者都不应该错过这本书。本书上册介绍了Windows的系统架构、系统机制、管理机制、进程与线程、安全性和网络。下册是上册的直接延续,共有7章,分别介绍了Windows IO、存储管理、内存管理、缓存管理器、文件系统、启动与停机,以及崩溃转储分析。每一章都是一个重要话题,读者既可以在上册的基础上继续深入钻研Windows各个子系统,也可以有选择地阅读某些章节。在阅读过程中,最好能动手做一做书中描述的实验。做这些实验的门槛并不高,但效果非常好,既可以让你直观地领会Windows内部的一些设计与实现,也可以积累一些洞察Windows内部活动的方法,这些方法对于排查Windows平台上出现的问题往往很有帮助。
我与本书的渊源是从第4版(针对Windows XPServer 2003)开始的,后来第5版(针对Windows VistaServer 2008)错过了出版周期,直至这次第6版又有机会翻译。这三个版本,连同后来的第7版(针对Windows 10Server 2016)都采用同样的叙述框架,只是针对最新的Windows版本做了更新。本书讲述的内容,虽然是针对Windows 7Server 2008 R2,但更新幅度较大,尤其是有关64位系统的介绍,有较多新内容。即使读者已经在Windows 8或者Windows 10上工作,本书中的内容仍然对你有价值。另外,如果读者不满足于本书Windows系统机理的系列介绍,而希望进一步理解Windows操作系统的源代码实现以及内核中的各种基础算法,则推荐阅读另一本书《Windows内核原理与实现》,这是我在Windows XPServer 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.compersonal interestspwindowswi_translation_ps.pdf里面讲了很多个人的理解和感悟)。2012年,当好友高博打电话告诉我有机会参与《深入解析Windows操作系统》第6版的翻译时,我非常欣喜。在高博的引荐下,我首次见到了仰慕已久的潘爱民老师。因此我非常感谢高博的引荐和潘爱民老师的认可,感谢电子工业出版社的刘皎和白涛两位编辑,本书的出版离不开他们的策划和编辑。
范德成
2018年1月于上海浦东张江
引言
《深入解析Windows操作系统(第6版)》的读者对象是那些想要理解Microsoft Windows 7和Windows Server 2008 R2操作系统的核心组件内部工作机理的高级计算机专业人员(包括开发人员和系统管理员)。开发人员利用这些知识,可以在构建Windows平台上的应用程序时更好地理解各种设计决策背后的基本原理,调试复杂的问题。系统管理员也可以从这些信息中获益,因为理解了
|
|