第1部分 概论 1
第1章 引论 1
1.1 系统概述 1
1.1.1 计算机的硬件组织 1
1.1.2 软件的层次与虚拟机的概念 3
1.2 操作系统的形成和发展 4
1.2.1 什么是操作系统 4
1.2.2 操作系统的形成和发展 4
1.3 多道程序设计的概念 6
1.3.1 多道程序设计的引入 6
1.3.2 多道程序设计的概念 6
1.4 操作系统的功能和特性 8
1.4.1 操作系统的功能 8
1.4.2 操作系统的特性 10
1.5 操作系统的类型 10
1.5.1 多道批处理操作系统 11
1.5.2 分时系统 11
1.5.3 实时系统 12
1.5.4 网络操作系统 13
1.6 现代操作系统 15
1.6.1 现代操作系统特点 15
1.6.2 Windows NT简介 16
习题 17
第2章 操作系统的运行环境 19
2.1 硬件环境 19
2.1.1 中央处理器(CPU) 19
2.1.2 主存储器 21
2.1.3 缓冲技术 23
2.1.4 中断技术 24
2.1.5 时钟、时钟队列 28
2.2 操作系统与其他系统软件的关系 29
2.2.1 作业、作业步和进程的关系 29
2.2.2 重定位的概念 30
2.2.3 绝对装入程序和相对装入程序 31
2.3 操作系统与人的接口 33
2.3.1 作业控制语言 34
2.3.2 联机作业控制——终端命令和图形用户接口(GUI) 35
2.4 固件——微程序设计概念 37
2.4.1 微程序设计的概念 37
2.4.2 微程序设计和操作系统 38
习题 39
第2部分 进程、多线程和并行性 41
第3章 进程管理 41
3.1 进程的概念 41
3.1.1 进程的引入 41
3.1.2 进程的定义 42
3.2 进程的状态 43
3.2.1 进程的状态及其变化 43
3.2.2 进程的挂起和解除挂起的状态 44
3.3 进程的描述和管理 45
3.3.1 进程的描述 45
3.3.2 进程管理 46
3.4 进程控制 47
3.4.1 进程的控制原语 47
3.4.2 操作系统与进程控制的执行 52
3.5 UNIX SVR4的进程管理 54
习题 57
第4章 多线程 58
4.1 线程的概念 58
4.1.1 线程的引入 58
4.1.2 线程的概念 59
4.2 线程的状态和线程管理 61
4.2.1 线程的状态 61
4.2.2 线程的描述 62
4.2.3 线程的管理、线程组 66
4.3 多线程的实现 67
4.3.1 概说 67
4.3.2 用户级线程 68
4.3.3 内核级线程 70
4.3.4 KLT和ULT结合的方法 71
4.3.5 线程库 71
4.4 Solaris操作系统的线程机制 72
4.4.1 Solaris的多线程结构 72
4.4.2 轻质进程 73
4.4.3 内核线程 74
4.4.4 用户线程 75
4.4.5 线程的执行 75
4.4.6 内核中断线程 76
4.5 Mach操作系统的线程机制 77
习题 78
第5章 并行性:互斥和同步 79
5.1 概论 79
5.2 临界段 80
5.2.1 临界段的提出 80
5.2.2 临界段的互斥要求 82
5.3 互斥 82
5.3.1 互斥的软件方法 83
5.3.2 互斥的硬件方法 87
5.4 信号量 90
5.4.1 信号量 90
5.4.2 信号量及同步原语 90
5.4.3 同步原语的不可分割性 92
5.4.4 用信号量实现进程间互斥 93
5.4.5 生产者和消费者问题 94
5.4.6 阅读者和写入者问题 96
5.5 管程 97
5.5.1 管程的定义 97
5.5.2 用管程实现同步 98
5.6 进程间的通信 100
5.6.1 进程通信的实现 101
5.6.2 间接通信模式 102
5.6.3 其他通信模式 102
5.7 UNIX的进程同步和通信 103
5.7.1 管道(pipes) 103
5.7.2 消息 104
5.7.3 共享主存段 105
5.7.4 信号量 106
5.7.5 信号或软中断 108
5.8 Solaris线程同步原语 108
习题 109
第3部分 处理器管理、死锁 112
第6章 多处理器管理系统和处理器管理 112
6.1 多处理器系统 112
?6.1.1 多处理器系统的优点 112
?6.1.2 多处理器系统并行性的提高 113
?6.1.3 多处理器的硬件组织 115
6.1.4 多处理器系统的分类 117
6.1.5 主/从式多处理器系统 117
6.2 对称式多处理器系统(SMP) 118
6.2.1 对称式多处理器系统概念 118
6.2.2 多处理器操作系统 118
6.3 调度的层次和作业调度 120
6.3.1 调度的层次 120
6.3.2 作业状态 121
6.3.3 作业的调度 121
6.4 单处理器系统的处理器调度 122
6.4.1 选择调度算法时应考虑的问题 123
6.4.2 调度算法 124
?6.5 多处理器系统的处理器管理和调度 128
6.5.1 多处理器调度的概念 128
6.5.2 负载共享调度 130
6.5.3 专用处理器式调度 131
6.5.4 群调度 131
6.5.5 调度类和多模式调度器 132
6.5.6 实时调度 132
?6.6 UNIX类系统的处理器调度 135
习题 136
第7章 死锁 138
7.1 死锁问题的提出 138
7.2 死锁的必要条件 140
7.2.1 资源的概念 140
7.2.2 死锁的必要条件 140
7.3 死锁的预防 141
7.3.1 预先静态分配法 141
7.3.2 有序资源使用法 142
?7.4 死锁的避免和银行家算法 142
7.4.1 单资源的银行家算法 143
7.4.2 多资源的银行家算法 144
?7.5 死锁检测与恢复 145
7.5.1 死锁的检测 145
7.5.2 死锁的恢复 146
习题 146
第4部分 主存储器管理 148
第8章 实存储器管理技术 148
8.1 引言 148
8.1.1 主存储器的物理组织、多级存储器 148
8.1.2 主存储器管理功能 149
8.2 固定分区 149
8.3 可变分区多道管理技术 151
8.3.1 可变分区存储管理的概念 151
8.3.2 存储分配算法 152
8.3.3 存储器的紧缩和程序的浮动 154
8.3.4 动态重定位的可变分区多道管理 155
8.4 多重分区(多对界地址)管理 157
8.5 简单分页 157
8.6 简单分段 160
8.7 内核主存管理 161
8.7.1 内核主存管理概述 161
8.7.2 2次幂空闲表分配器 162
8.7.3 伙伴系统 162
8.7.4 SVR4的延迟伙伴算法 164
习题 165
第9章 虚拟存储管理 166
9.1 虚拟存储系统的基本概念 166
9.2 分页存储管理 167
9.2.1 分页系统中的地址转换 167
9.2.2 硬件支持 171
9.3 分段存储管理 173
9.3.1 分段概述 173
9.3.2 分段的实现 174
9.4 段页式存储管理 175
9.4.1 段页式存储管理的基本概念 175
9.4.2 段页式存储管理中的地址转换 175
9.4.3 段页式存储管理算法 176
9.4.4 段页式存储管理的优缺点 177
9.4.5 Intel Pentium的段页式机制 178
9.4.6 保护环和调用门 180
9.5 页的置换算法 181
9.5.1 页面访问失效及处理 181
9.5.2 页面置换算法 182
9.5.3 交换区 186
9.6 页架的分配策略 186
9.6.1 物理主存 186
9.6.2 空闲页面链表 187
9.6.3 页架分配中的有关策略 188
9.6.4 分页环境中程序的行为特性 191
9.7 主存共享、快表一致性问题 193
9.7.1 主存共享 193
9.7.2 快表一致性问题 194
9.8 SVR4 UNIX的存储管理 197
习题 199
第5部分 设备和文件管理 201
第10章 设备管理 201
10.1 概述 201
10.2 I/O子系统的层次模型 202
10.2.1 I/O子系统的设计目标 202
10.2.2 I/O子系统的层次模型 203
10.3 I/O硬件组成 204
10.3.1 设备和设备控制器 204
10.3.2 直接存储器访问 205
10.3.3 通道方式和输入输出处理器 206
10.4 设备驱动程序 207
10.4.1 设备和驱动程序分类 207
10.4.2 设备开关表 208
10.4.3 设备驱动程序框架 209
10.5 I/O子系统 211
10.5.1 设备命名 211
10.5.2 输入输出缓冲区 212
10.5.3 I/O子系统独立于设备的工作 215
?10.6 流 216
10.6.1 流的概念 216
10.6.2 消息和队列 218
10.6.3 流I/O 220
10.7 磁盘调度 221
10.7.1 磁盘的硬件特性 221
10.7.2 磁盘调度算法 223
10.8 虚拟设备和SPOOL系统 226
习题 227
第11章 文件系统 229
11.1 文件 230
11.1.1 文件的命名 230
11.1.2 文件的结构 231
11.1.3 文件的类型 232
11.1.4 文件的属性 234
11.1.5 文件的操作 235
11.1.6 文件加锁 235
11.2 目录 236
11.2.1 目录内容 236
11.2.2 文件目录的结构 237
11.2.3 路径名 241
11.2.4 符号连接 242
11.2.5 目录操作 242
11.3 文件系统的实现 243
11.3.1 文件空间的分配和管理 243
11.3.2 UNIX系统的目录实现 246
11.3.3 磁盘空间的管理 248
11.3.4 文件系统在主存的数据结构和打开操作 249
11.3.5 文件系统安装 251
?11.4 虚拟文件系统——多重文件系统框架和接口 251
11.4.1 vnode/vfs体系结构的目标和设计思想 252
11.4.2 虚拟文件系统接口概述 253
11.4.3 安装一个文件系统,虚拟文件系统开关表 255
11.5 安全性和保护 256
11.5.1 用户确认技术 257
11.5.2 保护机制——数据安全性 258
11.5.3 其他 259
11.5.4 文件的转储和恢复 260
习题 261
第6部分 分布式计算机系统、操作系统结构和范例 262
?第12章 分布式计算机系统 262
12.1 概述 262
12.1.1 什么是分布式计算机系统 262
12.1.2 分布式系统的优点 263
12.2 分布式操作系统特点 264
12.2.1 进程通信 264
12.2.2 资源管理 265
12.2.3 系统结构 265
12.3 进程通信 266
12.3.1 进程通信概述 266
12.3.2 TCP/IP通信协议 267
12.3.3 分布式环境的客户/服务器模式 270
12.3.4 分布式进程通信 272
12.4 分布式文件系统 277
12.4.1 分布式文件系统概述 277
12.4.2 分布式文件系统的组成 278
12.4.3 分布式文件系统的体系结构 279
12.4.4 客户端高速缓存和一致性 282
12.5 分布式系统中的互斥与死锁 283
12.5.1 逻辑钟和逻辑时 283
12.5.2 时间戳算法(Lamport算法) 284
12.5.3 令牌传送算法 285
12.6 进程迁移 287
12.6.1 进程迁移的原因 287
12.6.2 进程迁移机制 288
习题 289
第13章 微内核、操作系统的结构和设计 290
13.1 微内核 290
13.1.1 使用微内核结构的优点 290
13.1.2 微内核结构 292
13.1.3 微内核的实现 293
13.2 操作系统的设计 294
13.2.1 设计的目标和原则 294
13.2.2 操作系统的设计 296
13.3 操作系统的结构 298
13.3.1 模块接口法(单块式) 298
13.3.2 层次结构设计法 299
13.3.3 客户/服务器方式 300
习题 301
?第14章 Windows NT操作系统 303
14.1 Windows NT 操作系统概述 303
14.2 Windows NT的设计目标 304
14.3 Windows NT 的系统模型 305
14.4 Windows NT 的结构 307
14.4.1 NT的保护子系统 307
14.4.2 NT执行体 308
14.4.3 客户/服务器模型实现的例子 309
14.4.4 关于NT的结构 310
14.5 Windows NT 的基元成分——对象、进程和线程 310
14.5.1 对象 310
14.5.2 进程 313
14.5.3 线程 315
14.5.4 进程管理程序 317
14.6 微内核和对称多处理器系统 318
14.6.1 微内核和对称多处理器系统(SMP) 318
14.6.2 NT的线程状态转换 318
14.6.3 内核调度程序 319
14.6.4 进程和线程的优先级 322
14.7 NT的同步对象 323
14.7.1 线程同步概述 323
14.7.2 用NT对象进行同步 324
14.8 虚拟存储管理 326
14.8.1 进程的虚似地址空间 326
14.8.2 NT的虚拟分页 327
14.8.3 页面调度策略和工作集 330
14.8.4 页架状态和页架数据结构 331
14.8.5 主存映射文件和视图 332
14.9 输入输出系统 334
14.9.1 输入输出(I/O)系统的结构 335
14.9.2 统一的驱动程序模型 336
14.9.3 异步I/O操作和I/O请求处理过程 337
14.9.4 映射文件I/O 337
14.10 Windows NT的内装网络 337
14.10.1 Windows NT的内装网络的特色 338
14.10.2 Windows NT网络的体系结构 339
14.11 对象管理程序 340
14.12 进程通信——本地过程调用(LPC) 341
14.13 Windows NT的安全性 341
14.13.1 NT安全性 341
14.13.2 存取令牌和安全描体 342
14.14 综述 344
习题 344
参考文献 346