第一部分 引论 3
1 操作系统概述 3
1.1 什么是操作系统 3
1.1.1 从用户的观点看什么是操作系统 3
1.1.2 从系统的观点看什么是操作系统 4
1.1.3 操作系统的目标 5
1.2 操作系统的发展 6
1.2.1 串行处理 6
1.2.2 简单批处理系统 6
1.2.3 多道程序批处理系统 9
1.2.4 分时系统 12
1.2.5 实时操作系统 14
1.2.6 各种类型的现代操作系统 15
1.3 操作系统的主要组成部分 17
1.3.1 命令解释器系统 17
1.3.2 进程管理 17
1.3.3 内存管理 18
1.3.4 文件管理 19
1.3.5 I/O系统管理 19
1.3.6 保护系统 20
1.4 Linux操作系统概述 20
1.4.1 Linux的发展简史 20
1.4.2 Linux的技术特点 22
1.4.3 Linux的不足之处 22
1.5 习题 23
2 计算机系统概述 25
2.1 基本成分 25
2.2 处理器的寄存器 26
2.2.1 用户可见的寄存器 26
2.2.2 控制和状态寄存器 27
2.3 指令的执行 27
2.3.1 指令的读取和执行 28
2.3.2 I/O功能 30
2.4 中断 30
2.4.1 中断和指令周期 31
2.4.2 中断处理 33
2.4.3 多个中断 36
2.4.4 多道程序 37
2.5 存储器的层次结构 38
2.6 高速缓冲存储器 40
2.7 I/O通信技术 42
2.7.1 编程I/O 42
2.7.2 中断驱动I/O 43
2.7.3 直接内存存取 44
2.8 习题 45
3 用户与操作系统的接口 47
3.1 概述 47
3.2 操作员接口 47
3.2.1 命令驱动方式 48
3.2.2 窗口系统与菜单驱动方式 48
3.2.3 命令文件方式 48
3.3 程序级接口 49
3.3.1 用户态与系统态 49
3.3.2 特权指令与访管指令 49
3.3.3 系统调用 50
3.3.4 系统调用类型 50
3.3.5 系统调用的使用和执行过程 53
3.3.6 主要系统调用命令的功能和使用方法 53
3.4 Linux的用户界面Shell 57
3.4.1 SHELL命令语言 57
3.4.2 Shell过程 59
3.5 习题 59
第二部分 进程 63
4 进程描述与控制 63
4.1 进程状态 63
4.1.1 一个两状态的进程模型 65
4.1.2 进程的创建和终止 66
4.1.3 一个五状态的模型 67
4.1.4 被挂起的进程 71
4.2 进程描述 74
4.2.1 操作系统控制结构 75
4.2.2 进程控制结构 76
4.3 进程控制 81
4.3.1 执行模式 81
4.3.2 进程创建 82
4.3.3 进程切换 82
4.4 线程 86
4.4.1 线程的引入 87
4.4.2 线程的概念 87
4.5 对称多处理器和相应的操作系统设计问题 89
4.5.1 SMP体系结构 89
4.5.2 SMP的组织结构 90
4.5.3 设计多处理器操作系统应考虑的一些问题 91
4.6 总结 91
4.7 习题 92
5 并发:互斥与同步 95
5.1 并发原理 95
5.1.1 一个简单的例子 96
5.1.2 操作系统关注的问题 97
5.1.3 进程交互 97
5.1.4 进程之间对资源的竞争 98
5.1.5 进程之间通过共享合作 99
5.1.6 进程之间通过通信合作 100
5.1.7 互斥的要求 101
5.2 互斥:软件方法 101
5.2.1 Dekker算法 101
5.2.2 Peterson算法 105
5.3 互斥:硬件支持 107
5.3.1 关中断 107
5.3.2 特殊机器指令 108
5.3.3 机器指令方法的特性 109
5.4 信号量 110
5.4.1 互斥 110
5.4.2 生产者/消费者问题 112
5.4.3 信号量的实现 116
5.4.4 理发店问题 118
5.5 管程 122
5.6 消息传递 125
5.6.1 同步 126
5.6.2 寻址 127
5.6.3 消息格式 128
5.6.4 排队策略 128
5.6.5 互斥 128
5.7 读者/写者问题 129
5.7.1 读者具有优先权 131
5.7.2 写者具有优先权 132
5.8 Linux中的并发机制 134
5.8.1 管道 134
5.8.2 管道的实现 134
5.8.3 管道的操作 135
5.8.4 命名管道 135
5.8.5 消息队列 135
5.8.6 共享内存 137
5.8.7 信号量 138
5.8.8 信号 139
5.9 总结 141
5.10 习题 141
6 并发:死锁和饥饿 147
6.1 死锁原理 147
6.1.1 可重用资源 150
6.1.2 可消耗资源 150
6.1.3 死锁的条件 151
6.2 死锁预防 152
6.2.1 破坏互斥条件 152
6.2.2 破坏占用并等待条件 153
6.2.3 破坏不可抢占条件 153
6.2.4 破坏循环等待条件 153
6.3 死锁避免 153
6.3.1 拒绝进程启动 154
6.3.2 拒绝资源分配 154
6.4 死锁检测 157
6.4.1 死锁检测算法 158
6.4.2 恢复 158
6.5 一个集成的死锁策略 159
6.6 哲学家就餐问题 160
6.7 总结 161
6.8 习题 161
7 单处理器调度 167
7.1 调度的类型 167
7.1.1 长期调度 168
7.1.2 中期调度 169
7.1.3 短期调度 169
7.2 调度算法 170
7.2.1 短期调度标准 170
7.2.2 使用优先级 172
7.2.3 可供选择的调度策略 172
7.4 Linux中的进程调度 179
7.4.1 调度参数 179
7.4.2 调度工作 180
7.4.3 调度的实现 181
7.5 总结 182
7.6 习题 182
第三部分 内存 187
8 内存管理 187
8.1 内存管理需求 187
8.1.1 重定位 187
8.1.2 保护 187
8.1.3 共享 188
8.1.4 逻辑组织 188
8.1.5 物理组织 189
8.2 内存分区 189
8.2.1 固定分区 189
8.2.2 伙伴系统 194
8.2.3 重定位 196
8.3 分页 197
8.4 分段 201
8.5 总结 201
8.6 习题 202
9 虚拟内存 204
9.1 硬件和控制结构 204
9.1.1 局部性及虚拟内存 205
9.1.2 分页 206
9.1.3 页表结构 208
9.1.4 关联存储器(快表) 209
9.1.5 页大小 211
9.1.6 分段 213
9.1.7 组织 214
9.1.8 分页与分段结合技术 215
9.1.9 保护和共享 216
9.2 操作系统软件 216
9.2.1 读取策略 217
9.2.2 放置策略 218
9.2.3 置换策略 218
9.2.4 页缓冲 223
9.2.5 驻留集管理 224
9.2.6 清洗策略 228
9.2.7 装入控制 229
9.3 Linux的虚拟内存管理 230
9.3.1 Linux进程的虚拟内存 230
9.3.2 Linux的页面管理 232
9.3.3 Linux的页面装卸管理 233
9.4 总结 235
9.5 习题 236
第四部分 输入/输出和文件 241
10 输入/输出管理和磁盘调度 241
10.1 输入/输出设备 241
10.2 输入/输出功能的组织 242
10.2.1 输入/输出功能的发展 242
10.2.2 直接存储访问 243
10.3 操作系统的设计问题 244
10.3.1 设计目标 244
10.3.2 输入/输出功能的逻辑结构 245
10.4 输入/输出缓冲 247
10.4.1 单缓冲 247
10.4.2 双缓冲 248
10.4.3 缓冲的应用 248
10.5 磁盘调度 249
10.5.1 磁盘性能参数 249
10.5.2 寻道时间 250
10.5.3 旋转延迟 250
10.5.4 传输时间 251
10.5.5 时序比较 251
10.5.6 磁盘调度策略 251
10.6 RAID 254
10.7 磁盘高速缓存 254
10.7.1 设计考虑 254
10.7.2 性能考虑 255
10.8 Linux输入/输出 256
10.8.1 设备驱动程序 256
10.8.2 核心接口 258
10.8.3 字符设备 258
10.8.4 块设备 259
10.9 总结 261
10.10 习题 261
11 文件管理 263
11.1 概述 263
11.1.1 文件 263
11.1.2 文件管理系统 264
11.1.3 文件系统结构 264
11.1.4 文件管理功能 265
11.2 文件组织和访问 266
11.2.1 堆 268
11.2.2 顺序文件 268
11.2.3 索引顺序文件 269
11.2.4 索引文件 269
11.2.5 直接或哈希文件 270
11.3 文件目录 270
11.3.1 内容 270
11.3.2 结构 270
11.3.3 命名 272
11.4 文件共享 273
11.4.1 访问权限 273
11.4.2 并发访问 274
11.5 记录分块 274
11.6 辅存管理 276
11.6.1 文件分配 276
11.6.2 空闲空间管理 280
11.6.3 可靠性 281
11.7 Linux中的文件系统 281
11.7.1 Linux文件系统概述 281
11.7.2 EXT2文件系统 282
11.8 总结 289
11.9 习题 289
12 系统安全 291
12.1 安全威胁 292
12.1.1 威胁的种类 292
12.1.2 计算机系统资源 293
12.2 保护 295
12.2.1 保护内存 295
12.2.2 面向用户的访问控制 296
12.2.3 面向数据的访问控制 296
12.3 入侵 298
12.3.1 入侵者 298
12.3.2 入侵技术 299
12.4 病毒和相关威胁 308
12.4.1 恶意程序 308
12.4.2 后门 308
12.4.3 逻辑炸弹 309
12.4.5 病毒 310
12.4.6 蠕虫 310
12.4.7 细菌 311
12.4.8 病毒的本质 311
12.4.9 病毒类型 311
12.4.10 抗病毒方法 312
12.5 可信任系统 313
12.6 络安全 316
12.6.1 潜在的进行安全攻击的位置 316
12.6.2 加密设备的位置 316
12.6.3 密钥分布 317
12.6.4 通信量的填充 319
12.7 总结 320
12.8 习题 320
参考资料 322