目录 1
第一篇 操作系统的基本原理 1
第1章 操作系统概论 1
1.1 操作系统的组成和设计目标 1
1.2 操作系统的形成与发展 2
1.2.1 顺序处理(手工操作)阶段 2
1.2.2 简单的批处理系统(Simple Batch System) 3
1.2.3 多道成批处理系统(Multiprogrammed Batch System) 5
1.2.4 分时系统(Time-Sharing System) 8
1.2.5 实时系统(Real-Time System) 10
1.2.6 嵌入式系统(Embedded System) 11
1.3 操作系统的功能和特性 12
1.4 操作系统的进一步发展 14
1.5 操作系统的设计规范 16
1.6 小结 17
习题 18
第2章 进程管理 19
2.1 进程的引入及其概念 19
2.2 进程的描述 22
2.3 进程的控制 25
2.4 进程调度 27
2.5 线程的引入 29
2.6 进程之间的低级通信 31
2.6.1 进程之间的互斥 32
2.6.2 进程之间的同步 34
2.6.3 信号量和P,V操作 35
2.6.4 管程 39
2.7 进程之间的高级通信 42
2.8.1 死锁的定义和死锁产生的必要条件 45
2.8 死锁 45
2.8.2 解决死锁的方法 46
2.9 小结 54
习题 55
第3章 作业管理 58
3.1 引言 58
3.2 作业输入 59
3.3 作业调度 60
3.3.1 作业的状态及其转换 60
3.3.2 作业调度的任务 61
3.4 作业控制 63
3.5 系统调用 64
3.6 小结 67
习题 67
第4章 存储器管理 69
4.1 引言 69
4.1.1 存储器管理功能 69
4.1.2 存储器管理中涉及的几个概念 69
4.2 单用户单道程序的存储器分配 71
4.3.1 固定式分区(Fixed Pa rtition) 72
4.3 多用户多道程序的存储器分配——分区分配 72
4.3.2 可变式分区(Dynamic Partition) 73
4.4 覆盖与交换技术 77
4.5 页式存储器管理 79
4.5.1 页式管理的实现原理 79
4.5.2 页式动态地址变换 80
4.5.3 快表和联想存储器 81
4.5.4 页式管理的主存分配与回收 83
4.6 段式存储器管理 84
4.7.1 页式虚拟存储器管理 87
4.7 虚拟存储器 87
4.7.2 页式管理设计中应考虑的问题 92
4.7.3 段式虚拟存储器管理 96
4.7.4 段页式存储器管理 98
4.8 小结 99
习题 99
第5章 文件系统 102
5.1 文件和文件系统 102
5.2 文件的逻辑结构和存取方法 103
5.3.1 文件的物理结构 105
5.3 文件的物理结构和存储介质 105
5.3.2 文件的存储介质 108
5.4 文件记录的组块与分解 110
5.5 文件目录结构 111
5.6 文件存储器存储空间的管理 114
5.7 文件的共享与保护 116
5.7.1 文件的共享 117
5.7.2 文件的保护 117
5.7.3 文件的存取控制 118
5.8 文件的操作命令 120
5.9 文件系统的组织结构 122
5.10 小结 123
习题 123
第6章 设备管理 125
6.1 I/O硬件组成 125
6.1.1 I/O设备 125
6.1.2 设备控制器 125
6.1.3 直接存储器访问(DMA) 128
6.1.4 通道控制方式 129
6.2.1 I/O软件的目标 130
6.2 I/O软件的组成 130
6.2.2 I/O软件的功能 131
6.3 磁盘管理 136
6.3.1 磁盘的物理性能 136
6.3.2 磁盘调度算法 137
6.3.3 磁盘调度算法的比较 139
6.3.4 磁盘的错误处理 140
6.3.5 提高磁盘性能和容错性的机制——独立磁盘的冗余阵列 141
6.4 终端管理 144
6.4.1 终端硬件 144
6.4.2 终端软件 146
6.5 时钟管理 148
6.5.1 时钟硬件 149
6.5.2 时钟软件 149
6.6 小结 151
习题 151
第二篇 UNIX系统V操作系统的实例研究 154
第7章 UNIX系统V的进程管理 154
7.1 UNIX系统的进程组成 154
7.1.1 UNIX系统的进程映像 154
7.1.2 UNIX系统的进程控制块 155
7.2 进程的状态及其转换 160
7.3 UNIX系统进程的上下文 162
7.4 UNIX系统的进程控制 163
7.4.1 进程的创建fork() 163
7.4.2 进程的终止exit() 165
7.4.3 父进程等待子进程终止的同步命令wait() 165
7.4.4 进程的睡眠与唤醒(sleep()和wakeup()) 167
7.4.5 进程执行一个新程序的系统调用exec() 170
7.4.6 UNIX系统的工作过程 172
7.5 UNIX系统的进程调度 173
7.5.1 进程优先级 174
7.5.2 影响进程调度的三个标志 175
7.5.3 进程调度的时机 175
7.5.4 进程调度的功能 176
7.6 进程的换入与换出 177
7.7 小结 178
习题 178
8.1 虚存空间的划分 179
8.1.1 系统空间布局 179
第8章 UNIX系统V存储器管理 179
8.1.2 VAX-11机的地址结构 180
8.2 存储器管理中的几个数据结构 180
8.2.1 页表 180
8.2.2 系统空闲页表(spt)区的管理 181
8.2.3 主存位示图 182
8.2.4 交换区空闲空间的管理 182
8.3 主存分配与回收 183
8.3.1 主存的分配和释放函数 183
8.3.2 进程的主存分配与释放 186
8.4 地址转换 189
8.5 请求调页处理 190
8.6 小结 193
习题 193
第9章 UNIX系统V的文件系统 194
9.1 UNIX文件系统的逻辑结构 194
9.2 UNIX文件系统中所用的数据结构 194
9.2.1 文件卷的结构 194
9.2.2 超级块结构 195
9.2.3 UNIX系统文件目录与索引节点 196
9.3 磁盘索引节点的分配与回收 199
9.4 空闲盘块的分配与回收 200
9.5 UNIX系统使用的打开文件数据结构 201
9.6 UNIX文件系统的系统调用命令 204
9.6.1 文件的创建、打开和删除命令 204
9.6.2 文件的读/写命令 206
9.6.3 文件关闭的系统调用命令(close) 207
9.6.4 文件连接系统调用命令(link) 208
9.6.5 改变文件读/写指针的系统调用命令(seek) 208
9.6.6 解除连接的系统调用命令(unlink) 208
9.7.1 安装表与文件卷的安装过程 209
9.7 UNIX文件系统的安装与拆卸 209
9.7.2 文件卷的拆卸 211
9.8 小结 211
习题 212
第10章 UNIX系统V的输入/输出子系统 214
10.1 与设备驱动程序的接口 214
10.2 块设备管理 215
10.2.1 系统缓冲池及各种队列的管理 215
10.2.2 缓冲区的分配与释放 219
10.2.3 块设备管理中的几个数据结构 220
10.2.4 系统调用与块设备驱动程序的接口 225
10.3 字符设备管理 229
10.3.1 字符设备中使用的数据结构 229
10.3.2 字符设备的缓冲技术 234
10.3.3 终端设备的字符输入/输出处理及设备驱动 238
10.4 小结 240
习题 241
11.1 管道通信 242
11.1.1 创建无名管道 242
第11章 UNIX系统V进程之间的通信 242
11.1.2 创建一个有名管道 244
11.2 消息缓冲机制 246
11.2.1 消息缓冲使用的数据结构 247
11.2.2 消息缓冲的系统调用 248
11.2.3 消息缓冲的通信过程 250
11.3 共享主存段机制 252
11.3.1 共享主存段使用的数据结构 252
11.3.2 共享主存段的系统调用 253
11.3.3 共享主存段机制中各数据结构的关系 254
11.4 信号量机制 256
11.4.1 信号量机制中的数据结构 256
11.4.2 信号量机制的系统调用 258
11.5 小结 261
习题 261
第12章 中断和异常处理 262
12.1 中断和异常处理的硬件基础 262
12.2 中断和异常处理 266
12.2.1 中断处理 266
12.2.2 异常处理 269
12.3 软中断处理机制 272
12.3.1 软中断的处理方式 273
12.3.2 软中断中使用的几个函数 273
12.3.3 软中断信号机制的应用 275
12.4 小结 276
习题 276
第13章 Linux操作系统 277
13.1 Linux的进程管理 278
13.2.1 i386的页式主存管理机制 281
13.2 Linux的存储器管理 281
13.2.2 Linux主存管理的基本框架 282
13.2.3 存储器管理中的几个重要数据结构 283
13.2.4 主存页框的调度 287
13.2.5 缺页异常处理 288
13.3 Linux虚拟文件系统 289
13.3.1 VFS的数据结构 290
13.3.2 VFS系统调用的实现 296
13.4 Ext2文件系统 298
13.4.1 Ext2的磁盘数据结构 298
13.4.2 Ext2的主存数据结构 301
13.4.3 Ext2的系统调用命令 304
13.5 Linux I/O系统 305
13.6 小结 309
习题 310
第三篇 WindoWs 2000的操作系统研究 311
第14章 Windows2000操作系统模型 311
14.1 Windows 2000操作系统的体系结构 311
14.1.1 用户态进程 312
14.1.3 NT执行体 313
14.1.2 NT子系统动态连接库NTDL L.DLL 313
14.1.4 内核 314
14.1.5 硬件抽象层 315
14.1.6 设备驱动程序 315
14.2 Windows 2000操作系统的特点 315
14.3 Windows 2000的系统机制 316
14.3.1 陷阱处理程序(TrapDispatching) 316
14.3.2 中断调度 317
14.3.3 异常调度(Exception Dispatcher) 320
14.3.4 系统服务调度 321
14.4.1 对象结构 322
14.4 对象管理器 322
14.4.2 管理对象 324
14.5 对象之间的同步 326
14.5.1 内核对象的同步 326
14.5.2 执行体对象的同步 327
14.6 小结 330
习题 330
15.1.1 进程对象 331
15.1 Windows 2000进程和线程 331
第15章 Windows 2000进程和线程管理 331
15.1.2 Windows 2000线程对象 333
15.2 Windows 2000的线程调度 334
15.2.1 Windows2000的线程调度特征 334
15.2.2 进程和线程优先级 334
15.2.3 调度程序的数据结构 337
15.2.4 线程调度的策略 337
15.2.5 线程优先级提升 338
15.3 对称多处理机系统上的线程调度 340
15.4 线程的状态 342
15.5.1 同步对象 343
15.5 Windows 2000的进程同步 343
15.5.2 同步对象的应用示例 344
15.6 小结 348
习题 349
第16章 Windows 2000的存储器管理 350
16.1 Windows 2000的存储器管理概述 350
16.1.1 进程地址空间的布局 350
16.1.2 进程空间的主存分配 351
16.2.1 Windows 2000地址转换所涉及的数据结构 355
16.2 Windows 2000地址转换 355
16.2.2 页错误处理 360
16.3 页调度策略 362
16.4 小结 364
习题 364
第17章 Windows 2000的文件系统 365
17.1 Windows 2000的文件系统概述 365
17.2 主控文件表 366
17.3 NTFS文件的物理结构 369
17.4.1 Windows 2000文件系统分层模型 370
17.4 Windows 2000文件系统模型 370
17.4.2 Windows 2000文件系统驱动程序的组成 371
17.5 NTFS文件的安全性 373
17.6 NTFS可恢复性支持 373
17.6.1 文件系统采用的优化技术 373
17.6.2 日志文件服务的实现 374
17.6.3 NTFS坏簇恢复的支持 378
17.7 小结 379
习题 379
18.1 Windows 2000的I/O系统结构 380
第18章 Windows 2000的设备管理 380
18.2 I/O管理系统所涉及的关键数据结构 381
18.2.1 I/O管理系统的特点 381
18.2.2 几个关键的数据结构 382
18.3 Windows 2000 I/O处理 384
1 8.3.1 对单层驱动程序的I/O请求的处理 385
18.3.2 设备I/O的中断处理 386
18.3.3 I/O请求的完成过程处理 386
18.3.4 对多层驱动程序的I/O请求的处理 387
18.4 多处理I/O中的同步问题 390
18.3.5 使用异步I/O的考虑 390
18.5 映射文件I/O和文件高速缓存 391
18.6 快速I/O 391
18.7 即插即用管理器 392
18.8 小结 393
习题 394
第四篇 网络与分布式系统 395
第19章 网络与分布式处理综述 395
19.1 分布式系统概述 395
19.2 开放式系统互连通信结构 400
19.3 网络服务器 402
19.4 进程迁移 406
19.5 分布式进程通信 409
19.6 分布式进程管理 414
19.6.1 分布式互斥 414
19.6.2 分布式互斥算法 417
19.7 分布式进程死锁问题 420
19.7.1 资源分配中的死锁 420
19.7.2 消息通信中的死锁 422
19.8 小结 424
参考文献 425