第1章 操作系统概述 1
1.1 什么是操作系统 1
1.2 操作系统的目标和功能 4
1.2.1 操作系统的目标 4
1.2.2 操作系统的功能 5
1.3 操作系统的发展历程 7
1.3.1 操作系统的形成 8
1.4.1 多道批处理操作系统 11
1.4 操作系统的分类 11
1.3.2 操作系统的完善 11
1.4.2 分时操作系统 14
1.4.3 实时操作系统 16
1.4.4 通用操作系统 17
1.4.5 网络操作系统 18
1.4.6 分布式操作系统 18
1.4.7 微机操作系统 19
1.4.8 嵌入式操作系统 19
1.4.9 多处理机操作系统 20
1.5 支持操作系统的硬件环境 22
1.6 操作系统的特征和服务 24
1.6.1 操作系统的特征 25
1.6.2 操作系统的服务 26
1.7 典型的现代操作系统 26
1.7.1 Windows 26
1.7.2 UNIX系统 28
1.7.3 Linux系统 28
习题1 29
第2章 作业管理 31
2.1 作业的基本概念 31
2.1.1 作业的定义 31
2.1.2 作业的分类 32
2.2 批处理作业控制 33
2.2.1 作业状态 33
2.2.2 作业控制块 34
2.2.3 作业控制过程 35
2.3.1 作业调度算法的目标与设计因素 36
2.3 调度算法 36
2.3.2 单道批处理作业调度算法 37
2.3.3 多道批处理作业调度算法 39
2.4 交互式作业控制 40
2.4.1 命令接口的结构 40
2.4.2 联机命令 40
2.4.3 命令解释程序 42
2.4.4 终端处理程序 42
2.4.5 交互式系统实例——分时系统 43
习题2 44
第3章 进程管理 45
3.1 多道程序设计 45
3.2 进程的概念 46
3.2.1 前驱图和程序执行 47
3.2.2 进程的描述 54
3.3 进程控制块和状态转换 55
3.3.1 进程控制块(PCB) 56
3.3.2 进程状态及其转换 58
3.4.1 操作系统控制结构 64
3.4 进程控制 64
3.4.2 进程创建与终止 67
3.4.3 进程的阻塞与唤醒 69
3.4.4 进程的挂起与激活 70
3.4.5 进程间的相互关系 70
3.5 线程 71
3.5.1 线程的引入 72
3.5.2 线程的结构与线程控制块(TCB) 72
3.5.3 线程与进程 73
3.5.4 线程的实现 74
3.5.5 线程的应用 76
习题3 79
第4章 中断和处理机调度 81
4.1 中断 81
4.1.1 中断和指令周期 81
4.1.2 中断处理 83
4.1.3 多个中断 86
4.2 处理机调度 88
4.2.1 高级、中级和低级调度 88
4.1.4 多道程序设计 88
4.2.2 进程调度方式 92
4.2.3 调度算法 93
4.2.4 调度时机 102
4.3 实时调度 102
4.3.1 实现实时调度的基本条件 102
4.3.2 实时调度算法的分类 104
4.3.3 实时调度算法 105
4.4.1 多处理机系统的类型 107
4.4 多处理机调度 107
4.4.2 自调度 108
4.4.3 组调度 108
习题4 108
第5章 并发性:互斥、同步和通信 111
5.1 并发的原理 111
5.1.1 与时间有关的错误 111
5.1.2 互斥与同步的概念 112
5.1.3 临界区与进程互斥 113
5.1.4 硬件支持互斥的方法 114
5.2 信号量机制 116
5.2.1 信号量的概念 116
5.2.2 信号量的应用 117
5.2.3 生产者-消费者问题 119
5.2.4 哲学家进餐问题 121
5.2.5 读者-写者问题 122
5.3 管程机制 124
5.3.1 管程的概念 125
5.3.2 生产者-消费者问题 127
5.3.3 哲学家进餐问题 128
5.4 进程通信 130
5.4.1 进程通信的方式 130
5.4.2 消息缓冲通信 131
5.4.3 信箱通信 132
5.4.4 共享文件通信 133
5.4.5 消息传递系统的若干问题 133
习题5 135
6.1 死锁的概念 137
第6章 并发性:死锁 137
6.2 产生死锁的条件和处理 139
6.2.1 必要条件 139
6.2.2 处理死锁的基本方法 139
6.3 死锁的预防 140
6.3.1 预先分配策略 141
6.3.2 有序分配策略 141
6.4.1 系统安全状态 142
6.4 死锁的避免 142
6.4.2 银行家算法 143
6.5 死锁的检测与解除 145
6.5.1 死锁的检测 145
6.5.2 死锁的解除 148
6.6 死锁的综合处理策略 149
习题6 150
第7章 内存管理 152
7.1 内存管理的功能 152
7.1.1 内存分配 152
7.1.2 地址变换 153
7.1.3 存储保护 154
7.1.4 存储共享 154
7.1.5 存储扩充 155
7.2 程序的加载和链接 155
7.2.1 程序的加载 155
7.2.2 程序的链接 157
7.3 连续分配方式 159
7.3.1 单一连续分配 159
7.3.2 固定分区分配 160
7.3.3 动态分区分配 161
7.3.4 可重定位分区分配 163
7.3.5 交换和覆盖 164
7.4 基本分页分配方式 166
7.4.1 页面与页表 166
7.4.2 地址变换机构 168
7.4.3 页面大小 170
7.5 基本分段分配方式 171
7.5.1 段表 171
7.5.2 地址变换机构 172
7.5.3 共享与保护 173
7.6 虚拟页式分配 174
7.6.1 虚拟存储器 174
7.5.4 分页与分段的区别 174
7.6.2 请求分页概念 176
7.6.3 请求分页硬件支持 176
7.6.4 内存分配策略 177
7.6.5 内存分配方法 180
7.6.6 缺页处理 180
7.7.1 最优页面置换算法 181
7.7 页面置换算法 181
7.7.2 先进先出置换算法 182
7.7.3 最近最少使用置换算法 184
7.7.4 用软件模拟LRU算法 185
7.7.5 时钟算法 186
7.7.6 改进时钟算法 187
7.7.7 工作集模型 188
7.8 虚拟段式分配 189
7.8.3 缺段中断 190
7.8.1 请求分段中的硬件支持 190
7.8.2 地址变换机构 190
7.9 段页式分配方式 191
7.9.1 段页式分配的原理 191
7.9.2 段页式分配的地址变换 192
7.9.3 分段和分页的结合:Inter Pentium 193
习题7 195
8.1 I/O系统 197
8.1.1 设备的分类 197
第8章 设备与I/O管理 197
8.1.2 设备的标识 200
8.1.3 I/O系统的结构 201
8.2 I/O设备数据传输控制方式 202
8.2.1 程序直接控制方式 202
8.2.2 中断控制方式 203
8.2.3 DMA控制方式 204
8.2.4 通道控制方式 205
8.3 设备管理与功能 208
8.4.1 设备分配中的数据结构 210
8.4 设备分配 210
8.4.2 设备分配应考虑的因素和分配技术 211
8.4.3 设备分配算法 215
8.4.4 SPOOLING系统 215
8.5 缓冲技术 218
8.5.1 缓冲的引入 219
8.5.2 单缓冲 221
8.5.3 双缓冲 222
8.5.4 循环缓冲 223
8.5.5 缓冲池 225
8.6 设备驱动程序 228
8.6.1 设备驱动程序的功能和特点 228
8.6.2 设备驱动程序的处理过程 229
8.7 磁盘存储器管理 230
8.7.1 磁盘I/O 231
8.7.2 磁盘调度算法 236
8.8 RAID技术 240
8.8.1 RAID技术的引入 240
8.8.2 RAID分级 241
习题8 242
第9章 文件管理 244
9.1 文件系统的概念 244
9.1.1 文件和文件系统 244
9.1.2 文件分类 245
9.1.3 文件操作 247
9.2 文件的逻辑结构 248
9.2.1 文件逻辑结构的类型 248
9.2.3 索引文件 249
9.2.2 顺序文件 249
9.2.4 索引顺序文件 250
9.2.5 直接文件和散列文件 250
9.3 文件的物理结构 251
9.3.1 顺序结构 251
9.3.2 链接结构 253
9.3.3 索引结构 255
9.4 文件的存取方法 258
9.4.1 顺序存取 258
9.4.3 按键存取 259
9.4.2 直接存取 259
9.5 文件目录 261
9.5.1 文件控制块与索引结点 262
9.5.2 文件目录与目录文件 264
9.5.3 目录结构 264
9.5.4 目录查询技术 268
9.6 文件存储空间管理 269
9.6.1 空闲表和空闲链表 269
9.6.2 位示图 270
9.6.3 UNIX成组链接 271
9.7.1 文件共享的模式 273
9.7 文件共享和保护 273
9.7.2 文件的保护 276
习题9 279
第10章 操作系统接口 280
10.1 作业级接口 280
10.1.1 脱机用户接口 280
10.1.2 联机用户接口 281
10.2 图形用户接口 283
10.3.1 Shell命令语言 284
10.3 Shell语言 284
10.3.2 Shell过程 289
10.4 系统调用 291
10.4.1 系统调用简介 291
10.4.2 系统调用的类型 291
10.4.3 系统调用的实现 292
习题10 295
11.1 网络操作系统概述 296
11.1.1 计算机网络 296
第11章 网络操作系统 296
11.1.2 网络操作系统的功能 301
11.1.3 网络操作系统的特性 302
11.2 网络操作系统的工作模式 303
11.3 基本通信技术 304
11.3.1 消息传递 304
11.3.2 远程过程调用 306
11.3.3 socket系统调用 309
11.4.2 数据和软件资源共享 314
11.4 网络资源共享技术 314
11.4.1 硬件资源共享 314
11.5 网络文件系统 315
11.5.1 NFS组成 316
11.5.2 NFS体系结构 316
11.5.3 NFS实现分析 318
习题11 319
12.1 Linux系统特征与结构 320
12.1.1 Linux简介 320
第12章 Linux/UNIX系统 320
12.1.2 内核结构 322
12.2 进程管理 324
12.2.1 进程控制块结构 324
12.2.2 进程调度算法和调度策略 326
12.2.3 进程使用的文件 327
12.2.4 进程使用的虚拟内存 328
12.2.5 系统调用 329
12.2.6 进程的创建与终止 330
12.3.1 信号 331
12.3 进程间通信机制 331
12.3.2 管道 332
12.3.3 消息队列 334
12.3.4 信号量 335
12.3.5 共享内存 336
12.4 存储管理 337
12.4.1 进程的虚存空间 337
12.4.2 Linux的多级页表 338
12.4.3 物理内存管理 339
12.4.4 页面更换 340
12.5 I/O管理 341
12.5.1 设备管理概述 341
12.5.2 设备驱动程序与内核接口 342
12.6 文件系统 344
12.6.1 第二扩展文件系统(ext2) 345
12.6.2 虚拟文件系统(VFS) 348
习题12 356
参考文献 358