第1章 绪论 1
1.1 操作系统概念 1
1.2 操作系统的历史 2
1.2.1 手工操作阶段 2
1.2.2 早期批处理 3
1.2.3 多道程序系统 5
1.2.4 分时操作系统 6
1.2.5 实时操作系统 6
1.2.6 通用操作系统 7
1.2.7 操作系统的进一步发展 7
1.3 操作系统的基本类型 8
1.3.1 批处理操作系统 8
1.3.2 分时系统 9
1.3.3 实时系统 9
1.3.4 通用操作系统 10
1.3.5 个人计算机上的操作系统 10
1.3.6 网络操作系统 10
1.3.7 分布式操作系统 11
1.4 操作系统功能 11
1.4.1 处理机管理 12
1.4.2 存储管理 12
1.4.3 设备管理 12
1.4.4 信息管理(文件系统管理) 12
1.4.5 用户接口 13
1.5 计算机硬件简介 13
1.5.1 计算机的基本硬件元素 13
1.5.2 与操作系统相关的几种主要寄存器 14
1.5.3 存储器的访问速度 15
1.5.4 指令的执行与中断 15
1.5.5 操作系统的启动 16
1.6 算法的描述 16
1.7 研究操作系统的几种观点 17
1.7.1 计算机资源管理者的观点 18
1.7.2 用户界面的观点 18
1.7.3 进程管理的观点 18
本章小结 18
习题 19
第2章 操作系统用户界面 20
2.1 简介 20
2.2 一般用户的输入输出界面 21
2.2.1 作业的定义 21
2.2.2 作业组织 21
2.2.3 一般用户的输入输出方式 22
2.3 命令控制界面 24
2.4 Linux与Windows的命令控制界面 25
2.4.1 Linux的命令控制界面 25
2.4.2 Windows的命令控制界面 27
2.5 系统调用 29
2.6 Linux和Windows的系统调用 31
2.6.1 Linux系统调用 31
2.6.2 Windows系统调用 32
本章小结 33
习题 34
第3章 进程管理 35
3.1 进程的概念 35
3.1.1 程序的并发执行 35
3.1.2 进程的定义 39
3.2 进程的描述 39
3.2.1 进程控制块 40
3.2.2 进程上下文 41
3.2.3 进程上下文切换 43
3.2.4 进程空间与大小 43
3.3 进程状态及其转换 44
3.3.1 进程状态 44
3.3.2 进程状态转换 44
3.4 进程控制 45
3.4.1 进程创建与撤销 45
3.4.2 进程的阻塞与唤醒 47
3.5 进程互斥 47
3.5.1 资源共享所引起的制约 47
3.5.2 互斥的加锁实现 50
3.5.3 信号量和P、V原语 51
3.5.4 用P、V原语实现进程互斥 54
3.6 进程同步 55
3.6.1 同步的概念 55
3.6.2 私用信号量 56
3.6.3 用P、V原语操作实现同步 57
3.6.4 生产者-消费者问题 58
3.7 进程通信 59
3.7.1 进程的通信方式 59
3.7.2 消息缓冲机制 60
3.7.3 邮箱通信 61
3.7.4 进程通信的实例——和控制台的通信 62
3.7.5 进程通信的实例——管道 66
3.8 死锁问题 69
3.8.1 死锁的概念 69
3.8.2 死锁的消除方法 70
3.9 线程的概念 71
3.9.1 为什么要引入线程 71
3.9.2 线程的基本概念 72
3.9.3 线程与进程的区别 72
3.9.4 线程的适用范围 73
3.1 0线程分类与执行 74
3.1 0.1 线程的分类 74
3.1 0.2 线程的执行特性 76
本章小结 77
习题 77
第4章 处理机调度 79
4.1 分级调度 79
4.1.1 作业的状态及其转换 79
4.1.2 调度的层次 80
4.1.3 作业与进程的关系 81
4.2 作业调度 81
4.2.1 作业调度功能 81
4.2.2 作业调度目标与性能衡量 82
4.3 进程调度 84
4.3.1 进程调度的功能 84
4.3.2 进程调度的时机 85
4.3.3 进程调度性能评价 86
4.4 调度算法 86
4.5 算法评价 90
4.5.1 FCFS方式的调度性能分析 90
4.5.2 轮转法调度性能评价 93
4.5.3 线性优先级法的调度性能 94
4.6 实时系统调度方法 95
4.6.1 实时系统的特点 95
4.6.2 实时调度算法的分类 97
4.6.3 时限调度算法与频率单调调度算法 97
本章小结 99
习题 99
第5章 存储管理 101
5.1 存储管理的功能 101
5.1.1 虚拟存储器 101
5.1.2 地址变换 102
5.1.3 内外存数据传输的控制 104
5.1.4 内存的分配与回收 104
5.1.5 内存信息的共享与保护 105
5.2 分区存储管理 106
5.2.1 分区管理基本原理 106
5.2.2 分区的分配与回收 108
5.2.3 有关分区管理其他问题的讨论 111
5.3 覆盖与交换技术 112
5.3.1 覆盖技术 112
5.3.2 交换技术 113
5.4 页式管理 115
5.4.1 页式管理的基本原理 115
5.4.2 静态页面管理 115
5.4.3 动态页式管理 118
5.4.4 请求页式管理中的置换算法 120
5.4.5 存储保护 123
5.4.6 页式管理的优缺点 123
5.5 段式与段页式管理 124
5.5.1 段式管理的基本思想 124
5.5.2 段式管理的实现原理 124
5.5.3 段式管理的优缺点 128
5.5.4 段页式管理的基本思想 129
5.5.5 段页式管理的实现原理 129
5.6 局部性原理和抖动问题 131
本章小结 134
习题 134
第6章 进程与存储管理示例 136
6.1 Linux进程和存储管理简介 136
6.2 Linux进程结构 139
6.2.1 进程的概念 139
6.2.2 进程的虚拟地址结构 140
6.2.3 进程上下文 141
6.2.4 进程的状态和状态转换 143
6.2.5 小结 145
6.3 Linux进程控制 145
6.3.1 Linux启动及进程树的形成 145
6.3.2 进程控制 146
6.4 Linux进程调度 149
6.5 Linux进程通信 152
6.5.1 Linux的低级通信 152
6.5.2 进程间通信 153
6.6 Linux存储管理 161
6.6.1 虚存空间和管理 161
6.6.2 请求调页技术 163
本章小结 165
习题 166
第7章 Windows的进程与内存管理 167
7.1 Windows NT的特点及相关的概念 167
7.1.1 Windows NT体系结构的特点 167
7.1.2 Windows的管理机制 168
7.2 Windows进程和线程 169
7.2.1 Windows的进程和线程的定义 170
7.2.2 进程和线程的关联 170
7.2.3 Windows进程的结构 170
7.2.4 Windows线程的结构 171
7.2.5 Windows进程和线程的创建 172
7.3 Windows处理器调度机制 173
7.3.1 调度优先级 174
7.3.2 线程状态 174
7.3.3 线程调度机制 175
7.4 Windows的内存管理 176
7.4.1 内存管理器 177
7.4.2 内存管理的机制 177
7.5 虚拟地址空间 178
7.5.1 虚拟地址空间布局 178
7.5.2 虚拟地址转换 179
7.6 页面调度 181
7.6.1 缺页处理 181
7.6.2 工作集及页面调度策略 182
7.6.3 页框号和物理内存管理 182
本章小结 183
习题 184
第8章 文件系统 185
8.1 文件系统的概念 185
8.2 文件的逻辑结构与存取方法 187
8.2.1 逻辑结构 187
8.2.2 存取方法 189
8.3 文件的物理结构与存储设备 191
8.3.1 文件的物理结构 192
8.3.2 文件存储设备 194
8.4 文件存储空间管理 195
8.5 文件目录管理 197
8.5.1 文件的组成 198
8.5.2 文件目录 198
8.5.3 便于共享的文件目录 200
8.5.4 目录管理 201
8.6 文件存取控制 203
8.7 文件的使用 205
8.8 文件系统的层次模型 205
本章小结 207
习题 208
第9章 设备管理 210
9.1 引言 210
9.1.1 设备的类别 210
9.1.2 设备管理的功能和任务 211
9.2 数据传送控制方式 212
9.2.1 程序直接控制方式 212
9.2.2 中断方式 213
9.2.3 DMA方式 215
9.2.4 通道控制方式 217
9.3 中断技术 219
9.3.1 中断的基本概念 219
9.3.2 中断的分类与优先级 219
9.3.3 软中断 220
9.3.4 中断处理过程 220
9.4 缓冲技术 222
9.4.1 缓冲的引入 222
9.4.2 缓冲的种类 222
9.4.3 缓冲池的管理 223
9.5 设备分配 225
9.5.1 设备分配用数据结构 225
9.5.2 设备分配的原则 227
9.5.3 设备分配算法 228
9.6 I/O进程控制 228
9.6.1 I/O控制的引入 228
9.6.2 I/O控制的功能 228
9.6.3 I/O控制的实现 229
9.7 设备驱动程序 230
本章小结 230
习题 231
第10章 Linux文件系统 233
10.1 Linux文件系统的特点与文件类别 233
10.1.1 特点 233
10.1.2 文件类型 234
10.2 Linux的虚拟文件系统 235
10.2.1 虚拟文件系统框架 235
10.2.2 Linux虚拟文件系统的数据结构 235
10.2.3 VFS的系统调用 241
10.3 文件系统的注册和挂装 242
10.3.1 文件系统注册 242
10.3.2 已挂装文件系统描述符链表 243
10.3.3 挂装根文件系统 244
10.3.4 挂装一般文件系统 245
10.3.5 卸载文件系统 246
10.4 进程与文件系统的联系 246
10.4.1 系统打开文件表 246
10.4.2 用户打开文件表 246
10.4.3 进程的当前目录和根目录 247
10.5 ext2文件系统 247
10.5.1 ext2文件系统的存储结构 247
10.5.2 ext2文件系统主要的磁盘数据结构 248
10.5.3 ext2文件系统的内存数据结构 251
10.5.4 数据块寻址 252
10.6 块设备驱动 253
10.6.1 设备配置 253
10.6.2 设备驱动程序的接口 254
10.7 字符设备驱动 255
本章小结 256
习题 257
第11章 Windows的设备管理和文件系统 258
11.1 Windows I/O系统的结构 258
11.1.1 设计目标 258
11.1.2 设备管理服务 258
11.2 设备驱动程序和I/O处理 259
11.2.1 设备驱动类型和结构 260
11.2.2 Windows的I/O处理 260
11.3 Windows的文件系统 262
11.3.1 Windows磁盘管理 263
11.3.2 Windows文件系统格式 263
11.3.3 Windows文件系统驱动 264
11.4 NTFS文件系统 264
11.4.1 NTFS的特点 264
11.4.2 NTFS的磁盘结构 265
11.4.3 NTFS的文件系统恢复 266
本章小结 267
习题 268
第12章 嵌入式操作系统简介 269
12.1 嵌入式操作系统的总体架构 269
12.1.1 嵌入式操作系统特点及分类 269
12.1.2 嵌入式操作系统的总体架构 270
12.2 嵌入式操作系统的任务管理 273
12.2.1 多任务机制 273
12.2.2 任务状态和任务状态迁移 274
12.2.3 任务调度 275
12.2.4 任务间通信 276
12.2.5 VxWorks任务管理 278
12.3 内存管理 281
12.3.1 动态内存管理机制 282
12.3.2 VxWorks动态内存管理函数 282
12.3.3 虚拟内存管理机制 283
12.3.4 VxWorks虚拟内存管理 284
12.4 设备管理与文件系统 285
12.4.1 I/O系统内部结构 285
12.4.2 实时内核的中断管理 286
12.4.3 基本I/O操作流程 287
12.4.4 VxWorks的I/O接口 287
12.4.5 文件系统架构及操作 288
12.4.6 VxWorks文件系统 289
12.5 嵌入式操作系统的开发 290
12.5.1 集成开发环境Tornado 291
12.5.2 VxWorks的交叉编译开发环境 294
12.5.3 实例开发的设计与实现过程 296
本章小结 297
习题 298
参考文献 299