Windows内核原理与实现(第一本用真实的源代码剖析Windows操作系统核心原理的原创著作)
分類: 图书,计算机/网络,操作系统/系统开发,WINDOWS,
作者: 潘爱民 著
出 版 社: 电子工业出版社
出版时间: 2010-5-1字数: 850000版次: 1页数: 689印刷时间: 2010-5-1开本: 16开印次: 1纸张: 胶版纸I S B N : 9787121105289包装: 平装
内容简介本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本书直接以Windows的源代码(WRK, Windows Research Kernel)为参照,因而读者可以了解像Windows这样的复杂操作系统是如何在x86处理器上运行的。
在内容选取方面,本书侧重于Windows内核中最基本的系统部件,同时也兼顾到作为一个操作系统的完整性,所以,本书也介绍了像存储体系、网络、Windows环境子系统等,这些虽然并不位于内核模块但却支撑整个Windows运行的重要部件。在本书最后,也介绍了Windows Server 2003以后的内核发展和变化。
虽然书中有大量关于Windows代码实现的描述,但是本书并没有罗列WRK中的代码,即使读者不对照WRK的源代码,也可以从这些章节的描述中理解Windows的实现机理。在每一个技术专题的介绍中,本书几乎都提供了一个框架图,并且有关键细节的实现分析,这样做的意图是让读者既能够对一项技术有总体上的把握,也通晓关键的实现细节。
Windows操作系统已经有20年历史了,市面上有大量关于Windows技术的文档和书籍,但是,真正从源代码来诠释Windows底层机理的,本书还是第一次尝试。在本书覆盖的内容中,有相当一部分是第一次以文字形式披露出来的,期望这些内容能消除人们对于Windows的神秘感。
写作本书的目的是让对Windows有好奇心的人真正了解到Windows中的核心机理,让计算机专业的学生和老师,以及系统软件工程师可以快速地领略到Windows中先进的系统技术,以及在Windows上编写出更加高效的软件。本书也配备了一些小工具,通过这些小工具,读者可以查看内核中的静态或动态的信息,甚至观察系统的行为,可通过Internet下载这些工具。
作者简介潘爱民,浙江海宁人,获得了南开大学数学学士学位,清华大学工学硕士学位,以及北京大学计算机科学博士学位。他从中学时代开始接触计算机编程,经历了从DOS到Windows各种版本的发展历程。潘爱民曾经长期从事软件技术的研究和开发工作,撰写了大量软件技术文章,1999年曾经是《微电脑世界》杂志社的合作专家。他著写了《COM原理与应用》(1999年出版),翻译了多部经典名作,如《Visual C++技术内幕》(第四、六版)、《C++ Primer中文版》(第三版)、《COM本质论》、《计算机网络》(第四版)等。从2001年开始,潘爱民在北京大学计算机科学技术系承担研究生课程教学,共讲授了三门课程:《组件技术》、《网络与信息安全》和《程序开发环境分析与实践》,深受学生欢迎。2006年秋季在清华大学软件科学实验班讲授《程序设计与算法基础》课程。 潘爱民获得了2001年微软亚洲研究院“微软学者”称号,2002年度北京大学优秀教学奖。他现在微软亚洲研究院从事系统与安全方向的研究工作。
目录第1章 概述
1.1 操作系统基础
1.1.1 计算机系统的硬件资源管理
1.1.2 为应用程序提供执行环境
1.2 学习操作系统之必备知识
1.3 WINDOWS操作系统发展历史
1.4 WINDOWS内核的版本
1.5 操作系统的研究与发展
1.6 本章总结
第2章 WINDOWS系统总述
2.1 现代操作系统的基本结构
2.2 WINDOWS系统结构
2.2.1 Windows内核结构
2.2.2 Windows内核中的关键组件
2.2.3 Windows子系统
2.2.4 系统线程和系统进程
2.3 关于WINDOWS研究内核
2.3.1 WRK包含了什么
2.3.2 WRK源代码说明
2.3.3 本书对WRK源代码的引用
2.4 WINDOWS内核的基本概念
2.4.1 处理器模式
2.4.2 内存管理
2.4.3 进程和线程管理
2.4.4 中断和异常
2.4.5 同步
2.5 WINDOWS内核中的公共管理设施
2.5.1 Windows内核中的对象管理
2.5.2 注册表和配置管理器
2.5.3 事件追踪(ETW)
2.5.4 安全性管理
2.6 WINDOWS引导过程
2.6.1 内核加载
2.6.2 内核初始化
2.6.3 建立用户登录会话
2.7 本章总结
第3章 WINDOWS进程和线程
3.1 进程基本概念
3.1.1 多进程模型
3.1.2 进程和程序
3.2 线程基本概念
3.2.1 线程模型
3.2.2 线程调度算法
3.2.3 线程和进程的关系
3.3 WINDOWS中进程和线程数据结构
3.3.1 内核层的进程和线程对象
3.3.2 执行体层的进程和线程对象
3.4 WINDOWS的进程和线程管理
3.4.1 Windows进程中的句柄表
3.4.2 获得当前线程和进程
3.4.3 进程和线程的创建过程
3.4.4 进程和线程的结束
3.4.5 系统初始进程和线程
3.5 WINDOWS中的线程调度
3.5.1 线程优先级
3.5.2 线程状态转移
3.5.3 时限管理
3.5.4 优先级调度和环境切换
3.6 进程和线程状态监视工具
3.6.1 ProcMon使用示例
3.6.2 ProcMon实现原理
3.7 本章总结
第4章 WINDOWS内存管理
4.1 内存管理概述
4.1.1 页式内存管理
4.1.2 段式内存管理
4.1.3 内存管理算法介绍
4.1.4 Windows内存管理概述
4.2 WINDOWS系统内存管理
4.2.1 系统地址空间初始化
4.2.2 系统地址空间内存管理
4.2.3 系统PTE区域的管理
4.3 进程虚拟内存管理
4.3.1 地址空间的创建和初始化
4.3.2 地址空间切换
4.3.3 虚拟地址空间的管理
4.3.4 内存区对象
4.4 内存页面交换
4.4.1 x86中的PTE
4.4.2 软件PTE:无效PTE和原型PTE
4.4.3 页面错误处理
4.4.4 Windows的写时复制
4.5 物理内存管理
4.5.1 PFN数据库
4.5.2 物理页面的状态变化
4.5.3 物理页面链表的管理和操作
4.5.4 修改页面写出器
4.5.5 进程/栈交换器
4.5.6 低内存通知和高内存通知
4.6 工作集管理
4.6.1 Windows工作集管理器
4.6.2 平衡集管理器
4.7 内存监视工具MEM_MON
4.7.1 Mem_Mon使用介绍
4.7.2 Mem_Mon实现原理
4.8 本章总结
第5章 WINDOWS中的并发和同步
5.1 进程和线程同步基础
5.1.1 并发性基础
5.1.2 进程或线程之间的通讯
5.1.3 经典的同步问题
5.2 WINDOWS中断与异常
5.2.1 硬件中断的发生和处理
5.2.2 中断请求级别(IRQL)
5.2.3 中断对象
5.2.4 DPC(延迟过程调用)
5.2.5 时钟中断和定时器管理
5.2.6 APC(异步过程调用)
5.2.7 异常分发
5.3 不依赖于线程调度的同步机制
5.3.1 提升IRQL实现数据同步
5.3.2 互锁操作
5.3.3 无锁的单链表实现
5.3.4 自旋锁
5.4 基于线程调度的同步机制
5.4.1 线程进入等待
5.4.2 分发器对象
5.4.3 门等待
5.4.4 执行体资源(executive resource)
5.4.5 推锁(push lock)
5.4.6 死锁
5.5 使用工具DPERFLITE
5.5.1 DPerfLite使用示例
5.5.2 DPerfLite实现原理
5.6 本章总结
第6章 WINDOWS I/O系统
6.1 I/O概述
6.1.1 现代计算机系统的I/O
6.1.2 I/O软件技术
6.1.3 Windows的I/O系统结构
6.2 I/O管理器
6.2.1 驱动程序初始化
6.2.2 驱动程序对象和设备对象
6.2.3 文件对象
6.2.4 对象生命周期管理
6.3 即插即用管理器
6.3.1 即插即用的基本要求
6.3.2 Windows中驱动程序的即插即用支持
6.3.3 设备列举与设备树
6.4 电源管理器
6.4.1 电源管理概述
6.4.2 Windows中的电源管理
6.5 设备驱动程序
6.5.1 驱动程序分类
6.5.2 例子驱动程序toaster
6.5.3 驱动程序的代码结构
6.5.4 toaster设备的设备栈
6.5.5 过滤驱动程序的配置和加载
6.5.6 非即插即用驱动程序
6.6 I/O处理
6.6.1 I/O请求包(IRP)
6.6.2 针对独立设备对象的I/O处理
6.6.3 处理I/O请求过程中的事项
6.6.4 针对设备栈的I/O处理
6.6.5 I/O完成端口
6.7 I/O监视工具IRPMON
6.7.1 IRPMon使用介绍
6.7.2 IRPMon实现原理
6.8 本章总结
第7章 WINDOWS存储管理
7.1 存储管理概述
7.1.1 硬件存储体系(Memory hierarchy)
7.1.2 Windows的存储管理结构
7.2 WINDOWS缓存管理
7.2.1 Windows缓存空间的内存管理
7.2.2 缓存管理器的数据访问路径
7.2.3 直接使用缓存中的数据
7.2.4 缓存管理器的预读处理
7.2.5 缓存管理器的延迟写
7.3 WINDOWS卷管理
7.3.1 Windows中存储栈结构
7.3.2 卷的挂载
7.3.3 卷与文件系统
7.3.4 文件对象的I/O处理
7.4 WINDOWS文件系统
7.4.1 文件系统驱动程序结构
7.4.2 RAW文件系统和FsRtl
7.4.3 文件系统的过滤
7.4.4 FAT文件系统
7.4.5 NTFS文件系统
7.5 本章总结
第8章 WINDOWS系统服务
8.1 WINDOWS系统服务原理
8.1.1 Intel x86的用户模式-内核模式切换
8.1.2 Windows的用户模式-内核模式切换
8.1.3 Windows中的系统服务分发
8.1.4 增加系统服务表或表项
8.2 LPC(本地过程调用)服务
8.2.1 LPC结构模型
8.2.2 LPC端口和LPC消息
8.2.3 LPC通讯模型的实现
8.2.4 LPC应用
8.3 命名管道(NAMED PIPE)服务
8.3.1 命名管道的名称解析
8.3.2 命名管道的通讯模型
8.3.3 命名管道的实现
8.4 邮件槽(MAILSLOT)服务
8.4.1 邮件槽的名称解析
8.4.2 邮件槽的通讯模型
8.4.3 邮件槽的实现
8.5 SDT显示工具SDTVIEWER
8.5.1 SDTViewer使用介绍
8.5.2 SDTViewer实现原理
8.6 本章总结
第9章 WINDOWS内核高级话题
9.1 网络
9.1.1 Windows网络体系结构
9.1.2 TDI(传输驱动程序接口)
9.1.3 NDSI(网络驱动程序接口规范)
9.1.4 Windows Vista以后的网络结构
9.2 WINDOWS子系统
9.2.1 Windows子系统结构
9.2.2 Windows子系统初始化与GUI线程
9.2.3 窗口管理
9.2.4 GDI(图形设备接口)
9.2.5 Windows Vista以后的子系统变化
9.3 内核日志
9.3.1 WRK中的内核记录器
9.3.2 利用ETW信息诊断性能问题
9.4 WINDOWS VISTA/SERVER /7的重要变化
9.4.1 MinWin工程
9.4.2 ??
附录A 建立编译和调试WRK环境
A.1 编译WRK
A.2 启动WRK
A.3 调试WRK
附录B 内核代码插入工具KINJECTTOOLKIT
B.1 KINJECTTOOLKIT功能介绍
B.2 KINJECTTOOLKIT的代码实现
B.3 KINJECTTOOLKIT的限制
书摘插图第1章 概述
现代的人们大多是这样认识计算机的:一个人盯着屏幕敲打着键盘,这就是在操纵计算机了。于是,屏幕和键盘就成了计算机的代表物了。更进一步了解计算机的人们知道。屏幕和键盘只不过是计算机的输出和输入而已,计算机的核心在一个机箱里,包括处理器、内存、主板、硬盘和电源等。所有这些构成了计算机的有形部分(实际上,这些部件也在越变越小)。再进一步,真正使用过计算机的人们还知道,光是计算机硬件还不够,还需要各种软件,日常用到的软件包括:办公软件、游戏软件、字典软件、上网软件、聊天软件以及防病毒软件,等等。正是有了这些软件,计算机用起来才这么有趣。所以,虽然软件并不有形(不过,存放软件的介质却是看得见摸得着的),但人们知道它们是切实存在的。那么,操作系统(Operating System)是什么呢?
就本质而言,操作系统也是一种软件,只不过,相对于一般的软件而言,有其特殊性。首先,操作系统往往是随机器配置的,人们常常认为这是机器本身的一部分。只有计算机专业人员或技术维护人员才会安装或更换操作系统。其次,所有的应用软件都建立在操作系统的基础之上,操作系统的发展本身也推动了应用软件的发展。一个众所周知的事实是,Windows操作系统的发展和普及,为大量的应用软件提供了得以存在的平台,各种家用软件也纷纷随之诞生。
……
书摘与插图