图书简介:
目 录
第0章 读者与教师指南 1
0.1 本书概述 1
0.2 实例系统 1
0.3 读者和教师的学习路线图 2
0.4 互联网和网站资源 3
第一部分 背景知识
第1章 计算机系统概述 6
1.1 基本构成 6
1.2 微处理器的发展演化 7
1.3 指令的执行 8
1.4 中断 10
1.4.1 中断和指令周期 11
1.4.2 中断处理 14
1.4.3 多个中断 16
1.5 存储器的层次结构 17
1.6 高速缓存 19
1.6.1 动机 19
1.6.2 高速缓存原理 20
1.6.3 高速缓存设计 22
1.7 直接内存存取 22
1.8 多处理器和多核计算机组织结构 23
1.8.1 对称多处理器 24
1.8.2 多核计算机 25
1.9 推荐读物和网站 26
1.10 关键术语、复习题和习题 26
1.10.1 关键术语 26
1.10.2 复习题 26
1.10.3 习题 27
附录1A 两级存储器的性能特征 29
第2章 操作系统概述 34
2.1 操作系统的目标和功能 34
2.1.1 作为用户/计算机接口的操作系统 35
2.1.2 作为资源管理器的操作系统 36
2.1.3 操作系统的易扩展性 37
2.2 操作系统的发展 37
2.2.1 串行处理 38
2.2.2 简单批处理系统 38
2.2.3 多道批处理系统 40
2.2.4 分时系统 42
2.3 主要的成就 44
2.3.1 进程 44
2.3.2 内存管理 47
2.3.3 信息保护和安全 48
2.3.4 调度和资源管理 49
2.4 现代操作系统的特征 50
2.5 虚拟机 52
2.5.1 虚拟机和虚拟化 52
2.5.2 虚拟机架构 53
2.6 针对多处理器和多核的操作系统设计考虑因素 54
2.6.1 对称多处理器计算机的操作系统设计考虑因素 54
2.6.2 多核计算机的操作系统设计考虑因素 55
2.7 微软Windows系统简介 56
2.7.1 历史 56
2.7.2 现代操作系统 57
2.7.3 体系结构 57
2.7.4 客户/服务器模型 60
2.7.5 线程和SMP 61
2.7.6 Windows对象 61
2.7.7 Windows 7中的新特性 62
2.8 传统的UNIX系统 63
2.8.1 历史 63
2.8.2 描述 64
2.9 现代UNIX系统 65
2.9.1 System V版本4(简称SVR4) 65
2.9.2 BSD 66
2.9.3 Solaris 10 66
2.10 Linux操作系统 66
2.10.1 历史 66
2.10.2 模块结构 67
2.10.3 内核组件 69
2.11 Linux Vserver虚机器结构 71
2.12 推荐读物和网站 72
2.13 关键术语、复习题和习题 73
2.13.1 关键术语 73
2.13.2 复习题 74
2.13.3 习题 74
第二部分 进程
第3章 进程描述和控制 78
3.1 什么是进程 79
3.1.1 背景 79
3.1.2 进程和进程控制块 79
3.2 进程状态 80
3.2.1 两状态进程模型 82
3.2.2 进程的创建和终止 83
3.2.3 五状态模型 84
3.2.4 被挂起的进程 87
3.3 进程描述 91
3.3.1 操作系统的控制结构 91
3.3.2 进程控制结构 92
3.4 进程控制 96
3.4.1 执行模式 96
3.4.2 进程创建 97
3.4.3 进程切换 98
3.5 操作系统的执行 99
3.5.1 无进程的内核 100
3.5.2 在用户进程中执行 100
3.5.3 基于进程的操作系统 101
3.6 安全问题 101
3.6.1 系统访问威胁 102
3.6.2 对抗措施 103
3.7 UNIX SVR4进程管理 104
3.7.1 进程状态 104
3.7.2 进程描述 106
3.7.3 进程控制 107
3.8 小结 108
3.9 推荐读物 108
3.10 关键术语、复习题和习题 108
3.10.1 关键术语 108
3.10.2 复习题 109
3.10.3 习题 109
第4章 线程 112
4.1 进程和线程 112
4.1.1 多线程 112
4.1.2 线程功能特性 115
4.2 线程分类 116
4.2.1 用户级和内核级线程 116
4.2.2 其他方案 119
4.3 多核和多线程 120
4.3.1 多核系统上的软件性能 121
4.3.2 应用示例:Valve游戏软件 121
4.4 Windows 7线程和SMP管理 124
4.4.1 进程对象和线程对象 125
4.4.2 多线程 126
4.4.3 线程状态 126
4.4.4 对OS子系统的支持 127
4.4.5 对称多处理的支持 128
4.5 Solaris的线程和SMP管理 128
4.5.1 多线程体系结构 128
4.5.2 动机 129
4.5.3 进程结构 129
4.5.4 线程的执行 130
4.5.5 把中断当做线程 131
4.6 Linux的进程和线程管理 131
4.6.1 Linux任务 131
4.6.2 Linux线程 133
4.7 Mac OS X的GCD技术 134
4.8 小结 135
4.9 推荐读物 136
4.10 关键术语、复习题和习题 136
4.10.1 关键术语 136
4.10.2 复习题 136
4.10.3 习题 136
第5章 并发性:互斥和同步 140
5.1 并发的原理 141
5.1.1 一个简单的例子 142
5.1.2 竞争条件 143
5.1.3 操作系统关注的问题 143
5.1.4 进程的交互 144
5.1.5 互斥的要求 146
5.2 互斥:硬件的支持 147
5.2.1 中断禁用 147
5.2.2 专用机器指令 147
5.3 信号量 149
5.3.1 互斥 153
5.3.2 生产者/消费者问题 154
5.3.3 信号量的实现 157
5.4 管程 159
5.4.1 使用信号的管程 159
5.4.2 使用通知和广播的管程 162
5.5 消息传递 163
5.5.1 同步 164
5.5.2 寻址 165
5.5.3 消息格式 166
5.5.4 排队原则 166
5.5.5 互斥 166
5.6 读者/写者问题 167
5.6.1 读者优先 168
5.6.2 写者优先 168
5.7 小结 171
5.8 推荐读物 171
5.9 关键术语、复习题和习题 172
5.9.1 关键术语 172
5.9.2 复习题 173
5.9.3 习题 173
第6章 并发:死锁和饥饿 183
6.1 死锁原理 183
6.1.1 可重用资源 186
6.1.2 可消耗资源 187
6.1.3 资源分配图 188
6.1.4 死锁的条件 189
6.2 死锁预防 190
6.2.1 互斥 190
6.2.2 占有且等待 190
6.2.3 不可抢占 190
6.2.4 循环等待 190
6.3 死锁避免 191
6.3.1 进程启动拒绝 191
6.3.2 资源分配拒绝 192
6.4 死锁检测 195
6.4.1 死锁检测算法 195
6.4.2 恢复 196
6.5 一种综合的死锁策略 196
6.6 哲学家就餐问题 197
6.6.1 基于信号量解决方案 197
6.6.2 基于管程解决方案 198
6.7 UNIX的并发机制 199
6.7.1 管道 200
6.7.2 消息 200
6.7.3 共享内存 200
6.7.4 信号量 200
6.7.5 信号 201
6.8 Linux内核并发机制 202
6.8.1 原子操作 202
6.8.2 自旋锁 203
6.8.3 信号量 204
6.8.4 屏障 205
6.9 Solaris线程同步原语 206
6.9.1 互斥锁 207
6.9.2 信号量 207
6.9.3 多读者/单写者锁 207
6.9.4 条件变量 208
6.10 Windows 7并发机制 208
6.10.1 等待函数 208
6.10.2 分派器对象 209
6.10.3 临界区 209
6.10.4 轻量级读者-写者锁和条件变量 210
6.10.5 锁无关同步机制 210
6.11 小结 210
6.12 推荐读物 211
6.13 关键术语、复习题和习题 211
6.13.1 关键术语 211
6.13.2 复习题 212
6.13.3 习题 212
第三部分 内存
第7章 内存管理 218
7.1 内存管理的需求 218
7.1.1 重定位 219
7.1.2 保护 219
7.1.3 共享 219
7.1.4 逻辑组织 220
7.1.5 物理组织 220
7.2 内存分区 220
7.2.1 固定分区 221
7.2.2 动态分区 223
7.2.3 伙伴系统 225
7.2.4 重定位 227
7.3 分页 228
7.4 分段 230
7.5 安全问题 231
7.5.1 缓冲区溢出攻击 231
7.5.2 预防缓冲区溢出 234
7.6 小结 234
7.7 推荐读物 234
7.8 关键术语、复习题和习题 235
7.8.1 关键术语 235
7.8.2 复习题 235
7.8.3 习题 235
附录7A 加载和链接 237
第8章 虚拟内存 242
8.1 硬件和控制结构 242
8.1.1 局部性和虚拟内存 244
8.1.2 分页 244
8.1.3 分段 252
8.1.4 段页式 253
8.1.5 保护和共享 254
8.2 操作系统软件 255
8.2.1 读取策略 256
8.2.2 放置策略 256
8.2.3 置换策略 256
8.2.4 驻留集管理 261
8.2.5 清除策略 265
8.2.6 加载控制 266
8.3 UNIX和Solaris内存管理 267
8.3.1 分页系统 267
8.3.2 内核内存分配器 269
8.4 Linux内存管理 271
8.4.1 Linux虚拟内存 271
8.4.2 内核内存分配 272
8.5 Windows内存管理 272
8.5.1 Windows虚拟地址映射 272
8.5.2 Windows分页 273
8.6 小结 274
8.7 推荐读物和网站 274
8.8 关键术语、复习题和习题 275
8.8.1 关键术语 275
8.8.2 复习题 275
8.8.3 习题 275
第四部分 调度
第9章 单处理器调度 280
9.1 处理器调度的类型 280
9.1.1 长程调度 282
9.1.2 中程调度 282
9.1.3 短程调度 283
9.2 调度算法 283
9.2.1 短程调度准则 283
9.2.2 优先级的使用 284
9.2.3 选择调度策略 285
9.2.4 性能比较 292
9.2.5 公平共享调度 296
9.3 传统的UNIX调度 298
9.4 小结 299
9.5 推荐读物 300
9.6 关键术语、复习题和习题 300
9.6.1 关键术语 300
9.6.2 复习题 300
9.6.3 习题 301
第10章 多处理器和实时调度 304
10.1 多处理器调度 304
10.1.1 粒度 304
10.1.2 设计问题 305
10.1.3 进程调度 307
10.1.4 线程调度 308
10.2 实时调度 312
10.2.1 背景 312
10.2.2 实时操作系统的特点 312
10.2.3 实时调度 315
10.2.4 限期调度 315
10.2.5 速率单调调度 318
10.2.6 优先级反转 320
10.3 Linux调度 321
10.3.1 实时调度 321
10.3.2 非实时调度 322
10.4 UNIX SVR4调度 324
10.5 FreeBSD调度器 325
10.5.1 优先级 325
10.5.2 对称多处理器(SMP)与多核支持 326
10.6 Windows调度 328
10.6.1 进程和线程优先级 328
10.6.2 多处理器调度 329
10.7 Linux虚拟机进程调度 329
10.8 小结 330
10.9 推荐读物 330
10.10 关键术语、复习题和习题 331
10.10.1 关键术语 331
10.10.2 复习题 331
10.10.3 习题 331
第五部分 输入/输出和文件
第11章 I/O管理和磁盘调度 336
11.1 I/O设备 336
11.2 I/O功能的组织 337
11.2.1 I/O功能的发展 338
11.2.2 直接存储器访问 338
11.3 操作系统设计问题 340
11.3.1 设计目标 340
11.3.2 I/O功能的逻辑结构 340
11.4 I/O缓冲 341
11.4.1 单缓冲 342
11.4.2 双缓冲 343
11.4.3 循环缓冲 343
11.4.4 缓冲的作用 343
11.5 磁盘调度 344
11.5.1 磁盘性能参数 344
11.5.2 磁盘调度策略 346
11.6 RAID 349
11.6.1 RAID级别0 350
11.6.2 RAID级别1 352
11.6.3 RAID级别2 352
11.6.4 RAID级别3 353
11.6.5 RAID级别4 353
11.6.6 RAID级别5 354
11.6.7 RAID级别6 354
11.7 磁盘高速缓存 354
11.7.1 设计考虑因素 355
11.7.2 性能考虑因素 356
11.8 UNIX SVR4操作系统的I/O 357
11.8.1 缓冲区高速缓存 357
11.8.2 字符队列 358
11.8.3 无缓冲I/O 358
11.8.4 UNIX设备 359
11.9 Linux操作系统的I/O 359
11.9.1 磁盘调度 359
11.9.2 Linux页面缓存 361
11.10 Windows操作系统的I/O 361
11.10.1 基本I/O机制 361
11.10.2 异步I/O和同步I/O 362
11.10.3 软件RAID 362
11.10.4 卷影复制 363
11.10.5 卷加密 363
11.11 小结 363
11.12 推荐读物 363
11.13 关键术语、复习题和习题 364
11.13.1 关键术语 364
11.13.2 复习题 365
11.13.3 习题 365
第12章 文件管理 367
12.1 概述 367
12.1.1 文件和文件系统 367
12.1.2 文件结构 368
12.1.3 文件管理系统 369
12.2 文件组织和访问 371
12.2.1 堆 373
12.2.2 顺序文件 373
12.2.3 索引顺序文件 374
12.2.4 索引文件 374
12.2.5 直接文件或散列文件 375
12.3 B树 375
12.4 文件目录 377
12.4.1 内容 377
12.4.2 结构 378
12.4.3 命名 379
12.5 文件共享 380
12.5.1 访问权限 380
12.5.2 同时访问 381
12.6 记录组块 381
12.7 辅助存储管理 383
12.7.1 文件分配 383
12.7.2 空闲空间的管理 386
12.8 文件系统安全 389
12.9 UNIX文件管理 390
12.9.1 索引节点 390
12.9.2 文件分配 392
12.9.3 目录 392
12.9.4 卷结构 392
12.9.5 传统的UNIX文件访问控制 393
12.9.6 UNIX中的访问控制列表 394
12.10 Linux虚拟文件系统 395
12.10.1 超级块对象 396
12.10.2 索引节点对象 397
12.10.3 目录项对象 397
12.10.4 文件对象 397
12.11 Windows文件系统 397
12.11.1 NTFS的重要特征 398
12.11.2 NTFS卷和文件结构 398
12.11.3 可恢复性 400
12.12 小结 401
12.13 推荐读物 401
12.14 关键术语、复习题和习题 402
12.14.1 关键术语 402
12.14.2 复习题 402
12.14.3 习题 402
第六部分 嵌入式系统
第13章 嵌入式操作系统 406
13.1 嵌入式系统 406
13.2 嵌入式操作系统的特点 407
13.2.1 移植现有的商业操作系统 408
13.2.2 专用嵌入式操作系统 408
13.3 eCos 409
13.3.1 可配置性 409
13.3.2 eCos组件 411
13.3.3 eCos调度程序 413
13.3.4 eCos线程同步 415
13.4 TinyOS 419
13.4.1 无线传感器网络 419
13.4.2 TinyOS的目标 420
13.4.3 TinyOS的组件 421
13.4.4 TinyOS的调度程序 422
13.4.5 配置例子 423
13.4.6 TinyOS的资源接口 424
13.5 推荐读物和网站 425
13.6 关键术语、复习题和习题 426
13.6.1 关键术语 426
13.6.2 复习题 426
13.6.3 习题 427
第七部分 计算机安全
第14章 计算机安全威胁 430
14.1 计算机安全概念 430
14.2 威胁、攻击和资产 431
14.2.1 威胁和攻击 431
14.2.2 威胁和资产 432
14.3 入侵者 434
14.3.1 入侵者行为模式 435
14.3.2 入侵技术 436
14.4 恶意软件概述 437
14.4.1 后门 437
14.4.2 逻辑炸弹 438
14.4.3 特洛伊木马 438
14.4.4 移动代码 438
14.4.5 多威胁恶意软件 439
14.5 病毒、蠕虫与僵尸 439
14.5.1 病毒 439
14.5.2 蠕虫 443
14.5.3 僵尸 445
14.6 Rootkit 446
14.6.1 Rootkit安装 446
14.6.2 系统级调用攻击 447
14.7 推荐读物和网站 447
14.8 关键术语、复习题和习题 448
14.8.1 关键术语 448
14.8.2 复习题 449
14.8.3 习题 449
第15章 计算机安全技术 451
15.1 身份验证 451
15.1.1 基于密码的身份验证 451
15.1.2 基于令牌的身份验证 453
15.1.3 生物特征识别认证 454
15.2 访问控制 455
15.2.1 自主访问控制 456
15.2.2 基于角色的权限控制 458
15.3 入侵检测 460
15.3.1 基本原则 460
15.3.2 基于主机的入侵检测技术 461
15.3.3 审计记录 461
15.4 恶意软件防御 462
15.4.1 反病毒方法 462
15.4.2 蠕虫对策 465
15.4.3 自动代理程序对策 466
15.4.4 Rootkit对策 466
15.5 处理缓冲区溢出攻击 466
15.5.1 编译时防御 467
15.5.2 运行时防御 468
15.6 Windows 7安全性 469
15.6.1 访问控制方案 470
15.6.2 访问令牌 470
15.6.3 安全描述符 471
15.7 推荐读物和网站 473
15.8 关键术语、复习题和习题 474
15.8.1 关键术语 474
15.8.2 复习题 475
15.8.3 习题 475
第八部分 分布式系统
第16章 分布式处理、客户/服务器和集群系统 478
16.1 客户/服务器计算模型 478
16.1.1 什么是客户/服务器计算模型 478
16.1.2 客户/服务器模型的应用 479
16.1.3 中间件 484
16.2 面向服务的体系结构 485
16.3 分布式消息传递 487
16.3.1 可靠性与不可靠性 489
16.3.2 阻塞与无阻塞 489
16.4 远程过程调用 489
16.4.1 参数传递 490
16.4.2 参数表示 490
16.4.3 客户/服务器绑定 491
16.4.4 同步和异步 491
16.4.5 面向对象机制 491
16.5 集群 492
16.5.1 集群的配置 492
16.5.2 操作系统的设计问题 493
16.5.3 集群计算机的体系结构 494
16.5.4 集群与对称多处理器的比较 495
16.6 Windows集群服务器 495
16.7 Beowulf和Linux集群 497
16.7.1 Beowulf的特性 497
16.7.2 Beowulf软件 498
16.8 小结 498
16.9 推荐读物和网站 498
16.10 关键术语、复习题和习题 500
16.10.1 关键术语 500
16.10.2 复习题 500
16.10.3 习题 500
附录A 并发主题 502
附录B 编程和操作系统项目 516
术语表 520
参考书目 526
展开
译者序
操作系统在计算机系统中占据重要的地位,是计算机系统的核心和灵魂,是构建在计算机硬件之上的第一层软件,也是基础软件运行平台的主要成分。“操作系统”是计算机科学与技术专业的一门非常重要的专业基础课,一本好的教材可以使学生通过仔细阅读、深入思考、不断练习,循序渐进地提高自己的专业知识和技能水平。
一本教材,承载着什么?学生和教师对它的期望又是什么?William Stallings博士编写的《操作系统——精髓与设计原理》第七版给出了完美的答案。William Stallings博士在教材的修订过程中,将第六版交给了一批从事相关教学和研究的教授们审阅,使新一版的叙述更加清晰、紧凑,说明文字也进行了修正,使本书在教育学及用户友善性方面有了新的改进。作为一本经典的教材,在美国,多所大学采用本书的前几个版本作为教材或参考书目;在中国,讲授操作系统课程的教师和学习操作系统课程的学生对“精髓”一书也是非常熟悉。
我们真诚地向广大读者推荐William Stallings博士的这本教材。本教材提供了操作系统原理的全景图,对操作系统的概念、结构和机制,进行了系统、全面的阐述,并清晰地展示了当代操作系统的本质和特点。特别是,由于本教材已经出到第七版,每一版本都在多位教师使用、反馈建议的基础上,对不足进行了更新,并结合新技术的发展,增加了新内容以反映操作系统的新进展。
教材第七版主要内容分为八个部分。第一部分综述了计算机组织与系统结构,重点讲述与操作系统设计相关的主题。第二部分详细分析了进程、多线程、对称多处理(SMP)和微内核,以及单一系统中的并发机制,重点讲述互斥和死锁。第三部分全面介绍了内存管理技术,包括虚拟存储器。第四部分讨论了线程调度、SMP调度和实时调度,分析比较了多种进程调度方法。第五部分主要分析了操作系统中对I/O功能的控制,特别是磁盘I/O,给出了关于文件管理的综述。第六部分讨论了嵌入式操作系统的一般性原理,并介绍了两个实例系统:TinyOS和eCos。第七部分概述了涉及计算机和网络安全的威胁与机制。第八部分围绕分布式系统,分析了计算机系统网络化技术的主要趋势,同时还介绍了分布式系统开发中的一些主要设计领域。
本书依然选择最流行、应用最广泛的Windows(Windows 7)和Linux作为实例操作系统,并增补了多核操作系统、虚拟机、新的调度程序实例、面向服务的架构(SOA)、 概率、统计和排队分析、B树等反映操作系统领域进展变化的新内容。在讲解操作系统每一功能的过程中,引入了实例操作系统,以加深读者对原理的理解。本书配备有相应的网站,包括一系列相关链接,包括作业题目和解答、编程项目、重要论文、支持文档、在线章节、在线附录等,并补充了大量的“现场测试”型作业练习。本书在每一章开始给出了学习目标,还按章节给出了学生应该在本章关注的主要概念。本书给教师提供了几个教学大纲样例,允许教师在有限的时间(如16周或12周)内完成教学任务。这些样例是在一些教师们在第六版的真实教学经验的基础上形成的。上述内容为学生和教师提供丰富的辅助材料。
为了配合基于本书的操作系统教学,我们参照本书的重要知识点实现了一个教学用uCore操作系统,并基于uCore操作系统设计了8个增量式的操作系统实验。有兴趣的学生可在了解基本的操作系统概念和原理的基础上,通过阅读实验指导书,分析uCore操作系统源码,完成实验中的练习,扩展uCore操作系统功能,来逐步体会一个操作系统是如何实现的,以及操作系统的概念原理和实际实现之间的紧密联系与巨大差异。相关实验指导书文档和实验代码放在https://github.com/chyyuu/ucore_pub上,且会持续更新。
参加本书翻译、审阅和校对的还有刘伟、杜圆圆、阎梵茜、徐淑琪、孔俊俊、闫林、张琳、冯涛、刘晗、王浩宇、周欣、陈刚、李小奇、刘梦馨、闫丰润、袁鹏飞、陈昕、吕骁博等人,在此对他(她)们的贡献表示诚挚的谢意。
由于译者水平有限,本书的译文中必定会存在一些不足或错误之处,欢迎各位专家和广大读者批评指正。
译者
2012年8月
前 言
本书并未假设是全面的记载,但它旨在帮助人们从一大堆材料中找出关键问题并做出重要决策。我将尽可能忠实地解释这一切。
——《世界经济危机》,温斯顿丘吉尔
目标
本书是一本关于操作系统的概念、结构和机制的教材,其目的是尽可能清楚和全面地展示现代操作系统的本质和特点。
这是一项具有挑战性的任务。首先,需要为各种各样的计算机系统设计操作系统,包括嵌入式系统、智能手机、单用户工作站和个人计算机、中等规模的共享系统、大型计算机和超级计算机,以及诸如实时系统之类的专门机器。多样性不仅表现在机器的容量和速度上,而且表现在具体应用和系统支持的需求上;其次,计算机系统正以日新月异的速度发展变化,操作系统设计中的许多重要领域都是新近开始研究的,而关于这些领域及其他新领域的研究工作仍然在继续。
尽管存在着多样性和变化快等问题,一些基本概念仍然贯穿始终。当然,这些概念的应用依赖于当前的技术状况和特定的应用需求。本书的目的是全面讨论操作系统设计的基本原理,并且与现代流行的设计问题及当前操作系统的发展方向联系起来。
实例系统
本书期望使读者熟悉现代操作系统的设计原理和实现问题,因此单纯讲述概念和理论是远远不够的。为了说明这些概念,同时将它们与真实世界中不得不做出的设计选择相联系,本书选择了三个操作系统作为实例:
l Windows 7:用于个人计算机、工作站和服务器的多任务操作系统。它融入了很多操作系统发展的最新技术;此外,Windows是最早采用面向对象原理设计的重要的商业操作系统之一。本书涵盖了Windows最新版本所采用的技术,包括Windows 7。
l UNIX:最初是为小型计算机设计的多用户操作系统,但后来广泛用于从微机到超级计算机的各种机器中。本书包含若干版本的UNIX作为实例。FreeBSD结合了很多现代特征,是一款广泛应用的操作系统。Solaris是一款广泛应用的商业版UNIX系统。
l Linux:一个非常普及且源代码开放的UNIX版本。
选择这些系统是由于它们的相关性和代表性。关于这些实例系统的讨论贯穿全书,而不是集中在某一章或附录部分。因此,在讨论并发性的过程中,将描述每个实例系统的并发机制,并探究各个设计选择的动机。通过这种方法,可以利用真实的例子立即加深对某一特定章节中设计概念的理解。
读者对象
本书是为高等院校师生和专业人员编写的。作为教材,本书对应于计算机科学、计算机工程和电子工程专业一个学期的操作系统课程。书中的核心专题和大多数选修专题涵盖了由IEEE和ACM计算机委员会的计算课程联合工作组,为计算机科学专业的本科生推荐的计算机课程2008(Computer Science Curriculum 2008)。同时也包括由上述联合工作组推荐的计算机科学2002联合学位课程指南(Guidelines for Associate-Degree Curricula in Computer Science 2002)中的操作系统专题。本书也可以作为一本基础参考书目,并适合于自学。
本书结构
本书分为八个部分(参见第0章的综述):
背景
进程
内存
调度
输入/输出与文件
嵌入式系统
安全
分布式系统
本书具有许多适用于教学的特征,包括使用大量的动画和图表来阐明一些容易混淆的概念。每一章还包括一些关键术语列表、复习题、习题、进一步学习的建议和相关网站的链接。本书还提供了一个术语表,列出了常用的缩略词及参考书目,而且还为指导教师提供了题库。
第七版的新内容
自第六版发行之后三年以来,操作系统领域不断发展变化。在新版中,我试图反映这些变化,同时保持对操作系统整个领域全面而深入的理解。为了修订本书,我将第六版交给一批从事相关教学和研究的教授审阅。所以,新版许多地方的叙述更加清晰、紧凑,并改进了说明文字,补充了大量的、新的“现场测试”型作业练习。
除了这些教育学及用户友善性方面的细化之外,为了反映这个令人兴奋的领域中的进展变化,我们对教材中的技术内容也进行了整体更新。最主要的变化如下:
Windows 7:Windows 7是微软公司为个人计算机、工作站和服务器提供的最新操作系统。第七版介绍了Windows 7中与教材中关键技术问题有关的内容,包括进程/线程管理、调度、内存管理、文件系统、安全和I/O。
多核操作系统问题:第七版已经涵盖了计算机系统最流行的新进展,即在一个单一芯片上集成多个处理器。本书中的适当位置探讨了与多核组织结构使用相关的操作系统问题。
虚拟机:第2章已经包括了关于虚拟机的一节内容,主要介绍商业上已经实施的各种方法。
新的调度程序实例:第10章讨论了FreeBSD的调度算法,该算法是为多处理器和多核系统设计的。第2章还讨论了Linux的针对虚拟机环境的VServer调度程序。
面向服务的架构(SOA):SOA是一种客户/服务器体系结构,现已广泛应用于企业系统。第16章介绍了SOA。
概率、统计和排队分析:两个新章节探讨了这些领域的主要议题,为操作系统性能分析提供背景知识。
B树:这是一种在操作系统的文件系统中常常采用的技术,用于组织文件和数据库的索引。在Mac OS X、Windows和一些Linux文件系统中采用B树。在第12章中对B树进行了介绍。
学生学习帮助:在每一章开始给出了学习目标。此外,还按章节给出了学生应该在本章关注的主要概念。
OS/161:OS/161是一个教学用的操作系统,它越来越多地被选做教学平台。新版本提供了对使用OS/161作为积极学习部分的支持。详细内容参见本前言后面的介绍。
教学大纲样例:本教材提供了很多材料,不可能在一个学期内讲授完。因此,我们给教师建议了几种样例教学大纲,指导教师在有限的时间(如16周或12周)内完成教学。这些样例是在一些教师于第六版的真实教学经验的基础上给出的。
本书每一版在增加新内容的过程中,都要为保持合理的厚度而奋斗。这个目标通过消除孤立的材料、紧凑的叙述而部分达到。对于这一版,相对不太重要的章节和附录,将以PDF文件的形式放到在线网站上,从而不必增加篇幅和成本就能对本书的内容进行扩展。
学生资源
在新版本中,在线网站提供了大量的原始性辅助资料,这些资料按类组织。通过出版社的网站www.pearsonhighered.com/stallings或本书的配套网站WilliamStallings.com/OS/OS7e.html,单击Book Info and More Instructor Resources(图书信息和更多的教师资源)按钮,可以获取这些配套网站和学生资源的资料。这些资料包括以下几分类:
作业题目和解答:为帮助学生理解,提供了一组作业题目,并附有解答。这样学生就可以自我测试对教材的理解程度。
编程项目:提供了两个主要的编程项目,一个是开发一个shell(命令解释器)程序,另一个是开发一个进程分派程序。
重要论文:为学生进一步阅读提供了很多专业文献论文,其中很多已经很难找到。
支持文档:教材中提供了丰富的引用文档。
高级网站内容
购买本教材的新读者,可获赠在线资料的6个月访问权限 。
在线章节:为了限制书的厚度及成本,本书有4章以PDF格式提供,详见本书的目录。
在线附录:有很多有趣的主题,其支持材料不一定列入纸质教材中。共有13个附录,为感兴趣的学生提供了相应的主题。本书的目录中列出了这些附录的清单。
教师支持资源
在教师资源中心(IRC)有本书的各种支持材料。可以登录出版社的网站www. pearsonhighered.com/ stallings或本书的配套网站WilliamStallings.com/OS/OS7e.html,单击Book Info and More Instructor Resources(图书信息和更多的教师资源)按钮获取。为了能够访问IRC,请访问pearsonhighered.com/ educator/replocator/requestSalesRep. page网站以联系当地的销售代表。为支持教师,提供了下列资料:
参考答案:提供了每章章末复习题及习题的答案。
项目手册:对下一节列出的所有项目给出了项目布置建议。
PowerPoint课件:所有章节的课件,可以用于课堂教学。
PDF文件:给出了本书中的全部图表。
测试题库:给出了每章的测试题目。
使用本书讲授的其他课程的网站链接。
建立了一个Internet邮件列表,为采用本书授课的教师之间及教师和作者之间提供一种交流信息、提出建议、探讨问题的途径。只要发现文字录入错误或其他错误,本书的勘误表就可在WilliamStallings.com中找到。请在本邮件列表中注册你的信息。
计算机科学专业的学生资源列表:针对计算机科学专业的学生和专业人员,提供了一个链接列表,包括文档、信息和对这些人有用的链接。
编程项目:有两个主要的编程项目,一个项目是开发一个shell(即命令解释器)程序,而另一个项目用于开发教材的在线部分中介绍的进程分派程序。IRC提供了开发程序所需要的深入资料,以及一步一步的练习。作为替代方案,指导教师可以安排强度更大的系列项目,这些系列项目涵盖了本书中的许多基本原理。为了完成这些项目,我们为学生提供了详细的指导材料。另外,还提供了一组作业习题,其中的问题与每个项目有关,供学生回答。
操作系统项目和其他学生练习
对许多教师而言,操作系统课程的一项重要任务是,通过一个项目或一组项目使得学生能够获得亲身体验,以加深对教材中概念的理解。本书为课程所包含的项目部分提供了非常好的支持。在本书的在线部分提供了两个编程项目。此外,通过Pearson得到的教师支持材料不仅包括如何分配和组织各种项目,而且还包括一套用于不同项目类型及特殊任务的用户手册。教师可以在以下几方面布置任务:
OS/161项目:后面将介绍。
模拟项目:后面将介绍。
编程任务:后面将介绍。
研究项目:网上的一系列研究项目可以指导学生研究某一个特定的专题,并且撰写报告。
阅读/报告练习:指导学生研究Internet上某个专题并写出报告的一系列研究练习。
写作练习:关于一些容易理解的材料的一系列写作练习。
讨论专题:这些专题可以在课堂、聊天室和消息展板上应用,以更深入地扩展对于特定领域的理解,培养学生的合作能力。
另外,提供了作为开发框架的BACI软件包,可以使用BACI学习并发机制。
这些项目和课外练习使得教师既可以使用本书作为丰富教学内容的一部分,也可以根据教师和学生的特别需求进行裁剪。详见附录B。
OS/161
对第七版来说,一个新的内容是支持基于OS/161的积极学习部分。OS/161是一个教学用的操作系统,越来越多的人将其作为首选的操作系统内核教学平台。其目的是取得一种平衡,既让学生体验一个真实的操作系统是如何工作的,而又不会被诸如Linux等完全成熟的操作系统的复杂性压垮。与部署最多的操作系统比较,OS/161非常小(大约20 000行代码和注释),因此很容易在理解整个代码的基础上进行开发。
IRC包括如下内容:
1.一组打包的html文件,教师可以上传到课程服务器上供学生获取。
2.一份入门手册,发给学生以帮助他们开始使用OS/161。
3.一组发给学生去做的OS/161练习。
4.供教师使用的每个练习的示范解决方案。
5.所有这些在本书的相应章节中都有交叉说明。学生可以阅读书中的资料,然后完成相应的OS/161项目。
学生和教师用的模拟项目
IRC还提供了一些在7个模拟内容基础上的作业项目,这些模拟都与操作系统设计关键领域相关。学生可以使用这套模拟工具包,对操作系统设计特性进行分析。这些模拟工具是用Java编写的,既可以作为一个Java应用程序在本地运行,也可以通过浏览器在线运行。IRC中包括了学生使用的相关作业材料,让学生了解应该如何做,以及结果会是怎样的。
学生和教师用的动画项目
第七版依然采用了动画。对于理解现代操作系统的一些复杂机制而言,动画是一种强大的工具。为了说明操作系统设计中的关键功能和算法,一共使用了53个动画,分别用于第3章、第5章、第6章、第7章、第8章、第9章和第11章。可以单击本书网站WilliamStallings.com/OS/OS7e.html中的旋转球进行动画浏览。
致谢
新版本得益于很多花费了大量时间和精力进行审阅的专家和教授们,包括Samir Chettri(The University of Maryland, Baltimore County),Michael Rogers(Tennessee Technological University),Glenn Booker(Drexel University),Jeongkyu Lee(University of Bridgeport),Sanjiv Bhatia(University of Missouri, Baltimore County),Martin Barrett(East Tennessee State University),Lubomir Ivanov(Iona College),Bina Ramamurthy(University at Buffalo),Dean Kelley(Minnesota State University),Joel Weinstein(Northeastern University)。他们审阅了本书的大部分或全部。
还要感谢很多对本书的某一章或多章进行了详尽审阅的人:John South(University of Dallas),Kevin Sanchez-Cherry(IT Security Specilist),Adri Jovin(PG Scholar, Department of IT, Anna University of Technology, Coimbatore),Thriveni Venkatesh(Professor Thriveni T K from GcMAT, Bangalore, India),Fernando Lichtschein(Instituto de Tecnología ORT Argentina),C. Annamala(Indian Institute of Technology Kharagpur),Abdul-Rahman Mahmood(Independent IT & security consultant & Creator of AlphaPeeler crypto tool),以及Abhilash V R(VVDN Technologies)。
我还要感谢Dave Probert,微软Windows内核与体系结构组的架构师,他审阅了Vista系统相关的资料,并提供了Linux系统与Vista系统的对比;Tigran Aivazian,Linux文档项目中内核文档的作者,他审阅了Linux 2.6的资料;eCosCentric的Nick Garnett,他审阅了eCos的相关资料;Philip Levis,TinyOS系统的开发者之一,他审阅了TinyOS的相关资料。
多伦多大学的Andrew Peterson教授、Ioan Stefanovici和讲授操作系统的教师们为IRC补充了OS/161资料。
Adam Critchley(University of Texas at San Antonio)开发了模拟项目的练习;Matt Sparks(University of Illinois at Urbana-Champaign)为本书的使用改编了一组编程问题。
The Australian Defence Force Academy的Lawrie Brown提供了缓冲区溢出攻击的材料。Ching-Kuang Shene(Michigan Tech University)为竞争条件一节提供了示例,并审阅了此章节。Colorado School of Mines的Tracy Camp和Keith Hellman提供了一些新的课外练习。此外,Fernando Ariel Gont也提供了一些课外练习,同时他还详细地审阅了本书的全部章节。
我还要感谢Bill Bynum(College of William and Mary)和Tracy Camp (Colorado School of Mines)对附录O的贡献;感谢Steve Taylor(Worcester Polytechnic Institute)对教师手册中程序设计项目和阅读/报告任务的贡献;感谢Tan N. Nguyen(George Mason University)对教学手册中研究项目的贡献;感谢Ian G. Granham(Griffith University)对本书中两个编程项目的贡献;感谢Oskars Rieksts(Kutztown University)慷慨地允许我使用他的讲稿、测验与项目。
最后,我要感谢负责出版本书的人们,感谢他们出色的工作。他们是我的编辑Tracy Dunkelberger,她的助理Carole Snyder、Melinda Hagerty和Allison Michael,产品经理Pat Brown;我还要感谢在Integra的Shiny Rajesh和生产人员,他们的工作快速且高质量。同样感谢Pearson的市场和销售人员,没有他们的努力,本书就不会到你手里。
有了这些帮助,我似乎不用做什么了。但是,我很自豪地说,我在没有人帮助的情况下挑选了所有引文。
在线资源
站 点 网 址 说 明
配套网站 WilliamStallings.com/OS/OS7e.html
www.pearsonhighered.com/stallings Student Resources按钮:对学生有用的链接和文档
Instructor Resources按钮:对教师有用的链接和文档
高级网站内容 www.pearsonhighered.com/stallings
单击Premium Web Content按钮,输入教材前面的卡片上给出的学生访问码 在线章节、附录和其他对本书补充的文档
教师资源中心(IRC) pearsonhighered.com/stallings
单击Instructor Resource按钮 习题答案手册、项目手册、幻灯片和其他有用的文档
计算机科学学生资源网站 ComputerScienceStudent.com 对计算机科学专业的学生有用的链接和文档
关于作者
William Stallings在计算机安全、计算机网络和计算机系统结构的技术开发的广泛领域作出了独特的贡献。他撰写了17本书,如果计算版本的话,一共有42本涉及以上主题的书。他在许多ACM和IEEE出版物上发表文章,包括IEEE和ACM的计算评论会议。
他先后11次获得年度最佳计算机科学教科书奖和学术作者协会奖。
在该领域工作超过30年中,他是一个技术贡献者、技术经理和多家高科技公司的执行总监。他曾为各种计算机和操作系统设计并实现了TCP/IP和OSI协议套件,范围从微型计算机到大型机。他还是政府机构、计算机和软件供应商和主要用户的顾问,为网络软件和产品的设计、选型及使用给出建议。
他创建和维护了计算机科学专业学生资源的网站http://www.ComputerScienceStudent.com。该网站提供了计算机科学专业的学生和专业人员普遍关心的多个学科的文档与链接。他是Cryptologia学术期刊编委会的成员,该期刊主要发表密码学方面的文章。
Stallings博士在麻省理工学院获得计算机科学博士学位,在圣母大学获得电子工程学士学位。
展开