第1章 绪论 1
1.1 操作系统在计算机系统中的地位 1
1.1.1 存储程序式计算机的结构和特点 1
1.1.2 操作系统与计算机系统各层次的关系 3
1.1.3 操作系统与计算机体系结构的关系 4
1.2 操作系统的形成和发展 6
1.2.1 操作系统发展的初级阶段 7
1.2.2 操作系统的形成 9
1.2.3 操作系统的进一步发展 11
1.3 操作系统的基本概念 12
1.3.1 操作系统的定义和特性 12
1.3.2 操作系统的资源管理功能 14
1.3.3 操作系统应解决的基本问题 16
1.4 操作系统的基本类型 18
1.4.1 批量操作系统 18
1.4.2 分时操作系统 18
1.4.3 实时操作系统 19
1.4.4 个人计算机操作系统 20
1.4.5 网络操作系统 21
1.4.6 分布式操作系统 22
1.5 操作系统采用的关键技术 25
1.5.1 操作系统采用的并行处理技术 25
1.5.2 操作系统采用的虚拟技术 26
1.6 UNIX、Linux操作系统概述 26
1.6.1 UNIX操作系统的发展 26
1.6.2 UNIX操作系统的类型及特点 27
1.6.3 Linux系统及其特点 29
习题1 33
第2章 操作系统的结构和硬件支持 35
2.1 操作系统虚拟机 35
2.2 操作系统的组织结构 36
2.2.1 操作系统的结构 36
2.2.2 运行时的组织结构 39
2.2.3 操作系统与计算机系统各层次的接口 40
2.3 处理机的特权级 41
2.3.1 处理机的态及分类 41
2.3.2 特权指令 41
2.4 中断及其处理 42
2.4.1 中断概念及类型 42
2.4.2 向量中断和探询中断 44
2.4.3 中断进入 44
2.4.4 软件中断处理过程 46
2.5 UNIX、Linux系统结构 48
2.5.1 UNIX系统的体系结构 48
2.5.2 UNIX系统的核心结构 49
2.5.3 Linux系统的内核结构 50
2.6 Linux系统的特权级与中断处理 50
2.6.1 Linux系统的特权级 50
2.6.2 中断处理的上半部和下半部 51
2.6.3 中断处理下半部的实现机制 52
习题2 53
第3章 操作系统的用户接口 54
3.1 用户工作环境 54
3.1.1 操作系统提供的环境 54
3.1.2 操作系统的生成和系统初启 55
3.1.3 应用程序的处理 58
3.2 用户接口 60
3.2.1 用户接口的定义 60
3.2.2 操作系统提供的用户接口 60
3.3 系统功能调用 62
3.3.1 系统功能调用的定义 62
3.3.2 系统功能调用的实现 63
3.3.3 应用程序的编程接口 64
3.4 UNIX系统功能调用 65
3.4.1 UNIX系统调用的分类 65
3.4.2 UNIX系统调用的实现 66
3.5 Linux系统功能调用 68
3.5.1 Linux系统功能调用的过程 69
3.5.2 Linux系统功能调用的实现机制 70
3.5.3 增加一个新的系统调用的方法 71
3.5.4 从用户空间访问新的系统调用 72
习题3 73
第4章 进程及进程管理 74
4.1 进程引入 74
4.1.1 顺序程序及特点 74
4.1.2 并发程序及特点 76
4.1.3 与时间有关的错误 78
4.2 进程概念 79
4.2.1 进程的定义 79
4.2.2 进程的状态及变迁 80
4.2.3 进程控制块 81
4.3 进程控制 83
4.3.1 进程控制的概念 83
4.3.2 进程创建与撤销 84
4.3.3 进程等待与唤醒 85
4.4 进程之间的约束关系 86
4.4.1 进程竞争与合作 86
4.4.2 进程互斥的概念 87
4.4.3 进程同步的概念 89
4.5 同步机构 90
4.5.1 锁和上锁、开锁操作 91
4.5.2 信号灯和P、V操作 92
4.6 进程互斥与同步的实现 94
4.6.1 上锁原语和开锁原语实现进程互斥 94
4.6.2 信号灯实现进程互斥 94
4.6.3 进程同步的实现 95
4.6.4 生产者—消费者问题 99
4.7 进程通信 100
4.7.1 进程通信的概念 100
4.7.2 进程通信方式 100
4.8 线程概念及特点 102
4.8.1 线程的概念 102
4.8.2 线程的特点与状态 103
4.9 操作系统的并发机制实例 105
4.9.1 创建进程及应用实例 105
4.9.2 创建线程及应用实例 107
4.9.3 等待进程、线程的终止及其应用 107
4.9.4 信号量与使用方法 109
4.9.5 共享主存及应用实例 110
4.10 UNIX系统的进程管理 112
4.10.1 UNIX系统的进程及映像 112
4.10.2 UNIX进程的状态及变迁 115
4.10.3 UNIX进程的创建 118
4.10.4 UNIX进程的终止与等待 120
4.10.5 UNIX进程的睡眠与唤醒 122
4.11 Linux系统的进程管理 123
4.11.1 Linux系统的进程与线程 123
4.11.2 进程描述符及其主要内容 123
4.11.3 进程描述符的获得 126
4.11.4 Linux系统的进程状态变迁 127
4.11.5 Linux系统的进程创建和终止 127
4.11.6 Linux系统的进程等待与唤醒 129
4.11.7 Linux系统中线程的实现 130
习题4 130
第5章 资源分配与调度 135
5.1 资源管理概述 135
5.1.1 资源管理的目的和任务 135
5.1.2 虚拟资源 136
5.2 资源管理的机制和策略 137
5.2.1 资源分配机制 137
5.2.2 资源分配策略 139
5.3 死锁 143
5.3.1 死锁的定义与例子 143
5.3.2 产生死锁的原因和必要条件 145
5.3.3 系统模型和死锁的处理 146
5.3.4 解决死锁问题的策略 150
5.3.5 死锁的预防 151
5.3.6 死锁的避免 152
5.3.7 死锁的检测与忽略 153
习题5 154
第6章 处理机调度 157
6.1 处理机的多级调度 157
6.2 作业调度 158
6.2.1 作业的状态 158
6.2.2 作业调度的功能 158
6.2.3 作业控制块 159
6.2.4 调度算法性能的衡量 160
6.2.5 作业调度算法 161
6.3 进程调度 163
6.3.1 调度/分派结构 163
6.3.2 进程调度的功能 164
6.3.3 调度方式 165
6.3.4 进程优先数调度算法 165
6.3.5 循环轮转调度 167
6.3.6 多级反馈队列调度 168
6.3.7 调度用的进程状态变迁图 169
6.4 线程调度 170
6.5 UNIX系统的进程调度 171
6.5.1 UNIX系统的进程调度算法 171
6.5.2 进程切换调度程序switch 172
6.6 Linux系统的进程调度 173
6.6.1 进程调度程序的设计目标和特点 173
6.6.2 可变优先级 174
6.6.3 可变时间片 175
6.6.4 进程调度用的数据结构 177
6.6.5 Linux系统的进程调度算法 178
习题6 179
第7章 主存管理 181
7.1 主存管理概述 181
7.1.1 主存分片共享 181
7.1.2 程序的逻辑组织 182
7.2 主存管理的功能 182
7.2.1 虚拟存储器 182
7.2.2 地址映射 184
7.2.3 主存分配 186
7.2.4 存储保护 187
7.3 分区存储管理及存在的问题 188
7.3.1 动态分区存储管理技术 188
7.3.2 分区分配机构 189
7.3.3 分区分配与放置策略 190
7.3.4 碎片问题及拼接技术 192
7.4 页式存储管理 193
7.4.1 页式系统应解决的问题 193
7.4.2 页式地址变换 194
7.4.3 请调页面的机制 197
7.4.4 淘汰机制与策略 199
7.4.5 几种置换算法 201
7.5 段式和段页式存储管理 204
7.5.1 段式地址结构 204
7.5.2 段式地址变换 204
7.5.3 扩充段表功能 205
7.5.4 段页式存储管理 206
7.6 UNIX系统的存储管理 207
7.6.1 概述 207
7.6.2 请求调页的数据结构 208
7.6.3 UNIX系统的地址变换 209
7.6.4 页面错 210
7.7 Linux系统的存储管理 211
7.7.1 主存寻址 211
7.7.2 Linux系统段页式地址变换 214
7.7.3 Linux系统动态内核管理 215
7.7.4 Linux系统的进程地址空间 218
习题7 220
第8章 设备管理 223
8.1 设备管理概述 223
8.1.1 设备管理的功能 223
8.1.2 设备独立性 224
8.1.3 设备控制块 226
8.2 缓冲技术 226
8.2.1 缓冲概述 226
8.2.2 常用的缓冲技术 228
8.3 设备分配 229
8.3.1 设备分配概述 229
8.3.2 独享分配 230
8.3.3 共享分配 230
8.3.4 虚拟分配 231
8.4 输入/输出控制 233
8.4.1 输入/输出硬件 233
8.4.2 输入/输出控制方式 234
8.4.3 输入/输出子系统 237
8.4.4 输入/输出控制的例子 239
8.5 UNIX系统的设备管理 241
8.5.1 UNIX系统设备管理的特点 241
8.5.2 UNIX系统的设备驱动程序接口 242
8.5.3 UNIX系统的缓冲区管理 244
8.5.4 UNIX系统的设备I/O控制 251
8.6 Linux系统的设备驱动 253
8.6.1 Linux系统设备的分类 253
8.6.2 设备文件及其标识 254
8.6.3 Linux块设备的处理 256
8.6.4 用于块设备处理的数据结构 257
8.6.5 输入/输出调度程序 260
8.6.6 策略例程 261
习题8 262
第9章 文件系统 264
9.1 文件系统概述 264
9.1.1 文件 264
9.1.2 文件系统 266
9.1.3 文件的组织 267
9.2 文件的逻辑结构和存取方法 268
9.2.1 文件的逻辑结构 268
9.2.2 文件的存取方法 269
9.3 文件的物理结构 269
9.3.1 连续文件 270
9.3.2 串联文件 271
9.3.3 索引文件 272
9.3.4 文件物理结构比较 274
9.4 文件存储空间的管理 275
9.4.1 空闲文件目录 275
9.4.2 空闲块链 275
9.4.3 位示图 275
9.4.4 分配策略 276
9.5 文件目录 277
9.5.1 文件目录及其内容 277
9.5.2 一级文件目录及缺点 278
9.5.3 多级文件目录 278
9.6 共享与安全 279
9.6.1 文件共享与安全性的关系 279
9.6.2 存取权限的类型及其验证 280
9.6.3 用文件路径名加快文件的查找 282
9.7 文件操作与文件备份 284
9.7.1 文件操作 284
9.7.2 文件备份 285
9.8 UNIX文件系统的主要结构及实现 286
9.8.1 UNIX文件系统的特点 286
9.8.2 UNIX系统的索引文件结构 287
9.8.3 UNIX系统文件目录结构 291
9.8.4 UNIX系统的打开文件机构 292
9.8.5 文件存储器空闲块的管理 296
9.8.6 UNIX文件系统调用 298
9.9 Linux文件系统 303
9.9.1 虚拟文件系统VFS(Virtual File System)概述 304
9.9.2 VFS通用文件系统模型与VFS对象 304
9.9.3 与进程相关的数据结构 307
9.9.4 VFS系统调用的实现 308
9.9.5 Ext2文件系统概述 310
9.9.6 Ext2磁盘数据结构 312
9.9.7 Ext2磁盘空间的管理 314
9.9.8 Ext2主存数据结构 316
习题9 317
模拟试题1 320
模拟试题2 322
模拟试题1答案 324
模拟试题2答案 328
参考文献 332