第1章 概述 1
1.1 早期操作系统 1
1.1.1 操作系统的产生 1
1.1.2 多道批处理系统 4
1.1.3 分时系统 6
1.2 现代操作系统 7
1.2.1 通用操作系统 7
1.2.2 UNIX操作系统 8
1.2.3 PC操作系统 10
1.2.4 实时操作系统 11
1.2.5 嵌入式操作系统 12
1.2.6 网络操作系统 13
1.2.7 分布式操作系统 13
1.3 操作系统基本概念 14
1.3.1 操作系统的任务和地位 14
1.3.2 操作系统的功能 15
1.3.3 操作系统的体系结构 16
1.3.4 Linux的体系结构 18
1.3.5 Windows XP的体系结构 19
1.4 小结 21
1.5 习题 22
第2章 操作系统用户界面 24
2.1 用户管理 24
2.1.1 用户账号 24
2.1.2 特权用户与普通用户 24
2.1.3 Linux的用户管理 25
2.1.4 用户登录过程 27
2.2 用户界面 27
2.2.1 命令解释程序 27
2.2.2 桌面管理程序 29
2.2.3 Linux的Shell及其编程 32
2.3 用户运行程序的上机过程 41
2.3.1 编辑程序文件 41
2.3.2 编译程序 45
2.3.3 运行程序 47
2.4 Linux实用软件工具 47
2.4.1 流编辑器sed 48
2.4.2 模式文本处理器awk 50
2.4.3 程序自动维护工具make 54
2.4.4 源码级调试器gdb 58
2.5 小结 64
2.6 习题 65
2.7 上机实验 66
第3章 操作系统内核 67
3.1 核心态与用户态 67
3.2 中断和异常 69
3.2.1 中断的基本概念 69
3.2.2 异常的基本概念 72
3.2.3 中断/异常处理 72
3.3 系统调用 74
3.3.1 系统调用的特殊性 74
3.3.2 系统调用机制 75
3.3.3 Linux的系统调用机制 77
3.4 内核的运行流程 79
3.5 小结 81
3.6 习题 82
3.7 上机实验 83
第4章 进程与线程 84
4.1 进程的基本概念 84
4.1.1 进程的定义 84
4.1.2 进程的表示 85
4.1.3 进程映像 86
4.2 进程管理 86
4.2.1 进程生命周期 86
4.2.2 进程的创建和终止 87
4.2.3 进程运行状态 88
4.2.4 进程管理功能 91
4.3 进程调度 92
4.3.1 调度过程 92
4.3.2 调度目标 94
4.3.3 调度算法 95
4.4 线程 100
4.4.1 进程局限性 100
4.4.2 线程的概念 102
4.4.3 线程调度 103
4.5 Linux的进程管理 106
4.5.1 进程与轻权进程 106
4.5.2 进程管理 107
4.5.3 进程调度 108
4.5.4 系统调用和命令 110
4.5.5 进程信号机制 116
4.6 小结 119
4.7 习题 120
4.8 上机实验 121
第5章 存储管理 122
5.1 基本概念 122
5.1.1 存储体系结构 122
5.1.2 存储管理的任务 123
5.2 连续存储管理 125
5.2.1 固定分区的连续分配 126
5.2.2 可变分区的连续分配 128
5.3 页式存储管理 131
5.3.1 基本思想 131
5.3.2 地址转换和保护 133
5.3.3 页帧的管理 135
5.3.4 页表的组织 136
5.3.5 动态存储管理功能 137
5.4 页式虚存管理 140
5.4.1 工作原理 140
5.4.2 页例外处理 141
5.4.3 页面替换算法 143
5.5 Linux的存储管理 145
5.5.1 进程地址空间管理 145
5.5.2 交换区的管理 147
5.5.3 使用存储映射文件 149
5.6 小结 151
5.7 习题 153
5.8 上机实验 154
第6章 进程并发与通信 155
6.1 同步与互斥 155
6.1.1 同步互斥问题 155
6.1.2 临界段的概念 157
6.1.3 原语和信号量 159
6.1.4 信号量的应用 164
6.2 进程间通信 169
6.2.1 IPC信号量 169
6.2.2 IPC共享存储区 171
6.2.3 IPC消息队列 172
6.2.4 应用程序例子 174
6.3 进程死锁 176
6.3.1 死锁分析 176
6.3.2 死锁预防 179
6.3.3 死锁避免 181
6.3.4 死锁检测和处理 183
6.4 小结 184
6.5 习题 186
6.6 上机实验 188
第7章 设备管理 189
7.1 基本概念 189
7.1.1 I/O设备分类 189
7.1.2 设备与CPU的连接 190
7.1.3 I/O控制方式 191
7.1.4 设备管理的任务 193
7.2 I/O层次结构 194
7.2.1 用户I/O层 195
7.2.2 逻辑设备I/O层 196
7.2.3 物理设备I/O层 198
7.2.4 输入/输出流程 199
7.3 优化输入/输出 200
7.3.1 缓冲区管理 200
7.3.2 磁盘请求调度 202
7.3.3 提高输入/输出效率 205
7.4 Linux设备驱动程序 206
7.4.1 设备驱动程序接口 206
7.4.2 内核模块加载机制 208
7.4.3 驱动程序实例 209
7.5 小结 214
7.6 习题 215
7.7 上机实验 216
第8章 文件系统 217
8.1 基本概念 217
8.1.1 文件存储设备 217
8.1.2 文件的基本概念 218
8.1.3 文件系统组成 220
8.2 设备文件系统 220
8.2.1 文件存储方式 221
8.2.2 文件目录结构 223
8.2.3 存储空间的管理 226
8.2.4 文件卷 227
8.2.5 Windows FAT文件系统 228
8.2.6 Linux EXT2文件系统 230
8.3 文件管理系统 233
8.3.1 文件目录系统 233
8.3.2 存取控制模块 235
8.3.3 逻辑文件I/O与物理文件I/O 236
8.3.4 文件卷管理 237
8.4 文件操作 238
8.4.1 文件的打开和关闭 238
8.4.2 文件的读/写 240
8.4.3 文件的保护 242
8.4.4 文件的备份 244
8.5 Linux的proc文件系统 246
8.6 小结 249
8.7 习题 250
8.8 上机实验 250
第9章 保护与安全 251
9.1 安全威胁 251
9.1.1 病毒 251
9.1.2 蠕虫 252
9.1.3 木马 253
9.1.4 隐蔽通道 253
9.1.5 网络攻击 254
9.2 安全机制 255
9.2.1 标识与鉴别 256
9.2.2 存取控制 257
9.2.3 最小特权控制 258
9.2.4 安全审计 259
9.2.5 入侵检测 261
9.2.6 数据加密 262
9.3 Linux的安全机制 265
9.4 安全评测标准 267
9.4.1 美国TCSEC橘皮书 267
9.4.2 中国国标GB 17859—1999 268
9.5 小结 269
9.6 习题 270
附录 271
附录A Linux常用命令 271
附录B 常用的Linux系统调用函数 276
附录C 常用的C函数 279
附录D 上机实验指导 282
参考文献 288