第一章 操作系统概述 1
1.1 操作系统的概念 1
1.1.1 操作系统的地位 1
1.1.2 操作系统的作用 2
1.1.3 操作系统的定义 3
1.2 操作系统的历史 3
1.2.1 操作系统的产生 3
1.2.2 操作系统的完善 5
1.2.3 操作系统的发展 6
1.3 操作系统的特性 7
1.3.1 并发性 7
1.3.2 共享性 7
1.3.3 异步性 7
1.3.4 虚拟性 8
1.4 操作系统的分类 8
1.4.1 多道批处理操作系统 8
1.4.2 分时操作系统 9
1.4.3 实时操作系统 10
1.4.4 通用操作系统 11
1.4.5 单用户操作系统 11
1.4.6 网络操作系统 12
1.4.7 分布式操作系统 12
1.4.8 多处理器操作系统 13
1.4.9 嵌入式操作系统 14
1.4.10 多媒体操作系统 15
1.4.11 智能卡操作系统 15
1.5 操作系统的硬件环境 15
1.5.1 定时装置 15
1.5.2 系统栈 16
1.5.3 特权指令与非特权指令 16
1.5.4 处理器状态及状态转换 16
1.5.5 地址映射机构 17
1.5.6 存储保护设施 17
1.5.7 中断装置 18
1.5.8 通道与DMA控制器 18
1.6 操作系统的界面形式 18
1.6.1 交互终端命令 18
1.6.2 图形用户界面 19
1.6.3 作业控制语言 19
1.6.4 系统调用命令 19
1.7 操作系统的运行机理 20
1.8 研究操作系统的几种观点 20
1.8.1 进程观点 21
1.8.2 资源管理观点 21
1.8.3 虚拟机观点 21
1.9 系统举例 22
1.9.1 Linux系统 22
1.9.2 Windows 2000/XP系统 22
习题一 22
第二章 进程、线程与作业 24
2.1 多道程序设计 24
2.1.1 单道程序设计的缺点 24
2.1.2 多道程序设计的提出 25
2.1.3 多道程序设计的问题 27
2.2 进程的引入 27
2.2.1 进程的概念 28
2.2.2 进程状态及状态转换 28
2.2.3 进程控制块 29
2.2.4 进程的组成与上下文 29
2.2.5 进程的队列 31
2.2.6 进程的类型和特性 31
2.2.7 进程间的相互联系与相互作用 33
2.2.8 进程的创建与撤销 33
2.2.9 进程与程序的联系和差别 34
2.3 线程与轻进程 34
2.3.1 线程的引入 34
2.3.2 线程的概念 35
2.3.3 线程的结构 35
2.3.4 线程控制块 36
2.3.5 线程的实现 36
2.3.6 线程的应用 38
2.4 作业 40
2.4.1 批处理作业 40
2.4.2 交互式作业 40
2.5 系统举例 42
2.5.1 Java线程 42
2.5.2 Linux进程与线程 43
2.5.3 Windows 2000/XP进程、线程与纤程 44
习题二 47
第三章 中断与处理器调度 48
3.1 中断与中断系统 48
3.1.1 中断概念 48
3.1.2 中断装置 48
3.1.3 中断处理程序 52
3.2 处理器调度 60
3.2.1 处理器调度算法 60
3.2.2 处理器调度时机 68
3.2.3 处理器调度过程 69
3.3 调度级别与多级调度 70
3.3.1 交换与中级调度 70
3.3.2 作业与高级调度 70
3.4 实时调度 72
3.4.1 最早截止期优先调度 74
3.4.2 速率单调调度 74
3.5 系统举例 76
3.5.1 Linux进程调度 76
3.5.2 Windows 2000/XP线程调度 76
习题三 78
第四章 互斥、同步与通信 81
4.1 并发进程 81
4.1.1 前驱图的定义 81
4.1.2 顺序程序及其特性 82
4.1.3 并发程序及其特性 82
4.1.4 程序并发执行的条件 84
4.1.5 并发程序的表示 85
4.1.6 与时间有关的错误 85
4.2 进程互斥 86
4.2.1 共享变量与临界区 86
4.2.2 临界区与进程互斥 87
4.2.3 进程互斥的实现 88
4.3 进程同步 99
4.3.1 进程同步的概念 99
4.3.2 进程同步机制 100
4.3.3 信号量与PV操作 100
4.3.4 条件临界区 109
4.3.5 管程 111
4.3.6 会合 122
4.4 进程高级通信 131
4.4.1 进程通信的概念 131
4.4.2 进程通信的模式 132
4.4.3 直接方式 132
4.4.4 间接方式 136
4.5 系统举例 138
4.5.1 Java中的管程 138
4.5.2 Linux进程通信 138
4.5.3 Windows 2000/XP的并发控制 140
习题四 141
第五章 死锁与饥饿 146
5.1 死锁的概念 146
5.2 死锁的类型 147
5.2.1 竞争资源引起的死锁 147
5.2.2 进程通信引起的死锁 147
5.2.3 其他原因引起的死锁 147
5.3 死锁的条件 147
5.4 死锁的处理 148
5.5 资源分配图 148
5.5.1 资源分配图的定义 148
5.5.2 资源分配图的约简 150
5.6 死锁的预防 150
5.6.1 预先分配策略 150
5.6.2 有序分配策略 151
5.7 死锁的避免 152
5.7.1 安全状态与安全进程序列 152
5.7.2 银行家算法 152
5.8 死锁的发现 155
5.8.1 死锁检测算法 155
5.8.2 死锁检测时刻 157
5.9 死锁的恢复 158
5.10 鸵鸟算法 158
5.11 有关问题的讨论 159
5.11.1 关于充要性算法 159
5.11.2 关于消耗型资源问题 159
5.11.3 关于可剥夺资源问题 160
5.11.4 关于两阶段锁 160
5.12 饥饿与活锁 161
5.13 可复用资源死锁的静态分析 162
5.14 同种组合资源死锁的必要条件 165
5.15 死锁与饥饿的例子 165
5.16 系统举例 169
习题五 170
第六章 存储管理 173
6.1 存储管理的功能 173
6.1.1 存储分配 173
6.1.2 存储共享 173
6.1.3 存储保护 174
6.1.4 存储扩充 175
6.1.5 地址映射 175
6.2 内存资源管理 175
6.2.1 内存分区 175
6.2.2 内存分配 176
6.2.3 碎片与紧凑 178
6.3 存储管理方式 179
6.3.1 单一连续区存储管理 179
6.3.2 页式存储管理 181
6.3.3 段式存储管理 187
6.3.4 段页式存储管理 193
6.4 外存储器管理技术 196
6.4.1 外存空间划分 197
6.4.2 外存空间分配 197
6.5 虚拟存储系统 198
6.5.1 虚拟页式存储管理 198
6.5.2 虚拟段式存储管理 209
6.5.3 虚拟段页式存储管理 216
6.6 系统举例 219
6.6.1 Linux存储管理 219
6.6.2 Windows Vista存储管理 221
习题六 224
第七章 文件系统 227
7.1 文件与文件系统 227
7.1.1 文件 227
7.1.2 文件系统 228
7.2 文件的访问方式 228
7.2.1 顺序访问 228
7.2.2 随机访问 229
7.3 文件的组织 229
7.3.1 文件的逻辑组织 229
7.3.2 文件的物理组织 231
7.4 文件目录 236
7.4.1 文件控制块与目录项 236
7.4.2 文件目录与目录文件 237
7.4.3 单级目录与多级目录 238
7.4.4 文件目录的改进 239
7.4.5 根目录与当前目录 240
7.4.6 文件目录的查找 240
7.5 文件的共享 241
7.5.1 文件共享的目的 241
7.5.2 文件共享的模式 241
7.5.3 文件共享的实现 242
7.6 文件的保护、保密与安全 242
7.6.1 文件的保护 242
7.6.2 文件的保密 243
7.6.3 文件的安全 244
7.7 文件系统的实现 245
7.7.1 内存所需的表目 245
7.7.2 外存空间的管理 247
7.8 文件系统的界面 248
7.9 日志结构文件系统 251
7.10 内存映射文件 252
7.11 系统举例 253
7.11.1 Linux文件系统 253
7.11.2 Windows Vista的NTFS 253
习题七 255
第八章 设备与输入输出管理 257
8.1 设备的分类 257
8.1.1 输入输出型设备与存储型设备 257
8.1.2 块型设备与字符型设备 257
8.1.3 独占型设备与共享型设备 258
8.2 设备的物理特性 258
8.2.1 输入输出型设备的物理特性 258
8.2.2 存储型设备的物理特性 258
8.3 数据传输方式 261
8.3.1 程序控制查询方式 261
8.3.2 中断驱动方式 261
8.3.3 DMA方式 262
8.3.4 通道方式 263
8.4 设备分配与去配 265
8.4.1 独占型设备的分配与去配 265
8.4.2 共享型设备的分配与去配 267
8.5 设备驱动 267
8.5.1 通道程序 267
8.5.2 设备启动 268
8.5.3 中断处理 268
8.6 设备调度 268
8.6.1 磁盘输入输出参数 269
8.6.2 磁盘引臂调度算法 269
8.6.3 磁盘访问举例 273
8.7 缓冲技术 273
8.7.1 缓冲技术的引入 273
8.7.2 硬缓冲与软缓冲 274
8.7.3 私用缓冲与公共缓冲 274
8.7.4 单缓冲、双缓冲与循环缓冲 274
8.7.5 缓冲池及其管理 274
8.7.6 缓冲技术的实现 275
8.8 输入输出进程 278
8.9 RAID技术 279
8.9.1 RAID级别 279
8.9.2 硬件RAID与软件RAID 284
8.10 虚拟设备 284
8.10.1 虚拟设备的引入 284
8.10.2 虚拟设备的实现 285
8.10.3 虚拟设备举例 285
8.11 稳定存储器 288
8.12 系统举例 289
习题八 289
第九章 网络操作系统与分布式操作系统 291
9.1 计算机网络 291
9.1.1 计算机网络的概念 291
9.1.2 计算机网络的组成 291
9.1.3 计算机网络的分类 292
9.1.4 计算机网络的拓扑结构 293
9.2 通信与协议 295
9.3 网络服务 296
9.3.1 远程登录 296
9.3.2 远程文件传输 297
9.4 计算模型 297
9.4.1 数据迁移 297
9.4.2 计算迁移 297
9.5 事件排序 300
9.5.1 先发生关系 300
9.5.2 全序关系 301
9.6 进程互斥 303
9.6.1 集中方式 303
9.6.2 分布方式 303
9.6.3 标志传递方式 305
9.7 进程同步与进程通信 305
9.7.1 消息传递 305
9.7.2 套接字 306
9.7.3 远程过程调用 306
9.7.4 远程方法启用 309
9.8 死锁处理 309
9.8.1 死锁预防 310
9.8.2 死锁避免 310
9.8.3 死锁检测 310
9.9 资源管理 312
9.9.1 集中式资源管理 312
9.9.2 分布式资源管理 313
9.9.3 层次式资源管理 313
9.10 分布式文件系统 313
9.10.1 一般结构 313
9.10.2 命名与透明性 313
9.10.3 远程文件存取 314
9.10.4 有状态服务与无状态服务 315
9.10.5 缓存策略 315
9.11 系统举例 316
习题九 317
第十章 多核操作系统与多处理器操作系统 319
10.1 问题的提出 319
10.2 并行计算机与并行计算模型 320
10.3 多核处理器架构 321
10.4 内存访问方式 323
10.4.1 均匀存储访问模型 323
10.4.2 非均匀存储访问模型 323
10.4.3 全高速缓存存储访问模型 324
10.4.4 非远程存储访问模型 324
10.5 调度与负载均衡 324
10.5.1 负载均衡的因素 324
10.5.2 多核调度指标 325
10.5.3 多核调度算法 326
10.6 多核并发控制 328
10.6.1 自旋锁 329
10.6.2 队列自旋锁 329
10.7 多核中断与多核通信 330
10.7.1 高级可编程中断控制器 330
10.7.2 多核中断 330
10.7.3 多核通信 330
10.8 高速缓存的一致性 331
10.9 多核启动过程 333
10.10 多核系统效率 334
10.11 系统举例 335
习题十 336
第十一章 操作系统管理 338
11.1 操作系统使用 338
11.1.1 操作系统生成 338
11.1.2 操作系统装入 339
11.1.3 操作系统初启 339
11.1.4 操作系统运行 340
11.2 操作系统维护 340
11.2.1 改正性维护 341
11.2.2 适应性维护 342
11.2.3 完善性维护 342
11.3 操作系统保护 343
11.3.1 域结构 343
11.3.2 访问矩阵 344
11.4 操作系统安全 345
11.4.1 闯入与身份认证 346
11.4.2 程序威胁 348
11.4.3 安全策略 351
11.4.4 可信系统 353
11.5 系统举例 353
习题十一 354
第十二章 操作系统设计 356
12.1 操作系统设计目标 356
12.2 操作系统基本内核 357
12.2.1 内核的基本组成 357
12.2.2 内核各个部分的关系 357
12.3 操作系统体系结构 358
12.3.1 基于共享变量的结构 359
12.3.2 基于信件传递的结构 360
12.3.3 微内核结构 361
12.4 操作系统设计方法 361
12.4.1 模块接口法 361
12.4.2 核扩充法 362
12.4.3 层次结构法 362
12.4.4 面向对象设计方法 367
12.5 系统举例 367
习题十二 370
第十三章 UNIX实例分析 372
13.1 历史回顾 372
13.2 系统结构 373
13.2.1 内核部分 373
13.2.2 外壳部分 375
13.3 进程管理 375
13.3.1 进程组成 375
13.3.2 进程控制块 376
13.3.3 进程状态与状态转换 378
13.3.4 进程调度 379
13.3.5 进程互斥 380
13.3.6 进程同步 380
13.3.7 进程通信 380
13.4 存储管理 384
13.4.1 存储管理方式 384
13.4.2 存储分配算法 384
13.4.3 进程空间扩充 386
13.4.4 交换技术 386
13.4.5 虚拟页式存储管理 387
13.5 文件系统 387
13.5.1 文件类型 388
13.5.2 文件体系 388
13.5.3 文件结构 389
13.5.4 文件目录与连接 389
13.5.5 文件系统映射 390
13.5.6 文件卷的安装 391
13.5.7 磁盘空间管理 393
13.5.8 inode区管理 394
13.5.9 快速文件系统 396
13.5.10 网络文件系统 398
13.6 设备管理 400
13.6.1 设备分配 400
13.6.2 缓冲与缓存 400
13.6.3 预先读与延迟写 405
13.7 系统调用 406
13.7.1 有关进程控制的系统调用命令 407
13.7.2 有关文件的系统调用命令 410
13.8 外壳语言 414
习题十三 415
第十四章 操作系统理论 418
14.1 预备知识 418
14.1.1 自动机 418
14.1.2 资源 421
14.1.3 组合资源与并行活动 423
14.1.4 资源的分类 424
14.1.5 有限自动机的分解 429
14.2 进程 431
14.2.1 进程的概念 431
14.2.2 进程的描述 433
14.3 处理机管理 434
14.3.1 作业管理 434
14.3.2 狭义处理机管理 435
14.3.3 进程管理 436
14.3.4 进程合作 439
14.3.5 死锁 440
14.4 存储管理 443
14.4.1 内存资源的自动机描述 444
14.4.2 虚拟技术 445
14.5 文件系统 447
14.5.1 信息 447
14.5.2 文件资源 447
14.5.3 文件的自动机 447
14.6 设备管理 448
14.6.1 设备描述 448
14.6.2 设备的管理 449
14.6.3 虚拟设备 450
习题十四 452
参考文献 453