第1章 操作系统概论 1
1.1 操作系统的概念 1
1.1.1 操作系统的定义 1
1.1.2 操作系统的特征 3
1.1.3 操作系统的功能 4
1.1.4 操作系统的设计目标 8
1.1.5 操作系统的性能指标 9
1.2 操作系统的形成和发展 9
1.2.1 人工操作阶段 9
1.2.2 单道批处理 10
1.2.3 多道批处理 10
1.2.4 分时操作系统 12
1.2.5 个人计算机操作系统 13
1.2.6 实时操作系统 14
1.2.7 网络操作系统 16
1.2.8 分布式操作系统 17
1.2.9 操作系统的进一步发展 18
1.3 操作系统的结构 19
1.3.1 整体结构 20
1.3.2 分层结构 21
1.3.3 虚拟机 22
1.3.4 外核 23
1.3.5 客户机/服务器结构 23
1.4 常用操作系统简介 24
1.4.1 Windows系列操作系统 24
1.4.2 UNIX和Linux系统 26
1.5 小结 28
1.6 思考练习 28
第2章 操作系统的界面 30
2.1 用户工作环境 30
2.1.1 用户环境 30
2.1.2 系统的生成与引导 31
2.1.3 实例分析:Linux系统启动 34
2.2 操作系统的用户接口 35
2.2.1 命令接口 35
2.2.2 图形用户接口 37
2.2.3 程序接口 37
2.3 操作系统提供的服务 38
2.3.1 操作系统提供的基本服务 38
2.3.2 操作系统提供的公共函数 39
2.4 小结 40
2.5 思考练习 40
第3章 处理器管理 42
3.1 进程的引入 42
3.1.1 程序的顺序执行 42
3.1.2 程序的并发执行 43
3.2 进程的概念 44
3.2.1 进程的定义 44
3.2.2 进程的状态 45
3.2.3 进程控制块 47
3.3 进程控制 48
3.3.1 进程控制的概念 48
3.3.2 进程控制机构 48
3.3.3 进程创建 49
3.3.4 进程撤销 50
3.3.5 进程阻塞 50
3.3.6 进程唤醒 50
3.4 线程 50
3.4.1 线程的概念 51
3.4.2 线程的特点与状态 51
3.4.3 线程的实现 52
3.4.4 多线程模型 52
3.4.5 线程池 54
3.5 处理器调度 54
3.5.1 处理器调度的层次 54
3.5.2 选择调度算法的准则 56
3.5.3 作业调度 57
3.5.4 进程调度 58
3.6 调度算法 59
3.6.1 先来先服务 59
3.6.2 短作业(进程)优先 60
3.6.3 优先级调度 60
3.6.4 时间片轮转法 61
3.6.5 多级队列调度算法 62
3.6.6 多级反馈队列调度 63
3.6.7 高响应比优先调度 64
3.7 多处理器调度和实时调度 65
3.7.1 多处理器调度 65
3.7.2 实时调度 65
3.8 Linux的进程管理 66
3.8.1 Linux的进程描述符 66
3.8.2 Linux的进程状态及转换 68
3.8.3 Linux进程的调度 69
3.8.4 Linux进程的创建和终止 70
3.8.5 Linux的线程管理 71
3.9 小结 72
3.10 思考练习 73
第4章 进程同步与死锁 75
4.1 进程的同步和互斥 75
4.1.1 进程的同步 75
4.1.2 进程互斥 76
4.1.3 信号量机制 79
4.1.4 信号量的使用方法 84
4.1.5 信号量的应用实例 85
4.2 经典同步问题 87
4.2.1 生产者—消费者问题 87
4.2.2 读者—写者问题 89
4.2.3 哲学家进餐问题 91
4.2.4 理发师问题 94
4.3 管程 95
4.3.1 管程的基本概念 96
4.3.2 条件变量 97
4.3.3 使用管程解决生产者—消费者问题 98
4.4 进程通信 99
4.4.1 进程通信的概念 99
4.4.2 进程通信的方式 100
4.4.3 消息传递系统 101
4.4.4 消息缓冲队列通信机制 103
4.4.5 管道通信方式 105
4.4.6 Linux的进程通信 106
4.5 死锁 111
4.5.1 死锁的概念 111
4.5.2 死锁产生的原因和必要条件 112
4.5.3 死锁的描述—资源分配图 114
4.5.4 处理死锁的方法 116
4.6 死锁的预防和避免 117
4.6.1 死锁的预防 117
4.6.2 死锁的避免 118
4.7 死锁的检测和解除 124
4.7.1 死锁的检测 125
4.7.2 死锁的解除 127
4.8 小结 128
4.9 思考练习 129
第5章 存储管理 131
5.1 存储管理的概念 131
5.1.1 多级存储结构 132
5.1.2 程序的运行过程 134
5.1.3 存储管理的任务和功能 136
5.1.4 存储管理方式 141
5.2 连续内存分配 142
5.2.1 单一连续分配 143
5.2.2 固定分区分配 143
5.2.3 动态分区分配 145
5.2.4 可重定位分区分配 149
5.3 内存不足时的管理 151
5.3.1 覆盖 151
5.3.2 交换 152
5.4 分页存储管理 153
5.4.1 分页存储管理的基本原理 153
5.4.2 地址映射 155
5.4.3 页表的结构 158
5.4.4 页面的共享 160
5.5 分段存储管理 161
5.5.1 分段存储管理方式的引入 161
5.5.2 分段存储管理的基本原理 162
5.5.3 段的共享和保护 164
5.5.4 段页式存储管理 166
5.6 虚拟存储器 168
5.6.1 虚拟存储器的引入 168
5.6.2 虚拟存储器的实现方法 170
5.6.3 虚拟存储器的特征 170
5.7 请求分页存储管理技术 171
5.7.1 请求分页存储管理的硬件支持 171
5.7.2 页面置换算法 173
5.7.3 请求分页系统内存块的分配 178
5.7.4 工作集理论和抖动问题 180
5.8 Linux的存储管理 182
5.8.1 物理内存管理 182
5.8.2 进程虚拟地址空间管理 184
5.9 小结 187
5.10 思考练习 188
第6章 文件管理 190
6.1 文件的概念 190
6.1.1 文件及其分类 190
6.1.2 文件的属性 193
6.2 文件目录 193
6.2.1 文件控制块和文件目录 194
6.2.2 文件目录结构 196
6.2.3 目录的实现 199
6.3 文件和目录操作 200
6.3.1 文件操作 200
6.3.2 目录操作 202
6.4 文件的逻辑结构 203
6.4.1 文件逻辑结构的类型 203
6.4.2 顺序文件 205
6.4.3 索引文件 205
6.4.4 索引顺序文件 206
6.5 文件的物理结构 207
6.5.1 连续文件 207
6.5.2 链接文件 208
6.5.3 随机文件 209
6.5.4 文件物理结构比较 210
6.6 文件存储空间的分配 210
6.6.1 连续分配 211
6.6.2 链接分配 212
6.6.3 索引分配 217
6.7 文件存储空间的管理 219
6.7.1 空闲文件目录 219
6.7.2 空闲链表法 220
6.7.3 位示图 222
6.8 文件系统 222
6.8.1 文件系统的结构 222
6.8.2 文件系统的实现 223
6.9 文件的共享和保护 224
6.9.1 文件的共享 224
6.9.2 文件保护 226
6.9.3 文件系统的可靠性 228
6.10 Linux的文件系统 228
6.10.1 虚拟文件系统VFS 228
6.10.2 EXT2文件系统 230
6.11 小结 232
6.12 思考练习 233
第7章 设备管理 235
7.1 设备管理的概念 235
7.1.1 设备的分类 235
7.1.2 设备管理的任务和功能 237
7.1.3 I/O系统结构 238
7.1.4 设备控制器 239
7.2 I/O控制方式 242
7.2.1 程序直接控制方式 242
7.2.2 中断方式 243
7.2.3 DMA方式 245
7.2.4 通道控制方式 246
7.3 中断技术 249
7.3.1 中断的基本概念 249
7.3.2 中断的作用 249
7.3.3 中断的分类与优先级 250
7.3.4 软中断 251
7.3.5 中断处理过程 251
7.4 缓冲技术 252
7.4.1 缓冲的引入 252
7.4.2 缓冲的种类 253
7.4.3 缓冲池的管理 254
7.5 设备分配 257
7.5.1 设备分配中的数据结构 257
7.5.2 设备分配的原则 259
7.5.3 SPOOLing系统 260
7.5.4 虚拟设备——共享打印机 261
7.5.5 SPOOLing系统的特点 262
7.6 I/O软件 262
7.6.1 I/O软件的设计目标和原则 262
7.6.2 I/O中断处理程序 264
7.6.3 设备驱动程序 264
7.6.4 设备无关软件 267
7.6.5 用户层I/O软件 269
7.7 磁盘调度和管理 270
7.7.1 磁盘结构 270
7.7.2 磁盘访问时间 271
7.7.3 磁盘调度 271
7.7.4 磁盘高速缓存 275
7.7.5 磁盘管理 276
7.7.6 廉价磁盘冗余阵列 277
7.8 Linux的设备管理 280
7.8.1 设备文件 280
7.8.2 字符设备管理 281
7.8.3 块设备管理 282
7.8.4 网络设备管理 283
7.9 小结 284
7.10 思考练习 285
第8章 操作系统的安全和保护 287
8.1 计算机系统和操作系统安全 287
8.1.1 计算机系统安全概述 287
8.1.2 操作系统安全及信息安全评价准则 288
8.1.3 计算机安全威胁分类 290
8.2 操作系统安全机制 290
8.2.1 数据加密的基本概念 290
8.2.2 数字签名和身份认证 292
8.2.3 授权机制 294
8.2.4 审计 295
8.3 计算机病毒 295
8.3.1 计算机病毒的基本概念 295
8.3.2 计算机病毒的类型 297
8.3.3 病毒的预防和检测 299
8.4 访问控制机制 301
8.4.1 保护域 301
8.4.2 访问矩阵 302
8.4.3 访问矩阵的实现 303
8.5 Linux的安全机制 304
8.6 小结 306
8.7 思考练习 307
参考文献 308