第1章 绪论 1
1.1 什么是操作系统 1
1.1.1 计算机系统的软件构成 1
1.1.2 操作系统作为特殊子程序 2
1.1.3 操作系统作为资源管理者 3
1.1.4 操作系统提供程序并发运行机制 4
1.2 操作系统的发展历史 4
1.2.1 监督程序 5
1.2.2 专用操作系统 8
1.2.3 多种方式操作系统 12
1.2.4 个人计算机操作系统、并行与分布式操作系统及其发展 12
1.3 主要操作系统介绍 14
1.3.1 Windows系列及MS DOS 14
1.3.2 UNIX大家族 16
1.3.3 自由软件Linux和freeBSD等 19
习题1 23
第2章 操作系统运行机制与用户界面 25
2.1 中断和异常 25
2.1.1 中断和异常的区别 25
2.1.2 中断分级 26
2.2 中断/异常响应和处理 28
2.2.1 中断/异常响应 28
2.2.2 中断/异常处理 29
2.3 操作系统运行模式 33
2.4 系统调用 35
2.5 人机界面 38
2.5.1 命令语言 39
2.5.2 图形化的用户界面 40
2.6 小结 42
习题2 42
第3章 进程与处理机管理 44
3.1 进程描述 44
3.1.1 进程定义 45
3.1.2 进程控制块 46
3.2 进程状态 48
3.2.1 进程的创建与结束 49
3.2.2 进程状态变化模型 50
3.2.3 进程挂起 52
3.3 进程控制与调度 53
3.3.1 进程运行 53
3.3.2 进程调度 55
3.3.3 进程调度算法 58
3.4 作业与进程的关系 62
3.5 线程的引入 64
3.6 小结 66
习题3 66
第4章 进程同步与通信、进程死锁 68
4.1 并行编程 68
4.1.1 并行编程方法 68
4.1.2 操作系统的支持 69
4.2 进程的同步与互斥 70
4.2.1 同步与临界段问题 71
4.2.2 解决临界段问题的硬件实现方法 72
4.2.3 信号量 74
4.2.4 管程 77
4.2.5 进程同步与互斥举例 77
4.3 消息传递 81
4.3.1 消息传递原理 82
4.3.2 消息传递示例 83
4.3.3 管道通信简介 84
4.4 死锁 85
4.4.1 死锁示例 85
4.4.2 死锁定义 86
4.4.3 死锁防止 88
4.4.4 死锁避免 90
4.4.5 死锁检测 92
4.4.6 死锁的恢复 93
4.4.7 死锁综合处理 94
4.5 小结 94
习题4 95
第5章 存储管理 99
5.1 连续空间分配 99
5.1.1 单道连续分配法 99
5.1.2 多道连续固定分区法 101
5.1.3 多道连续可变分区法 103
5.2 不连续空间分配 105
5.2.1 页式管理 106
5.2.2 段式管理 109
5.2.3 段页式管理 112
5.2.4 改进的页式管理 113
5.3 虚拟存储管理 114
5.3.1 页式虚存的基本思想 114
5.3.2 页式虚存管理实现 115
5.3.3 多级页表 117
5.3.4 页替换策略 119
5.4 小结 125
习题5 126
第6章 设备管理 129
6.1 I/O硬件概念 129
6.1.1 常见外部设备分类 129
6.1.2 设备控制器(I/O部件) 130
6.1.3 I/O控制方式 131
6.1.4 I/O控制方式的发展过程 134
6.2 设备I/O子系统 134
6.2.1 设备的使用方法 134
6.2.2 I/O层次结构 136
6.2.3 设备驱动程序 139
6.2.4 缓冲技术 141
6.3 存储设备 144
6.3.1 常见存储外部设备 144
6.3.2 磁盘调度 147
6.3.3 磁盘阵列 150
6.4 小结 154
习题6 154
第7章 文件系统 156
7.1 文件结构 156
7.1.1 文件概念 156
7.1.2 文件的逻辑结构 156
7.1.3 文件的物理存储 158
7.1.4 文件控制块 160
7.2 文件目录结构 161
7.2.1 一级目录结构 161
7.2.2 二级目录结构 162
7.2.3 树状目录结构 162
7.2.4 无环图目录结构 163
7.2.5 目录操作 164
7.3 文件存储器空间布局与管理 165
7.4 文件访问接口 166
7.4.1 传统文件系统调用的实现 167
7.4.2 存储映射文件访问 169
7.5 文件保护 169
7.5.1 文件访问保护 170
7.5.2 文件备份 171
7.6 文件系统的基本模型 172
7.7 FAT文件系统磁盘布局 175
7.8 小结 176
习题7 177
第8章 并行与分布式操作系统 178
8.1 并行操作系统 178
8.1.1 对称多处理机 178
8.1.2 线程概念 180
8.1.3 线程实现 186
8.1.4 线程调度 190
8.2 分布式系统 194
8.2.1 分布式系统特点 195
8.2.2 几种分布式系统应用模型 197
8.2.3 分布式系统实现模型 200
8.2.4 分布式操作系统主要研究内容 202
8.2.5 分布式系统基础——通信协议层次简介 203
8.3 小结 206
习题8 207
第9章 保护与安全 208
9.1 安全威胁 208
9.1.1 病毒 208
9.1.2 蠕虫 209
9.1.3 特洛伊木马 209
9.1.4 隐蔽通道 210
9.2 安全机制 210
9.2.1 硬件保护机制 210
9.2.2 标识与鉴别 211
9.2.3 存取控制 213
9.2.4 最小特权管理 214
9.2.5 安全审计 215
9.2.6 入侵检测 216
9.2.7 网络信息安全技术 217
9.2.8 软件漏洞防护技术 219
9.3 Linux的安全机制 221
9.4 安全评测标准 223
9.4.1 TCSEC 223
9.4.2 GB 17859-1999 224
9.5 小结 225
习题9 226
第10章 系统虚拟机 227
10.1 虚拟机概述 227
10.1.1 为什么需要虚拟机 227
10.1.2 虚拟机管理器的分类 228
10.1.3 系统虚拟化的优势及发展目标 228
10.1.4 虚拟机管理器的架构 229
10.2 CPU的虚拟化 230
10.2.1 软件完全虚拟化 230
10.2.2 硬件辅助虚拟化 230
10.3 内存的虚拟化 232
10.3.1 软件实现内存虚拟化 232
10.3.2 EPT页表辅助内存虚拟化 233
10.4 I/O设备的虚拟化 233
10.4.1 完全的软件I/O设备虚拟化 233
10.4.2 半虚拟化设备模拟 234
10.5 小结 235
习题10 235
第11章 Linux操作系统实例 236
11.1 进程管理 236
11.1.1 进程与进程描述符 236
11.1.2 进程状态及切换时机 237
11.1.3 进程的调度算法 239
11.1.4 进程的创建与消亡 239
11.2 存储管理 242
11.2.1 物理内存的管理 242
11.2.2 进程地址空间的管理 244
11.3 文件系统 248
11.3.1 VFS 248
11.3.2 EXT2 253
11.3.3 主要文件系统中系统调用的处理流程 256
11.4 设备管理 258
11.4.1 设备文件的概念 258
11.4.2 设备模型基础 259
11.4.3 相关数据结构 260
11.4.4 块设备文件的open()和read()操作 262
11.5 中断、异常及系统调用 263
11.5.1 中断/异常的基本知识 263
11.5.2 异常处理函数 264
11.5.3 系统调用 264
11.5.4 中断的处理 265
11.5.5 软中断 267
11.6 SysV进程间通信 268
11.6.1 共有的特性 268
11.6.2 信号量 270
11.6.3 消息队列 271
11.6.4 共享内存 273
习题11 275
附录A bash脚本编程简介 276
A.1 注释和简单命令 276
A.2 环境变量 276
A.3 控制结构 277
A.3.1 if语句 277
A.3.2 case语句 278
A.3.3 for语句 278
A.3.4 while语句和until语句 279
A.4 函数 279
附录B 实现一个简单的Linux命令解释器 281
B.1 myshell的语法 281
B.2 程序框架 281
B.3 命令行的语法分析 282
B.4 简单命令的执行 284
B.5 Makefile 284
附录C Linux常用命令 285
C.1 用户终端命令 285
C.2 vi编辑器的使用 292
附录D Linux常用函数 295
D.1 进程管理函数 295
D.2 文件管理函数 296
D.3 进程间通信函数 298
D.4 多线程库函数 301
附录E Linux内核综合实验指南 303
E1 实验目标与内容 303
E2 实验基础知识 303
E2.1 内核模块 303
E2.2 系统调用 307
E2.3 内存管理 309
E2.4 其他 311
E3 实验设计 313
E4 实验步骤 314
E5 常见问题 314
参考文献 316