第1章 绪论 1
1.1 什么是操作系统 1
1.1.1 程序是如何运行的 1
1.1.2 操作系统的作用 2
1.2 操作系统运行环境 3
1.2.1 计算机的基本硬件元素 3
1.2.2 与操作系统相关的几种主要寄存器 4
1.2.3 指令的执行 5
1.2.4 中断 5
1.2.5 处理机状态及特权指令 6
1.3 操作系统的形成和发展 7
1.3.1 操作系统发展的基础 8
1.3.2 手工操作 8
1.3.3 批处理系统 9
1.3.4 分时系统 12
1.3.5 实时系统 13
1.3.6 个人操作系统 14
1.3.7 网络操作系统 15
1.3.8 分布式操作系统 15
1.3.9 嵌入式操作系统 16
1.3.10 操作系统的发展趋势 17
1.4 操作系统的功能和特性 17
1.4.1 操作系统的功能 17
1.4.2 操作系统的基本特征 19
1.5 操作系统结构 20
1.5.1 模块组合结构及层次结构 20
1.5.2 微内核结构 21
1.5.3 虚拟机结构 23
1.6 Linux操作系统 24
1.6.1 Linux发展历程 24
1.6.2 Linux的特点 26
1.6.3 Linux内核结构 27
习题 28
第2章 用户接口 29
2.1 命令控制界面 29
2.1.1 联机命令的类型 29
2.1.2 联机命令的操作方式 30
2.2 Linux系统的命令控制界面 31
2.2.1 登录Shell 31
2.2.2 命令句法 32
2.2.3 常用的基本命令 32
2.2.4 重定向与管道命令 35
2.2.5 通信命令 36
2.2.6 后台命令 38
2.3 程序接口 38
2.3.1 系统调用 38
2.3.2 系统调用的类型 39
2.3.3 系统调用的实现 39
2.3.4 Linux系统调用 41
2.3.5 Windows应用编程接口 43
习题 45
第3章 进程管理 46
3.1 进程的概念 46
3.1.1 进程的引入 46
3.1.2 进程的定义 48
3.1.3 引入进程的利弊 49
3.2 进程控制块和进程的状态 50
3.2.1 进程的状态及其变化 50
3.2.2 进程控制块 51
3.3 进程的控制 54
3.3.1 进程的创建原语 54
3.3.2 进程的撤销原语 56
3.3.3 进程的阻塞与唤醒原语 57
3.4 进程同步 58
3.4.1 互斥 58
3.4.2 进程的同步 59
3.4.3 同步机构 60
3.4.4 同步机构应用 64
3.5 经典的进程同步问题 67
3.5.1 生产者-消费者问题 67
3.5.2 读者-写者问题 70
3.5.3 哲学家进餐问题 71
3.6 进程通信 72
3.6.1 进程通信的类型 72
3.6.2 进程通信的方式 73
3.6.3 消息缓冲队列通信机制 73
3.6.4 信箱通信 75
3.7 线程 76
3.7.1 线程的引入 76
3.7.2 线程的概念 77
3.7.3 线程的控制 78
3.7.4 线程的实现 79
3.7.5 线程的适用范围 80
3.8 Linux的进程管理 81
3.8.1 Linux进程概念与描述 81
3.8.2 Linux中的进程状态及其转换 82
3.8.3 Linux的进程控制 83
3.8.4 Linux的进程通信 85
习题 92
第4章 处理机调度与死锁 94
4.1 调度的基本概念 94
4.1.1 作业的概念及作业的状态 94
4.1.2 分级调度 96
4.1.3 调度的功能与时机 97
4.1.4 调度原则与性能衡量 98
4.2 调度算法 99
4.2.1 先来先服务算法 100
4.2.2 短作业优先算法 100
4.2.3 最高响应比优先算法 101
4.2.4 高优先权优先算法 102
4.2.5 轮转法 104
4.2.6 多级反馈算法 105
4.3 实时调度算法 106
4.3.1 实时系统的特点 106
4.3.2 实时调度算法 107
4.4 多处理机调度 109
4.4.1 多处理机系统的类型 110
4.4.2 多处理机系统调度方式 110
4.5 死锁 111
4.5.1 死锁的产生 112
4.5.2 死锁的必要条件 113
4.6 解决死锁问题的方法 113
4.6.1 死锁的预防 113
4.6.2 死锁的避免 114
4.6.3 死锁的检测与解除 118
4.7 Linux进程调度 120
4.7.1 调度的时机 120
4.7.2 调度策略 121
4.7.3 调度算法 121
习题 123
第5章 存储管理 126
5.1 存储管理基本概念 126
5.1.1 物理内存和虚拟存储空间 126
5.1.2 存储管理的主要任务 127
5.2 分区式存储管理 131
5.2.1 固定分区 131
5.2.2 可变分区 132
5.2.3 地址变换与内存保护 136
5.2.4 分区式存储管理的优缺点 136
5.3 页式存储管理 137
5.3.1 静态页式存储管理 137
5.3.2 动态页式存储管理 141
5.3.3 指令存取速度与页面大小问题 143
5.3.4 存储保护 144
5.3.5 页式存储管理的优缺点 144
5.4 淘汰算法与抖动现象 145
5.4.1 淘汰算法 145
5.4.2 抖动现象与工作集 149
5.5 段式存储管理 151
5.5.1 静态段式存储管理 151
5.5.2 动态段式存储管理 154
5.5.3 分段和分页的主要区别 155
5.5.4 段的信息共享 156
5.5.5 段的静态链接与动态链接 157
5.5.6 段式存储管理的内存保护 159
5.5.7 段式存储管理的优缺点 160
5.6 段页式存储管理 160
5.6.1 实现原理 160
5.6.2 段页式存储管理的其他问题 162
5.7 Linux存储管理 162
5.7.1 进程虚存空间的管理 163
5.7.2 Linux的分页式存储管理 164
习题 166
第6章 设备管理 168
6.1 设备管理概述 168
6.1.1 设备的分类 168
6.1.2 设备管理的目标 169
6.1.3 设备控制器 170
6.1.4 I/O系统的层次结构 171
6.2 数据传送控制方式 173
6.2.1 程序直接控制方式 173
6.2.2 中断控制方式 174
6.2.3 DMA控制方式 175
6.2.4 通道控制方式 177
6.3 中断处理与设备驱动程序 179
6.3.1 中断处理过程 179
6.3.2 设备驱动程序 180
6.4 缓冲技术 182
6.4.1 引入缓冲技术的原因 182
6.4.2 缓冲的种类 184
6.4.3 缓冲池的管理 185
6.5 设备分配 187
6.5.1 设备分配中的数据结构 187
6.5.2 设备分配的原则 188
6.5.3 设备分配程序 190
6.5.4 SPOOLing技术 190
6.6 逻辑I/O系统 192
6.7 Linux的设备管理 193
6.7.1 逻辑I/O管理 193
6.7.2 用户与设备驱动程序 195
6.7.3 设备模型 195
习题 196
第7章 文件管理 197
7.1 文件和文件系统 197
7.1.1 文件的概念 197
7.1.2 文件的分类 198
7.1.3 文件管理系统 199
7.2 文件的逻辑结构 200
7.2.1 无结构文件 201
7.2.2 顺序文件 201
7.2.3 索引文件 202
7.2.4 直接文件 202
7.3 文件的物理结构 203
7.3.1 连续文件 203
7.3.2 链接式文件 204
7.3.3 索引文件 206
7.4 文件存储空间的管理 207
7.4.1 位示图法 208
7.4.2 空闲表法 208
7.4.3 空闲链表法 209
7.5 文件目录管理 210
7.5.1 文件控制块的内容 210
7.5.2 目录结构 211
7.5.3 目录管理 213
7.6 文件共享和保护 215
7.6.1 基于索引节点的共享方法 216
7.6.2 基于符号链接的共享方法 216
7.6.3 文件的保护 217
7.7 磁盘管理与调度 219
7.7.1 磁盘性能简述 219
7.7.2 磁盘调度算法 221
7.8 Linux文件管理 223
7.8.1 Linux文件系统概论 223
7.8.2 虚拟文件系统 225
7.8.3 EXT文件系统 226
7.8.4 文件管理和操作 229
习题 232
第8章 多处理机系统 234
8.1 多处理机 235
8.1.1 多处理机硬件 236
8.1.2 多处理机操作系统类型 242
8.1.3 多处理机同步 244
8.1.4 处理机调度 247
8.2 多计算机 251
8.2.1 多计算机硬件 252
8.2.2 低层通信软件 255
8.2.3 用户层通信软件 256
8.2.4 远程过程调用 258
8.2.5 分布式共享存储器 259
8.2.6 多计算机调度 262
8.2.7 负载均衡 263
8.3 虚拟化 265
8.3.1 准虚拟化 266
8.3.2 内存的虚拟化 268
8.3.3 I/O设备的虚拟化 269
8.3.4 虚拟工具 269
8.3.5 多核处理机上的虚拟机 269
8.3.6 授权问题 270
习题 270
第9章 嵌入式操作系统 272
9.1 什么是嵌入式操作系统 272
9.2 嵌入式操作系统的特点 274
9.3 嵌入式操作系统的主要功能 276
9.4 嵌入式操作系统的应用领域 280
9.5 典型的嵌入式操作系统 281
9.5.1 VxWorks 281
9.5.2 QNX 282
9.5.3 嵌入式Linux 283
9.5.4 Windows CE 285
9.5.5 Android 286
9.5.6 iOS 287
9.5.7 Symbian OS 287
9.5.8 TinyOS 289
9.5.9 μC/OS 290
9.6 嵌入式操作系统的发展趋势 291
习题 292
第10章 操作系统安全 293
10.1 操作系统安全概述 293
10.2 操作系统的安全机制 294
10.2.1 硬件安全机制 295
10.2.2 标识与鉴别机制 298
10.2.3 访问控制机制 301
10.2.4 最小权限管理 307
10.2.5 可信路径 307
10.2.6 审计 308
10.3 Linux操作系统的安全性 308
10.3.1 PAM机制 309
10.3.2 文件系统加密 309
10.3.3 网络监控与入侵检测 309
10.3.4 强制访问控制 310
10.3.5 安全审计 310
10.3.6 防火墙机制 311
习题 311
参考文献 313