第一章 计算机操作系统概论 1
1.1 操作系统的概念 1
1.1.1 从用户使用角度理解操作系统 1
1.1.2 从计算资源管理和控制角度理解操作系统 2
1.1.3 从计算环境角度理解操作系统 3
1.2 操作系统的发展历史 4
1.2.1 串行处理 4
1.2.2 简单批处理系统 5
1.2.3 多道程序批处理系统 7
1.2.4 多道程序设计的实现 9
1.2.5 分时系统 10
1.3 操作系统的体系结构 12
1.3.1 简单结构 12
1.3.2 层次化结构 13
1.3.3 微内核结构 14
1.3.4 模块结构 15
1.3.5 虚拟机 16
1.4 操作系统大观 18
习题 20
第二章 操作系统的硬件基础 22
2.1 计算机硬件结构 22
2.1.1 内存 23
2.1.2 处理器 26
2.1.3 I/O模块 28
2.1.4 系统总线 31
2.2 指令 33
2.2.1 指令集 33
2.2.2 过程调用 37
2.2.3 CISC和RISC 39
2.3 指令循环和异常处理 40
2.3.1 指令循环 40
2.3.2 异常和带有异常处理的指令循环 43
2.3.3 异常的分类 44
2.3.4 异常处理 45
2.4 处理器的运行模式和模式切换 47
习题 48
第三章 进程管理 50
3.1 进程的概念和结构 50
3.1.1 程序并发执行的基本需求 50
3.1.2 进程的概念 51
3.1.3 进程的结构 52
3.1.4 进程控制块 53
3.2 进程的状态 55
3.2.1 五状态模型 55
3.2.2 七状态模型 58
3.3 进程控制 61
3.3.1 进程的创建和退出 61
3.3.2 进程切换 62
3.3.3 进程切换的时机 64
3.3.4 过程调用和系统调用的区别 65
3.4 UNIX中的进程控制 65
3.4.1 获取进程ID 66
3.4.2 创建和终止进程 66
3.4.3 装载和运行程序 68
3.5 进程调度策略 70
3.5.1 调度目标 70
3.5.2 进程调度 71
3.5.3 短程调度策略 72
3.6 线程 76
3.6.1 线程概念的引入 76
3.6.2 线程的实现 78
3.6.3 线程与进程的关系 80
3.6.4 线程的控制 81
3.6.5 多线程程序中的变量 83
习题 85
第四章 进程的并发和死锁 87
4.1 并发问题 87
4.2 进程的互斥 89
4.2.1 互斥问题 89
4.2.2 解决互斥问题的软件方法 91
4.2.3 解决互斥问题的硬件方法 98
4.2.4 信号量和P、V操作 100
4.2.5 使用信号量解决互斥问题 102
4.3 进程的同步 104
4.3.1 同步问题 104
4.3.2 使用信号量解决同步问题 105
4.4 典型并发设计问题 107
4.4.1 生产者-消费者问题 107
4.4.2 读者-写者问题 112
4.5 其他并发控制机制 115
4.5.1 管程 115
4.5.2 消息传递 122
4.6 死锁 127
4.6.1 死锁的定义 127
4.6.2 哲学家就餐问题 130
4.6.3 死锁的描述 133
4.6.4 死锁的条件 135
4.7 死锁的处理 135
4.7.1 死锁预防 135
4.7.2 死锁避免 136
4.7.3 死锁检测 141
习题 143
第五章 内存管理 147
5.1 内存管理的需求 147
5.1.1 基本需求 147
5.1.2 地址定位 148
5.2 早期操作系统的内存管理 151
5.2.1 固定分区管理 151
5.2.2 覆盖技术 152
5.2.3 可变分区管理 153
5.2.4 伙伴系统(Buddy system) 154
5.3 虚拟内存 155
5.3.1 可执行目标文件 156
5.3.2 虚拟地址空间 158
5.3.3 虚拟内存 158
5.3.4 页表 160
5.3.5 页面命中和缺页故障 162
5.3.6 对内存管理需求的支持 165
5.3.7 地址转换的硬件实现和加速 168
5.4 分页式虚拟内存管理 173
5.4.1 程序局部性原理 174
5.4.2 读取策略 175
5.4.3 置换策略 176
5.4.4 驻留集管理 179
5.4.5 换出策略 180
5.4.6 加载控制 181
5.5 分段式虚拟内存管理 182
5.5.1 基本原理 182
5.5.2 段的动态链接 185
5.5.3 段的共享 186
5.5.4 段页式虚拟内存管理 188
习题 191
第六章 文件管理 193
6.1 文件系统 194
6.1.1 文件系统的概念 194
6.1.2 文件系统的存储结构 194
6.2 文件 195
6.2.1 文件的属性 196
6.2.2 文件的操作 197
6.2.3 文件的类型 198
6.2.4 文件的存储设备 198
6.3 文件的结构 200
6.3.1 文件的逻辑结构 200
6.3.2 文件的物理结构 201
6.4 文件存储空间管理 208
6.4.1 空闲区表 208
6.4.2 空白块链 208
6.4.3 位示图 209
6.4.4 MS-DOS的盘空间管理 209
6.4.5 UNIX文件存储空间的管理 210
6.5 文件目录结构 212
6.5.1 目录结构 212
6.5.2 目录和目录项的实现 215
6.5.3 文件链接 218
6.6 文件共享 222
6.6.1 打开文件在内核中的数据结构 222
6.6.2 进程间的文件共享 223
6.6.3 打开文件的一致性语义和文件锁 225
6.6.4 管道 226
6.7 文件系统的保护 229
6.7.1 文件访问权和保护域 229
6.7.2 UNIX文件系统的访问控制机制 231
6.8 UNIX中有关文件的系统调用 235
6.8.1 文件读、写的系统调用 235
6.8.2 访问文件状态的系统调用 237
6.8.3 文件链接的系统调用 238
习题 239
第七章 输入/输出系统 241
7.1 I/O系统概述 241
7.1.1 I/O系统的基本功能 242
7.1.2 I/O系统层次结构和模型 243
7.1.3 I/O系统接口 245
7.2 I/O系统硬件结构和组织 246
7.2.1 I/O设备类型 246
7.2.2 I/O设备的物理特性 247
7.2.3 I/O设备控制器 249
7.2.4 I/O通道 250
7.2.5 I/O设备的控制方式 253
7.2.6 I/O通道控制方式 256
7.3 I/O系统软件组织 258
7.3.1 I/O软件设计的目标 258
7.3.2 中断处理程序 259
7.3.3 设备驱动程序 259
7.3.4 设备无关的I/O软件 260
7.3.5 用户空间的I/O软件 261
7.4 缓冲处理技术 262
7.4.1 缓冲区的引入 263
7.4.2 单缓冲区和双缓冲区 264
7.4.3 环形缓冲区 266
7.4.4 缓冲池 267
7.5 磁盘驱动调度 269
7.5.1 磁盘访问时间 269
7.5.2 早期的磁盘调度算法 270
7.5.3 基于扫描的磁盘调度算法 271
7.6 设备分配及其实施 272
7.6.1 设备分配的数据结构 272
7.6.2 设备分配的原则 274
7.6.3 设备分配的策略 275
7.7 I/O进程控制 275
7.7.1 I/O控制的功能 275
7.7.2 I/O控制的实现 276
7.7.3 设备驱动过程 277
习题 277
参考文献 279