第1章 绪论 1
1.1 操作系统概述 1
1.1.1 操作系统的定义 1
1.1.2 操作系统的功能 2
1.2 操作系统的发展过程 3
1.2.1 第一代计算机(1946—1955):真空管和插接板 3
1.2.2 第二代计算机(1956—1965):晶体管和批处理系统 3
1.2.3 第三代计算机(1966—1980):集成电路和多道程序 4
1.2.4 第四代计算机(1981—现在):大规模集成电路 7
1.3 操作系统的结构 10
1.3.1 整体结构的操作系统 11
1.3.2 分层操作系统 11
1.3.3 微内核结构 12
1.4 操作系统的特征 13
1.4.1 并发性 13
1.4.2 共享性 14
1.4.3 异步性 14
1.4.4 虚拟性 14
1.5 UNIX系统简介 15
1.5.1 UNIX综述 15
1.5.2 UNIX内核功能 18
本章小结 20
习题 21
第2章 处理机管理 22
2.1 多道程序设计 22
2.1.1 单道程序的顺序执行 23
2.1.2 多道程序的并发执行 23
2.2 进程的基本概念 24
2.2.1 进程的定义 25
2.2.2 进程的属性 26
2.2.3 进程与程序的关系 26
2.3 进程的状态及转换 27
2.3.1 进程的基本状态及转换 27
2.3.2 具有挂起功能的进程状态及转换 28
2.4 作业的基本概念 29
2.4.1 作业的定义 29
2.4.2 作业与进程的关系 30
2.4.3 作业的状态及转换 31
2.5 进程的描述与上下文 31
2.5.1 进程控制块 32
2.5.2 进程上下文 33
2.6 进程的控制 34
2.6.1 进程控制机构 34
2.6.2 进程控制原语 35
2.7 线程 37
2.7.1 线程的概念 37
2.7.2 线程与进程的关系 38
2.7.3 线程的实现 39
2.8 处理机调度的原理 41
2.8.1 处理机的4级调度 41
2.8.2 处理机调度的目标 43
2.8.3 处理机调度的方式 45
2.8.4 处理机调度的时机 45
2.9 调度算法 46
2.9.1 先来先服务 46
2.9.2 最短周期优先 47
2.9.3 最高优先级优先 47
2.9.4 时间片轮转算法 48
2.9.5 多级反馈队列 49
2.9.6 实时调度 50
2.10 UNIX系统进程的结构 51
2.10.1 UNIX进程控制块 51
2.10.2 UNIX进程上下文 55
2.10.3 UNIX进程状态及转换 56
2.11 UNIX系统进程上下文的保存与切换 58
2.11.1 中断与异常 58
2.11.2 系统调用接口 58
2.11.3 上下文切换 59
2.12 UNIX系统进程控制 60
2.12.1 进程树 60
2.12.2 进程的创建 60
2.12.3 执行一个文件 62
2.12.4 进程的睡眠与唤醒 65
2.12.5 进程的终止 68
2.12.6 等待子进程终止 68
2.13 UNIX系统进程调度 69
2.13.1 UNIX系统调度的原理 70
2.13.2 UNIX系统调度的实现 71
本章小结 73
实习项目 74
习题 75
第3章 进程同步与通信 79
3.1 进程的并发执行 79
3.1.1 与时间有关的错误 79
3.1.2 Bernstein条件 80
3.1.3 临界资源与临界区 81
3.2 进程的互斥 83
3.2.1 软件实现方法 83
3.2.2 硬件实现方法 85
3.3 进程的同步 86
3.3.1 同步的概念 86
3.3.2 同步的实现方法 87
3.3.3 生产者-消费者问题 88
3.4 信号量 89
3.4.1 信号量的原理 89
3.4.2 用信号量实现进程的互斥 91
3.4.3 用信号量实现进程的同步 92
3.4.4 用信号量解决生产者-消费者问题 93
3.4.5 信号量小结及其不足 95
3.5 管程 95
3.5.1 管程的定义、结构和原理 96
3.5.2 用管程解决生产者-消费者问题 99
3.5.3 管程的不足 101
3.6 进程的高级通信 101
3.6.1 消息缓冲机制 102
3.6.2 邮箱机制 104
3.6.3 共享存储区 105
3.6.4 管道 106
3.7 死锁 107
3.7.1 什么是死锁 109
3.7.2 死锁的表示 111
3.7.3 死锁的检测和清除 113
3.7.4 死锁的预防 115
3.7.5 死锁的避免 117
3.8 经典同步与互斥问题 121
3.8.1 哲学家进餐问题 121
3.8.2 读者-写者问题 123
3.9 UNIX系统软中断 124
3.9.1 软中断的检测与处理的时机 124
3.9.2 软中断的种类 124
3.9.3 软中断的检测与处理 126
3.10 UNIX系统管道 130
3.10.1 无名管道 130
3.10.2 有名管道 132
3.11 UNIX系统进程间通信IPC 132
3.11.1 消息机制 133
3.11.2 共享存储区机制 137
3.11.3 信号量机制 140
本章小结 144
实习项目 146
习题 146
第4章 存储管理 151
4.1 存储管理的基本功能 151
4.1.1 转换 151
4.1.2 存储保护和共享 154
4.1.3 内存分配回收 154
4.1.4 内存扩充 155
4.2 分区存储管理 155
4.2.1 固定分区 155
4.2.2 动态分区 156
4.2.3 地址转换和存储保护 158
4.2.4 存储共享 159
4.2.5 分配和回收算法 159
4.2.6 覆盖和交换 162
4.2.7 分区存储管理的优缺点 163
4.3 分页式存储管理 164
4.3.1 基本原理 164
4.3.2 数据结构 164
4.3.3 地址转换和存储保护 166
4.3.4 存储共享 167
4.3.5 分配算法 168
4.3.6 分页式存储管理的优缺点 168
4.4 分段式存储管理 168
4.4.1 基本原理 168
4.4.2 地址转换和存储保护 169
4.4.3 存储共享 171
4.4.4 分段式存储管理的优缺点 171
4.5 段页式存储管理 172
4.5.1 基本原理 172
4.5.2 地址转换 172
4.5.3 段页式存储管理的优缺点 174
4.6 虚拟存储管理 174
4.6.1 虚拟存储器的概念 174
4.6.2 请求分页式虚拟存储管理 175
4.6.3 请求分段式虚拟存储管理 180
4.6.4 请求段页式虚拟存储管理 181
4.7 UNIX存储管理 182
4.8 UNIX系统进程的虚拟地址空间 183
4.8.1 区 183
4.8.2 页和页表 184
4.8.3 对进程虚拟地址空间的操作 185
4.9 UNIX系统交换 192
4.9.1 交换空间的管理 192
4.9.2 进程的换出 195
4.9.3 进程的换入 197
4.9.4 进程交换的实现 198
4.10 UNIX系统进程正文段的共享 202
4.10.1 数据结构 202
4.10.2 算法 203
4.11 UNIX系统请求调页 206
4.11.1 基本原理 206
4.11.2 数据结构 206
4.11.3 动态地址变换 208
4.11.4 页故障 209
4.11.5 换页进程 213
4.12 UNIX系统中交换策略与请求调页策略的结合 215
本章小结 216
实习项目 217
习题 217
第5章 文件系统 222
5.1 文件和文件系统 222
5.1.1 文件的概念 222
5.1.2 文件命名 223
5.1.3 文件类型 223
5.1.4 文件属性 224
5.1.5 文件系统的概念 225
5.2 文件组织、存取方法和存取设备 225
5.2.1 文件的逻辑结构 226
5.2.2 文件的物理结构 228
5.2.3 文件的存取方法 231
5.2.4 文件的存储设备 233
5.3 文件目录 233
5.3.1 一级目录结构 234
5.3.2 二级目录结构 235
5.3.3 树状目录结构 235
5.4 文件共享与保护 236
5.4.1 文件共享 236
5.4.2 文件保护 238
5.5 文件系统其他功能的实现 239
5.5.1 文件操作 239
5.5.2 文件系统的层次模型 240
5.5.3 外存空间管理 241
5.5.4 虚拟文件系统 242
5.6 UNIX文件系统概述 243
5.7 UNIX文件系统的数据结构 244
5.7.1 文件系统的存储结构 244
5.7.2 i节点 244
5.7.3 目录文件 247
5.7.4 超级块 247
5.7.5 用户打开文件表 248
5.7.6 系统打开文件表 248
5.7.7 安装表 249
5.7.8 各数据结构间的关系 250
5.8 UNIX文件系统的存储资源管理 252
5.8.1 空闲块的管理 252
5.8.2 磁盘i节点的管理 256
5.8.3 内存i节点的管理 260
5.8.4 文件表的管理 263
5.9 UNIX正规文件的物理结构 264
5.9.1 地址索引表 264
5.9.2 地址映射 266
5.10 UNIX目录文件 269
5.11 UNIX中与文件有关的系统调用 271
本章小结 272
实习项目 273
习题 273
第6章 设备管理 277
6.1 概述 277
6.1.1 设备分类 277
6.1.2 I/O设备管理的目标和功能 278
6.1.3 设备控制器 279
6.2 I/O控制方式 280
6.2.1 程序直接控制方式 282
6.2.2 中断控制方式 283
6.2.3 DMA方式 284
6.2.4 通道方式 286
6.3 I/O软件 288
6.3.1 I/O中断处理程序 289
6.3.2 I/O设备驱动程序 289
6.3.3 与设备无关的操作系统I/O软件 290
6.3.4 用户层I/O软件 291
6.4 缓冲技术 291
6.4.1 缓冲的引入 291
6.4.2 缓冲的类型 292
6.5 设备分配技术 294
6.5.1 设备分配的策略 294
6.5.2 SPOOLing技术 295
6.6 UNIX设备管理概述 296
6.7 UNIX系统中断和异常 297
6.7.1 中断的分类 297
6.7.2 异常的分类 298
6.7.3 中断和异常的处理 298
6.8 UNIX系统缓冲区管理 303
6.8.1 缓冲池结构 303
6.8.2 缓冲区的分配与释放 306
6.8.3 块的读写 307
6.9 UNIX系统设备驱动程序的接口 311
6.9.1 设备开关表 311
6.9.2 设备驱动程序的接口 312
6.9.3 系统调用与驱动程序的接口 313
6.9.4 中断处理程序 317
6.10 UNIX系统字符设备驱动 317
6.10.1 数据结构 317
6.10.2 对字符缓冲区队列的操作 318
6.10.3 终端设备驱动 325
6.11 UNIX系统块设备驱动 334
本章小结 336
实习项目 336
习题 337
第7章 UNIX操作系统的用户接口 339
7.1 系统调用 339
7.2 shell进程 343
7.2.1 shell概述 343
7.2.2 shell流程 343
7.2.3 shell进程的生成 345
7.3 shell常用命令 346
7.3.1 与用户有关的命令 346
7.3.2 与文件系统有关的命令 347
7.3.3 进程与通信命令 351
7.3.4 后台命令 353
7.3.5 管道与重定向命令 353
7.4 shell程序语言 354
本章小结 356
实习项目 357
习题 357
参考文献 359