本书是在微软中国研究院和美国微软公司的支持下,由美国微软公司提供Windows全面内部技术资料,全国五所知名重点大学操作系统主讲教师组成写作组,历时一年写作完成的一本以Windows 2000/XP为实际示例,讲授计算机操作系统原理的教科书。
本书讲述了当代计算机操作系统的原理,并具体分析了操作系统原理在Windows 2000/XP中的实现技术和方法,有理论、有示例。既有设计思想精要的提炼,又有具体实现细节的分析。
本书是第一本用中文出版的、讨论Windows操作系统原理的教科书,也是第一本将讲授操作系统一般原理与分析Windows操作系统内部体系结构相结合的书籍。本书适合作为高等院校计算机和电子工程相关专业的操作系统教科书,也是一本用于设计、开发基于Windows的应用软件,以及编写Windows操作系统驱动程序的重要参考书。同时本书也是微软Windows 2000/XP平台上应用软件设计和开发人员的必备参考书。
序(一)
序(二)
编者的话
第1章 操作系统概述 1
1.1 计算机系统概观 2
1.1.1 计算机的发展与分类 2
1.1.2 计算机系统 3
1.2 操作系统的概念 6
1.2.1 操作系统的地位 6
1.2.2 操作系统的定义 6
1.2.3 操作系统的特征 7
1.3 操作系统的功能 7
1.4 操作系统简史 8
1.5 操作系统分类 12
1.6 研究操作系统的几种观点 14
1.7 Windows操作系统的发展历程 15
1.7.1 Windows的开发过程 16
1.7.2 Windows的版本 16
1.7.3 Windows 早期版本的技术特点 17
1.7.4 Windows 95和Windows 98 18
1.7.5 Windows NT操作系统的技术
特点 19
1.7.6 Windows Embedded家族 21
1.7.7 Windows 2000 22
1.7.8 Windows XP 24
1.7.9 Windows 2000开发的艰辛与规模 27
习题 28
第2章 Windows 2000/XP的体系结构 31
2.1 操作系统的设计 32
2.1.1 操作系统的设计目标 32
2.1.2 操作系统的设计阶段 34
2.1.3 操作系统的结构问题 34
2.1.4 操作系统的结构设计 35
2.2 Windows 2000/XP的操作系统模型 40
2.2.1 Windows 2000/XP的构成 40
2.2.2 Windows 2000/XP的可移植性 41
2.2.3 Windows 2000/XP的对称多处理的
支持 41
2.3 Windows 2000/XP的体系结构 42
2.3.1 内核 42
2.3.2 硬件抽象层 44
2.3.3 执行体 44
2.3.4 设备驱动程序 45
2.3.5 环境子系统和子系统动态链接库 46
2.3.6 系统支持进程 50
2.4 Windows 2000/XP的系统机制 51
2.4.1 陷阱调度 52
2.4.2 对象管理器 60
2.4.3 同步 64
2.4.4 本地过程调用 68
2.4.5 系统工作线程 69
2.5 Windows 2000/XP的注册表 69
2.5.1 注册表的数据类型 69
2.5.2 注册表的逻辑结构 70
2.6 Windows 2000/XP服务 71
2.6.1 服务应用程序 71
2.6.2 服务帐号 73
2.6.3 交互式服务 74
2.6.4 服务控制器 74
2.7 Windows 2000/XP的管理机制 81
2.7.1 WMI的体系结构 81
2.7.2 数据生产者 83
2.7.3 通用信息模型和管理对象格式
语言 83
2.7.4 WMI名字空间 84
2.7.5 类联合 84
2.7.6 WMI对象浏览器 84
2.7.7 WMI执行 84
2.7.8 WMI安全 84
习题 84
第3章 进程和处理器管理 89
3.1 进程 90
3.1.1 程序的顺序执行和并发执行 90
3.1.2 进程的定义和描述 91
3.1.3 进程的状态转换 92
3.2 进程控制 96
3.2.1 进程的创建和退出 96
3.2.2 进程的阻塞和唤醒 97
3.2.3 Windows 2000/XP进程管理 98
3.3 线程 99
3.3.1 线程的概念 99
3.3.2 进程和线程的比较 101
3.3.3 Windows 2000/XP线程 101
3.4 进程互斥和同步 103
3.4.1 互斥算法 103
3.4.2 信号量 106
3.4.3 经典进程同步问题 109
3.4.4 管程 111
3.4.5 Windows 2000/XP的进程互斥和
同步 112
3.5 进程间通信 114
3.5.1 Windows 2000/XP的信号 114
3.5.2 Windows 2000/XP基于文件映射的
共享存储区 115
3.5.3 Windows 2000/XP管道 116
3.5.4 Windows 2000/XP邮件槽 116
3.5.5 套接字 117
3.6 死锁问题 117
3.6.1 概述 117
3.6.2 死锁的预防 118
3.6.3 死锁的检测 119
3.6.4 死锁的避免 119
3.6.5 解决死锁问题的综合方法 120
3.7 处理器调度概述 120
3.7.1 处理器调度的类型 120
3.7.2 调度的性能准则 120
3.7.3 进程调度器 121
3.8 调度算法 122
3.8.1 先来先服务算法 122
3.8.2 最短作业优先算法 122
3.8.3 时间片时钟算法 123
3.8.4 多级队列算法 123
3.8.5 优先级算法 123
3.8.6 多级反馈队列算法 124
3.9 Windows 2000/XP的线程调度 124
3.9.1 Windows 2000/XP的线程调度
特征 124
3.9.2 Win32中与线程调度相关的应用程序
编程接口 125
3.9.3 线程优先级 126
3.9.4 线程时间配额 128
3.9.5 调度数据结构 130
3.9.6 调度策略 132
3.9.7 线程优先级提升 134
3.9.8 对称多处理器系统上的线程调度 137
3.9.9 空闲线程 139
习题 139
参考文献 140
第4章 存储体系 141
4.1 存储管理的基本原理 142
4.1.1 内存管理方法 142
4.1.2 虚拟存储器 147
4.1.3 磁盘存储管理 151
4.1.4 高速缓存管理 155
4.2 Windows 2000/XP内存管理 158
4.2.1 地址空间的布局 159
4.2.2 地址转换机制 164
4.2.3 用户空间内存分配方式 170
4.2.4 系统内存分配 175
4.2.5 缺页处理 176
4.2.6 工作集 181
4.2.7 物理内存管理 185
4.2.8 其他内存相关机制 192
4.3 Windows 2000/XP外存管理 195
4.3.1 Windows 2000/XP存储的演变 196
4.3.2 分区 197
4.3.3 驱动程序 199
4.3.4 多重分区管理 202
4.3.5 卷名字空间 206
4.4 Windows 2000/XP高速缓存管理 208
4.4.1 高速缓存的结构 211
4.4.2 高速缓存的大小 212
4.4.3 高速缓存的数据结构 214
4.4.4 高速缓存的操作 218
4.4.5 高速缓存支持例程 223
4.4.6 写阻塞 225
4.4.7 小结 225
习题 225
第5章 文件系统 227
5.1 文件概念与实现 228
5.1.1 文件 228
5.1.2 文件实现 231
5.2 目录概念与实现 235
5.2.1 目录 235
5.2.2 目录实现 239
5.3 文件系统 240
5.3.1 文件系统模型 240
5.3.2 文件系统可恢复性 243
5.3.3 文件系统安全性 244
5.4 Windows FSD体系结构 246
5.4.1 本地FSD 246
5.4.2 远程FSD 246
5.4.3 FSD与文件系统操作 247
5.5 Windows文件系统概述 248
5.5.1 CDFS与UDF 249
5.5.2 FAT12. FAT16与FAT32 249
5.6 NTFS设计目标与高级特性 252
5.6.1 NTFS设计目标 252
5.6.2 NTFS的高级特性 253
5.7 NTFS文件系统驱动程序 258
5.8 NTFS磁盘结构 259
5.8.1 卷 259
5.8.2 簇 259
5.8.3 主控文件表 260
5.8.4 文件引用号 262
5.8.5 文件记录 262
5.8.6 文件名称 264
5.8.7 常驻属性与非常驻属性 264
5.8.8 索引 266
5.8.9 数据压缩 267
5.9 NTFS可恢复性支持 268
5.9.1 日志记录的实现 268
5.9.2 可恢复性实现 272
5.10 NTFS坏簇恢复支持 274
5.11 NTFS安全性支持 275
5.11.1 注册回调函数 277
5.11.2 首次加密文件 277
5.11.3 解密文件 279
5.11.4 备份加密文件 280
习题 280
第6章 I/O系统 281
6.1 I/O系统概述 282
6.1.1 设备管理的重要性 282
6.1.2 设备的分类 283
6.1.3 I/O设备的性能标准 284
6.1.4 I/O系统的功能 284
6.1.5 设备分配 288
6.1.6 I/O系统功能的实现 292
6.2 I/O 软件的组成 293
6.2.1 I/O 软件的目标 293
6.2.2 中断处理程序 293
6.2.3 设备驱动程序 296
6.2.4 与设备无关的系统软件 298
6.2.5 用户空间的I/O 软件 299
6.3 Windows 2000/XP的I/O系统结构和
模型 301
6.3.1 I/O管理器 303
6.3.2 PnP管理器 303
6.3.3 电源管理器 304
6.4 Windows 2000/XP I/O系统的数据
结构 307
6.4.1 文件对象 307
6.4.2 驱动程序对象和设备对象 309
6.4.3 I/O请求包 310
6.5 Windows 2000/XP的设备驱动程序 311
6.5.1 驱动程序结构 314
6.5.2 同步 316
6.6 Windows 2000/XP的I/O处理 316
6.6.1 I/O的类型 317
6.6.2 对单层驱动程序的I/O请求 318
6.7 小结 320
习题 320
第7章 网络 321
7.1 网络基本原理 322
7.1.1 OSI参考模型 323
7.1.2 TCP/IP参考模型 324
7.1.3 其他基本概念 326
7.2 Windows 2000网络体系结构 328
7.2.1 网络API 329
7.2.2 网络资源的名字解析 342
7.2.3 协议驱动程序 347
7.2.4 NDIS驱动程序 348
7.3 Windows 2000的层次化网络服务 350
7.3.1 远程访问 351
7.3.2 活动目录 351
7.3.3 网络负载平衡 352
7.3.4 文件复制服务 353
7.3.5 分布式文件系统 353
7.3.6 TCP/IP的一些扩展特性 354
7.4 小结 355
习题 356
第8章 Windows应用程序设计 357
8.1 Win32 API 358
8.2 Windows应用程序设计模式 359
8.2.1 窗口 360
8.2.2 事件驱动 361
8.2.3 Windows应用程序的开发流程 363
8.3 Windows应用程序的基本结构 364
8.3.1 WinMain函数 364
8.3.2 窗口函数 369
8.4 结构化异常处理 371
8.4.1 异常处理 372
8.4.2 终止处理 375
8.4.3 软件异常 377
8.5 动态链接库 378
8.5.1 动态链接与静态链接 378
8.5.2 DLL到进程地址空间的映射 379
8.5.3 DLL的入口点函数 381
8.5.4 DLL的创建和使用 383
习题 384
第9章 Windows设备驱动程序设计 385
9.1 Windows 2000/XP的设备驱动程序 386
9.2 WDM的核心概念和数据结构 388
9.2.1 设备和驱动程序的分层 388
9.2.2 驱动程序对象 390
9.2.3 设备对象 391
9.2.4 I/O请求包 393
9.3 WDM驱动程序的结构 398
9.3.1 DriverEntry例程 398
9.3.2 AddDevice例程 400
9.3.3 DispatchPnp例程 404
9.3.4 DispatchPower例程 404
9.3.5 WMI 与DispatchWmi例程 405
9.3.6 其他例程 408
9.4 WDM驱动程序的编程 409
9.4.1 WdmDriver的源代码组成 409
9.4.2 初始化与清除 410
9.4.3 PnP与电源管理 410
9.4.4 WMI支持 412
9.4.5 分发例程 416
9.4.6 驱动程序的编译链接 419
9.4.7 驱动程序的安装 419
9.4.8 驱动程序的测试 422
习题 425
实习 427
术语 439
参考文献 445
序(一)
杨芙清
进入新世纪以来, 中国的高技术产业, 特别是信息产业持续快速发展, 信息技术已经成为21世纪经济发展的驱动力.
信息是客观事物状态和运动特征的一种普遍形式. 人类抽象的经验和知识正逐步由软件予以精确地体现. 而软件是人类知识的固化, 是知识经济的基本表征, 它已成为信息时代的新型“物理设施”.
软件是信息化的核心. 国民经济和国防建设. 社会发展. 人民生活都离不开软件, 软件无处不在. 软件产业是增长最快的朝阳产业, 是具有高附加值. 高投入/高产出. 无污染. 低能耗的绿色产业. 软件产业关系到国家经济安全和文化安全, 体现了国家综合实力, 是决定21世纪国际竞争地位的战略性产业.
计算机操作系统正是软件技术含量大. 附加值高的部分, 是软件系统的核心, 是软件基础运行平台的主要成份.
在操作系统的商业产品市场上, 微软公司在20世纪80年代初期为IBM公司的个人计算机配置了PC-DOS操作系统, 几年之后, 又推出了Windows操作系统. 由于Windows采用了图形界面, 易学易用, 又辅之良好的市场策略, 因此它逐渐占据了个人计算机市场的主要地位, 并成为主要的操作系统产品.
本书是在美国微软公司提供Windows操作系统内部技术资料的基础上, 讲述计算机操作系统原理的教科书. 参加本书写作的作者均是国内一些重点高等院校从事计算机操作系统课程教学和科研的老师. 这些老师把在操作系统课程上的长期教学经验. 科研积累同分析Windows操作系统内部技术原理结合起来, 写作完成了这本操作系统教科书.
我相信, 本书的出版会对使用Windows操作系统的读者有所帮助.
中国科学院院士 北京大学教授
杨芙清
2001年7月
序(二)
张亚勤
作为计算机技术的重要基础学科, 操作系统近年来在概念和技术上都有很快的发展. 因此, 一本好的操作系统教材, 除了要有系统的基础理论介绍之外, 还应该结合当前主流操作系统的实例, 这样才能反应最新的技术动态, 使学生们学有所用.
在2000年夏季由微软公司主办的第一届中国高校计算机系系主任座谈会上, 不少老师谈到:在中国, Windows 操作系统已经被广泛地应用于政府. 教育和商业等各个领域, 而一个普遍存在的问题是:用户对Windows的机制和内核技术了解得不够, 从而在很大程度上影响了人们更好地使用Windows操作系统.
诚然, 作为一个现代操作系统, Windows不断地推陈出新. 随着Windows NT. Win CE. Windows 2000和不久即将面世的Windows XP及.NET的不断推出, Windows不再是传统意义上的桌面计算的操作系统, 它正在成为一个网络环境下的平台.
从这个意义上来讲, Windows作为操作系统教学的实例, 既能反映当前操作系统技术的发展方向, 又能结合当前的应用实际, 是一个非常理想的操作系统教学平台.
目前, 国内涉及Windows的使用. 维护和开发的书很多. 但作为教材, 系统讲解Windows的机制和内核, 并适合于中国高校教学特点的书还没有. 要想写成这样一本教材, 是离不开中国高校操作系统教师的努力和微软公司的支持的.
微软中国研究院是微软公司在亚太地区唯一的基础研究机构. 成立三年以来, 除了从事世界一流的基础研究之外, 我们一直把支持中国高校的课程和教材建设. 帮助中国培养高水平的计算机人才作为非常重要的工作.
我欣喜地看到, 8位来自中国著名高校的操作系统专家不断地努力, 从去年的全国操作系统课程研讨会上的倡议, 到今年去微软公司了解Windows源代码, 再到与微软公司Windows组的设计师共同探讨. 在短短的一年多的时间内, 终于把编写一本中文Windows操作系统教材的设想变成了现实.
浏览全书, 我感到这本书既包含了对操作系统原理的系统讲解, 又能紧密结合Windows的内核技术, 其中还配有大量相关的实例. 试验和作业, 确实是一本目前难得的通过Windows实例讲解现代操作系统的教材.
最后, 我想借此机会代表比尔·盖茨(Bill Gates)先生及微软公司表示对支持中国教育事业的长期承诺和诚意. 我们希望今后能和中国高校一起, 交流计算机技术的最新动态, 写出更多这样的好教材, 为中国信息产业的腾飞尽一份力.
微软中国研究院院长
2001年8月