《操作系统 第3版》PDF下载

  • 购买积分:32 如何计算积分?
  • 作  者:(美)Harver M. Deitel,(美)Paul J. Deitel,(美)David R. Choffnes著;施平安,江永忠,瞿中译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2007
  • ISBN:7302151857
  • 页数:1331 页
图书介绍:本书介绍操作系统的经典技术和最新发展。

第Ⅰ部分 硬件、软件和操作系统导论 5

第1章 操作系统导论 5

1.1 概述 7

1.2 什么是操作系统 7

1.3 操作系统早期历史:20世纪40~50年代 8

操作系统思想:改革 9

1.4 20世纪60年代 9

操作系统思想:人力和计算机资源的相对价值 11

人物介绍:Ken Thompson和Dennis Ritchie 12

1.5 20世纪70年代 13

奇闻轶事:亚伯拉罕·林肯的技术忠告 14

1.6 20世纪80年代 14

人物介绍:Doug Engelbart 15

1.7 Internet和万维网的发展历史 16

人物介绍:Tim Berners-Lee 17

1.8 20世纪90年代 18

人物介绍:Linus Torvalds 20

人物介绍:Richard Stallman 21

1.9 2000年至今 22

1.10 应用基础 23

1.11 操作系统环境 24

1.12 操作系统组件和目标 26

1.12.1 操作系统核心组件 27

1.12.2 操作系统目的 28

操作系统思想:性能 30

1.13 操作系统体系结构 30

操作系统思想:尽量保持简单(Keep It Simple,KIS) 31

奇闻轶事:系统设计师与系统工程师 31

操作系统思想:体系结构 32

1.13.1 单内核体系结构 32

1.13.2 分层体系结构 33

1.13.3 微内核体系结构 34

1.13.4 网络操作系统和分布式操作系统 35

第2章 硬件和软件的概念 57

2.1 概述 59

2.2 硬件设备的发展 59

人物介绍:Gordon Moore和摩尔定律 60

2.3 硬件组件 62

2.3.1 主板 62

2.3.2 处理器 63

2.3.3 时钟 65

2.3.4 存储器分级体系 65

操作系统思想:高速缓存技术 67

2.3.5 主存储器 68

2.3.6 辅助存储器 68

2.3.7 总线 69

2.3.8 直接存储器存取(DMA) 71

操作系统思想:遗留硬件和软件 72

2.3.9 外围设备 72

2.4 操作系统的硬件支持 74

2.4.1 处理器 74

操作系统思想:最少权限原则 75

操作系统思想:保护 76

奇闻轶事:Glitch这一术语的由来 77

2.4.2 定时器和时钟 77

2.4.3 自举 78

2.4.4 即插即用 79

2.5 高速缓存技术和缓冲技术 79

操作系统思想:试探法 81

2.6 软件概述 81

2.6.1 机器语言和汇编语言 81

2.6.2 解释器和编译器 82

2.6.3 高级语言 83

2.6.4 结构化程序设计 84

2.6.5 面向对象程序设计 85

2.7 应用编程接口(API) 86

2.8 编译、链接和加载 87

2.8.1 编译 87

2.8.2 链接 88

小型案例分析:Mach系统 91

2.8.3 加载 92

2.9 固件 93

2.10 中间件 94

第Ⅱ部分 进程和线程 115

第3章 进程的概念 115

3.1 概述 117

操作系统思想:用户最终想要的应用程序 117

小型案例分析:CTSS和Multics 118

人物介绍:Fernando J.Corbato 119

3.2 进程的状态:进程的生命周期 119

3.3 进程管理 120

3.3.1 进程状态和状态转换图 120

3.3.2 进程控制块/进程描述符 122

操作系统思想:操作系统中的数据结构 123

3.3.3 进程操作 124

3.3.4 挂起进程和恢复进程 126

3.3.5 上下文切换 127

3.4 中断 129

操作系统思想:异步与同步 130

3.4.1 中断处理 130

3.4.2 中断类型 132

3.5 进程间通信 134

3.5.1 信号 134

3.5.2 消息传递 135

3.6 案例分析:UNIX进程 136

小型案例分析:UNIX系统 138

第4章 线程的概念 155

4.1 概述 157

操作系统思想:并发性 158

4.2 线程的定义 158

4.3 引入线程的动机 159

操作系统思想:并行性 161

4.4 线程状态:线程的生命周期 161

4.5 线程操作 163

4.6 线程模型 164

4.6.1 用户级线程 164

4.6.2 内核级线程 166

操作系统思想:标准的一致性 167

4.6.3 用户级和内核级组合线程 168

4.7 线程实现需要考虑的问题 169

4.7.1 线程信号交付 170

奇闻轶事:工程 172

4.7.2 线程终止 172

4.8 POSIX和Pthread 173

奇闻轶事:标准和一致性:插针到插针兼容性 173

4.9 Linux线程 175

操作系统思想:可伸缩性 175

4.10 Windows XP线程 177

4.11 Java多线程案例分析,第Ⅰ部分:介绍Java线程 179

第5章 异步并发执行 197

5.1 概述 199

5.2 互斥 199

5.2.1 Java多线程案例分析,第Ⅱ部分:一个Java生产者/消费者关系 200

5.2.2 临界区 208

5.2.3 互斥基元 208

5.3 实现互斥基元 209

5.4 互斥问题的软件方案 210

5.4.1 Dekker算法 210

奇闻轶事:为什么应该相信软件能正常工作? 220

5.4.2 Peterson算法 220

5.4.3 N线程互斥:Lamport的Bakery算法 223

人物介绍:Leslie Lamport 227

5.5 互斥问题的硬件方案 228

5.5.1 禁止中断 228

5.5.2 test-and-set指令 229

5.5.3 swap指令 231

5.6 信号量 233

人物介绍:Edsger W.Dijkstra 234

5.6.1 使用信号量的互斥 235

5.6.2 使用信号量的线程同步 236

5.6.3 计数信号量 238

5.6.4 实现信号量 238

奇闻轶事:不明确的要求 239

第6章 并发编程 257

6.1 概述 259

奇闻轶事:彻底测试是不可能的 260

6.2 监视器 261

操作系统思想:信息隐藏 262

6.2.1 条件变量 262

6.2.2 用监视器来实现简单的资源分配 263

人物介绍:Per Brinch Hansen 264

6.2.3 监视器示例:循环缓冲区 265

6.2.4 监视器示例:Reader和Writer 268

6.3 Java监视器 271

6.4 Java多线程案例分析,第Ⅲ部分:Java中的生产者/消费者关系 272

6.5 Java多线程案例分析,第Ⅳ部分:Java中的循环缓冲区 280

第7章 死锁和无限延期 299

7.1 概述 301

7.2 死锁的例子 301

7.2.1 数据传输死锁 302

奇闻轶事:单行道大桥 303

7.2.2 简单资源死锁 303

7.2.3 脱机打印系统中的死锁 304

操作系统思想:等待、死锁和无限延期 305

7.2.4 示例:就餐哲学家 306

7.3 相关问题:无限延期 307

7.4 资源概念 308

7.5 死锁的4个必要条件 309

7.6 死锁解决方案 310

7.7 死锁预防 310

奇闻轶事:不允许螺母、螺栓和螺钉 311

7.7.1 杜绝“等待”条件 311

7.7.2 杜绝“不可抢占”条件 313

7.7.3 杜绝“循环等待”条件 313

7.8 使用Dijkstra的银行家算法来避免死锁 315

奇闻轶事:缩写词 317

7.8.1 安全状态的例子 317

7.8.2 非安全状态的例子 318

7.8.3 安全状态变成非安全状态的例子 319

7.8.4 银行家算法资源分配 319

7.8.5 银行家算法的缺点 320

7.9 死锁检测 321

7.9.1 资源分配图 321

7.9.2 缩减资源分配图 322

7.10 死锁恢复 324

7.11 当前和未来系统中的死锁策略 326

第8章 处理器调度 345

8.1 概述 347

8.2 调度级别 347

8.3 可抢占与不可抢占调度的对比 349

操作系统思想:开销 350

8.4 优先级 351

8.5 调度目标 351

操作系统思想:可预测性 352

操作系统思想:公平性 353

8.6 调度标准 353

8.7 调度算法 355

8.7.1 先入先出(FIFO)调度 355

8.7.2 轮流(RR)调度 356

8.7.3 最短进程优先(SPF)调度 358

8.7.4 最高响应比优先(HRRN)调度 359

8.7.5 最短剩余时间优先(SRT)调度 360

8.7.6 多级反馈队列 361

8.7.7 公平共享调度 364

8.8 截止期调度 366

操作系统思想:资源管理强度与相对资源价值的对比 367

8.9 实时调度 367

小型案例分析:实时操作系统 369

8.10 Java线程调度 369

第Ⅲ部分 物理和虚拟内存 393

第9章 实内存组织和管理 393

9.1 概述 395

9.2 内存组织 395

操作系统思想:对处理能力、内存、存储和带宽的追求是无止境的 396

9.3 内存管理 397

9.4 内存层次结构 397

9.5 内存管理策略 399

9.6 连续性和非连续性内存分配 400

9.7 单用户连续性内存分配 400

9.7.1 叠加 401

9.7.2 单用户系统中的保护 402

9.7.3 单流批处理 404

操作系统思想:改变是规则,而不是例外 404

9.8 固定分区多道程序设计 405

奇闻轶事:分割 408

操作系统思想:空间资源和碎片化 409

9.9 可变分区多道程序设计 409

9.9.1 可变分区的特征 410

9.9.2 内存安置策略 413

9.10 使用内存交换的多道程序设计 414

第10章 虚拟内存组织 431

10.1 概述 433

小型案例分析:Atlas 433

操作系统思想:虚拟化 434

人物介绍:Peter Denning 435

10.2 虚拟内存:基本概念 435

奇闻轶事:虚拟内存不必要 436

10.3 块映射 439

10.4 分页 441

10.4.1 分页地址转换之直接映射技术 444

10.4.2 分页地址转换之关联映射技术 445

10.4.3 分页地址转换之直接/联想映射技术 446

操作系统思想:经验结果:基于局部性的直观推断 447

10.4.4 多级页表 449

10.4.5 反向页表 451

10.4.6 分页系统中的共享 453

操作系统思想:缓式分配 455

10.5 分段 456

10.5.1 分段地址转换之直接映射 457

10.5.2 分段系统中的共享 459

10.5.3 分段系统中的保护和访问控制 460

10.6 分段/分页系统 464

10.6.1 分段/分页系统中的动态地址转换 464

10.6.2 分段/分页系统中的共享和保护 467

10.7 案例分析:IA-32 Intel构架虚拟内存 468

小型案例分析:IBM大型机操作系统 471

小型案例分析:VM操作系统的早期历史 472

第11章 虚拟内存管理 495

11.1 概述 497

11.2 局部性 497

11.3 请求分页 498

操作系统思想:操作系统中的计算机理论 500

操作系统思想:空间-时间折中 500

11.4 先行分页技术 501

11.5 页替换 502

11.6 页替换策略 503

11.6.1 随机页替换 503

11.6.2 先入先出(FIFO)页替换 504

11.6.3 FIFO异常 505

11.6.4 最近最少使用(LRU)的页替换策略 506

11.6.5 最少使用(LFU)的页替换策略 508

11.6.6 最近不用的先淘汰(NUR)页替换策略 508

11.6.7 FIFO变型:二次机会页替换和时钟页替换 510

11.6.8 最远的页先淘汰替换策略 510

11.7 工作集模型 512

11.8 缺页错误频率(PFF)页替换 516

11.9 页释放 517

11.10 页大小 517

11.11 分页模式下的程序行为 519

11.12 全局页替换与局部页替换 521

11.13 案例分析:Linux页替换策略 522

第Ⅳ部分 辅助存储器、文件和数据库 545

第12章 磁盘性能优化 545

12.1 概述 547

12.2 辅助存储器的演变 547

12.3 活动臂磁盘存储器的特征 548

12.4 磁盘调度的必要性 550

12.5 磁盘调度策略 551

12.5.1 先到先服务(FCFS)磁盘调度策略 553

12.5.2 最短寻道时间优先(SSTF)磁盘调度 554

奇闻轶事:每个问题都有解决方案,每个解决方案都有问题 555

12.5.3 SCAN磁盘调度 555

12.5.4 C-SCAN磁盘调度 556

12.5.5 FSCAN和N-Step SCAN磁盘调度 557

12.5.6 LOOK和C-LOOK磁盘调度 559

12.6 旋转优化 560

12.6.1 SLTF调度 560

12.6.2 SPTF和SATF调度 561

12.7 系统考虑 563

操作系统思想:饱和与瓶颈 564

12.8 高速缓存和缓冲 565

12.9 其他的磁盘性能优化技术 566

操作系统思想:压缩和解压 567

操作系统思想:冗余技术 568

12.10 独立磁盘冗余阵列(RAID) 569

12.10.1 RAID概述 569

操作系统思想:任务关键系统 570

操作系统思想:容错 571

12.10.2 第0级(带区集) 572

12.10.3 第1级(镜像) 573

12.10.4 第2级(位级汉明纠错码奇偶校验) 574

12.10.5 第3级(位级异或纠错码奇偶校验) 576

12.10.6 第4级(块级异或纠错码奇偶校验) 578

12.10.7 第5级(块级分布式异或纠错码奇偶校验) 579

第13章 文件和数据库系统 605

13.1 概述 607

13.2 数据层次结构 607

13.3 文件 608

13.4 文件系统 609

操作系统思想:加密和解密 610

13.4.1 目录 611

13.4.2 元数据 615

13.4.3 安装 616

13.5 文件组织 618

13.6 文件分配 618

13.6.1 连续文件分配 619

13.6.2 链表式非连续文件分配 620

13.6.3 表格式非连续文件分配 621

小型案例分析:MS-DOS 623

13.6.4 索引非连续文件分配 624

13.7 空闲空间管理 627

13.8 文件访问控制 628

操作系统思想:安全性 629

13.8.1 访问控制矩阵 629

13.8.2 用户级访问控制 630

13.9 数据访问技术 631

13.10 数据完整性保护 632

13.10.1 备份和恢复 632

操作系统思想:备份和恢复 632

13.10.2 数据完整性和基于日志的文件系统 633

操作系统思想:墨菲法则和健壮系统 634

13.11 文件服务器和分布式系统 637

13.12 数据库系统 637

13.12.1 数据库系统的优点 638

13.12.2 数据访问 638

13.12.3 关系数据库模型 639

13.12.4 操作系统和数据库系统 641

第Ⅴ部分 性能、处理器和多处理器管理 665

第14章 性能和处理器设计 665

14.1 概述 667

14.2 影响性能问题的重要趋势 667

14.3 为什么性能监督和评估是必需的 668

14.4 性能指标 669

14.5 性能评估技术 671

14.5.1 tracing和profiling 671

14.5.2 计时和微基准程序 672

14.5.3 特定应用程序的评估 673

14.5.4 分析模型 674

14.5.5 基准程序 675

14.5.6 复合程序 676

14.5.7 仿真 677

14.5.8 性能监督 678

14.6 瓶颈和饱和 679

14.7 反馈循环 680

14.7.1 负反馈 680

14.7.2 正反馈 681

14.8 处理器设计中的性能技术 681

14.8.1 复杂指令集计算(CISC) 682

14.8.2 精简指令集计算(RISC) 683

14.8.3 Post-RISC处理器 686

14.8.4 显式并行指令计算(EPIC) 688

第15章 多处理器管理 711

15.1 概述 713

小型案例分析:超级计算机 713

人物介绍:Seymour Cray 714

15.2 多处理器构架 715

15.2.1 顺序和并行执行构架分类 715

15.2.2 处理器互连机制 716

15.2.3 松散耦合系统与紧密耦合系统 722

15.3 多处理器操作系统组织 723

15.3.1 主/从结构 723

15.3.2 独立内核 724

15.3.3 对称结构 725

操作系统思想:适当地降低性能(Graceful Degradation) 726

15.4 存储器访问构架 726

15.4.1 均匀的内存访问 727

15.4.2 非均匀的内存访问 728

15.4.3 全高速缓存存储构架 729

15.4.4 非远程存储访问 730

15.5 多处理器内存共享 731

操作系统思想:数据复制和一致性 732

15.5.1 高速缓存一致性 732

15.5.2 页复制和迁移 733

15.5.3 共享虚拟内存 734

15.6 多处理器调度 736

15.6.1 不知道作业的多处理器调度 738

15.6.2 知道作业的多处理器调度 739

15.7 进程迁移 742

15.7.1 进程迁移步骤 742

15.7.2 进程迁移概念 744

15.7.3 进程迁移策略 745

15.8 负载平衡 746

15.8.1 静态负载平衡 747

15.8.2 动态负载平衡 748

15.9 多处理器互斥 751

15.9.1 旋锁 751

15.9.2 休眠/唤醒锁 752

15.9.3 读/写锁 753

第Ⅵ部分 联网和分布式计算 781

第16章 联网概论 781

16.1 概述 783

16.2 网络拓扑 783

小型案例分析:Symbian OS 786

16.3 网络类型 786

16.4 TCP/IP协议堆栈 787

16.5 应用层 788

16.5.1 超文本传输协议(HTTP) 789

16.5.2 文件传输协议(FTP) 790

16.6 传输层 790

奇闻轶事:不可靠的通信线路可能带来麻烦 791

16.6.1 传输控制协议(TCP) 792

16.6.2 用户数据文报协议(UDP) 793

16.7 网络层 793

16.7.1 Internet协议(IP) 794

16.7.2 IPv6 795

16.8 链路层 796

16.8.1 Ethernet 796

16.8.2 令牌环 797

16.8.3 光纤分布式数据接口(FDDI) 799

16.8.4 IEEE 802.11(无线) 799

16.9 客户/服务器模型 800

第17章 分布式系统入门 817

17.1 概述 819

17.2 分布式系统的特点 820

17.2.1 性能和伸缩性 820

17.2.2 连接性和安全性 820

17.2.3 可靠性和容错性 821

17.2.4 透明性 821

17.2.5 网络操作系统 823

17.2.6 分布式操作系统 823

17.3 分布式系统中的通信 823

17.3.1 中间件 824

奇闻轶事:发生错误的后果 825

17.3.2 远程过程调用(RPC) 825

17.3.3 远程方法调用(RMI) 826

17.3.4 CORBA 827

17.3.5 DCOM 828

17.3.6 分布式系统中的进程迁移 828

17.4 分布式系统中的同步 829

17.5 分布式系统中的互斥 830

17.5.1 没有共享内存的互斥 830

17.5.2 Agrawala和Ricart的分布式互斥算法 831

17.6 分布式系统中的死锁 832

17.6.1 分布式死锁 832

17.6.2 死锁预防 833

17.6.3 死锁检测 834

17.6.4 一个分布式资源死锁检测算法 835

17.7 案例分析:Sprite分布式操作系统 837

17.8 案例分析:Amoeba分布式操作系统 838

第18章 分布式系统和Web服务 853

18.1 概述 855

18.2 分布式文件系统 855

18.2.1 分布式文件系统的概念 855

18.2.2 网络文件系统(NFS) 857

18.2.3 Andrew文件系统(AFS) 859

18.2.4 Coda文件系统 861

18.2.5 Sprite文件系统 864

18.3 多计算机系统 867

18.4 群集 868

18.4.1 群集类型 869

18.4.2 群集的优势 869

18.4.3 群集的例子 870

18.5 对等分布式计算 872

18.5.1 客户/服务器和对等应用程序 872

18.5.2 集中式和分散式P2P应用程序 873

18.5.3 Peer发现与搜索 875

18.5.4 JXTA 876

18.6 网格计算 877

18.7 Java分布式计算 878

18.7.1 Java Servlet和JavaServer Page(JSP) 878

18.7.2 Jini 880

18.7.3 JavaSpaces 882

18.7.4 Java管理扩展(JMX) 884

18.8 Web服务 885

18.8.1 Microsoft.NET平台 886

18.8.2 Sun Microsystems和Sun ONE平台 887

第Ⅶ部分 安全性 911

第19章 安全性 911

19.1 概述 914

操作系统思想:伦理系统设计 914

19.2 加密技术 915

19.2.1 秘密密钥加密技术 916

19.2.2 公钥加密技术 919

人物介绍:Rivest,Shamir和Adleman 921

19.3 认证 922

19.3.1 基础认证 922

19.3.2 生物特征和智能卡 924

19.3.3 Kerberos 925

19.3.4 单一登录 926

19.4 访问控制 927

19.4.1 访问权和保护域 927

19.4.2 访问控制模型和策略 928

19.4.3 访问控制机制 929

19.5 安全性攻击 932

19.5.1 密码分析 932

19.5.2 病毒和蠕虫 932

19.5.3 拒绝服务(DoS)攻击 934

19.5.4 软件漏洞 935

19.5.5 系统渗透 936

19.6 预防攻击和安全性解决方案 937

19.6.1 防火墙 937

19.6.2 入侵检测系统(IDS) 938

19.6.3 反病毒软件 939

19.6.4 安全性补丁 941

小型案例分析:OpenBSD 942

小型案例分析:Macintosh 943

19.6.5 安全的文件系统 944

19.6.6 橘皮书安全性 945

19.7 安全通信 946

19.8 密钥协定协议 946

19.8.1 密钥管理 947

19.8.2 数字签名 948

19.9 公钥基础设施、证书和证书授权机构 949

19.10 安全通信协议 951

19.10.1 安全套接层(SSL) 951

19.10.2 虚拟专用网和IP安全性 952

19.10.3 无线安全性 953

19.11 隐写术 954

19.12 所有权和开放源码安全性 955

19.13 案例分析:UNIX系统安全性 956

第Ⅷ部分 操作系统案例分析 985

第20章 案例分析:Linux 985

20.1 概述 988

20.2 发展史 988

20.3 Linux概述 990

20.3.1 发展和团体 990

20.3.2 分发 991

20.3.3 用户界面 992

20.3.4 标准 992

20.4 内核体系结构 993

20.4.1 硬件平台 994

小型案例分析:用户模式的Linux 995

20.4.2 可加载的内核模块 996

20.5 进程管理 997

20.5.1 进程和线程组织 997

20.5.2 进程调度 999

20.6 内存管理 1004

20.6.1 内存组织 1004

20.6.2 物理内存分配和释放 1009

20.6.3 页面替换 1010

20.6.4 交换 1012

20.7 文件系统 1013

20.7.1 虚拟文件系统 1013

20.7.2 虚拟文件系统高速缓存 1016

20.7.3 第2扩展文件系统 1018

20.7.4 过程文件系统 1022

20.8 输入/输出管理 1024

20.8.1 设备驱动程序 1024

20.8.2 字符设备输入/输出 1026

20.8.3 块设备输入/输出 1027

20.8.4 网络设备输入/输出 1030

20.8.5 统一设备模型 1031

20.8.6 中断 1033

20.9 内核同步 1035

20.9.1 自旋锁 1035

20.9.2 阅读程序/写程序锁 1036

20.9.3 顺序锁 1036

20.9.4 内核信号量 1037

20.10 进程间的通信 1038

20.10.1 信号 1038

20.10.2 管道 1039

20.10.3 套接字 1040

20.10.4 消息队列 1041

20.10.5 共享内存 1042

20.10.6 系统V信号量 1043

20.11 联网技术 1044

20.11.1 数据包处理 1044

20.11.2 网络过滤器框架和异常分支 1045

20.12 可伸缩性 1046

20.12.1 对称多处理(SMP) 1047

20.12.2 非均衡内存访问 1047

20.12.3 其他的可伸缩性功能 1048

20.12.4 嵌入式Linux 1049

20.13 安全性 1049

20.13.1 认证 1050

20.13.2 访问控制方法 1050

20.13.3 加密技术 1051

第21章 案例分析:Windows XP 1077

21.1 概述 1080

21.2 历史 1080

人物介绍:比尔·盖茨(Bill Gates) 1081

人物介绍:大卫·卡特勒 1083

小型案例分析:OS/2 1084

21.3 设计目标 1084

21.4 系统体系结构 1085

21.5 系统管理机制 1087

21.5.1 注册表 1087

21.5.2 对象管理器 1088

21.5.3 中断请求级(IRQL) 1089

21.5.4 异步过程调用(APC) 1091

21.5.5 延迟过程调用(DPC) 1092

21.5.6 系统线程 1093

21.6 进程和线程管理 1093

21.6.1 进程和线程结构 1093

21.6.2 线程调度 1096

21.6.3 线程同步 1099

21.7 内存管理 1104

21.7.1 内存组织 1104

21.7.2 内存分配 1106

21.7.3 页面替换 1109

21.8 文件系统管理 1111

21.8.1 文件系统驱动程序 1111

21.8.2 NTFS 1112

21.9 输入/输出管理 1117

21.9.1 设备驱动程序 1118

21.9.2 输入/输出处理 1120

21.9.3 中断处理 1124

21.9.4 文件高速缓存管理 1125

21.10 进程间的通信 1126

21.10.1 管道 1126

21.10.2 mailslot控件 1128

21.10.3 共享内存 1128

21.10.4 本地和远程过程调用 1129

21.10.5 组件对象模型(COM) 1131

21.10.6 拖放式和复合文档 1132

21.11 联网技术 1133

21.11.1 网络输入/输出 1133

21.11.2 网络驱动程序体系结构 1135

21.11.3 网络协议 1136

21.11.4 网络服务 1138

21.11.5 .NET 1138

21.12 可伸缩性 1139

21.12.1 对称多处理(SMP) 1139

21.12.2 嵌入式Windows XP 1140

21.13 安全性 1141

21.13.1 认证 1141

21.13.2 授权 1142

21.13.3 Internet连接防火墙 1143

21.13.4 其他功能部件 1144

术语表 1187

索引 1279

第Ⅰ部分 硬件、软件和操作系统导论 5

第1章 操作系统导论 5

图1-1 应用程序与操作系统之间的交互 24

图1-2 虚拟机示意图 26

图1-3 单内核操作系统体系结构 33

图1-4 THE操作系统的层 34

图1-5 微内核操作系统体系结构 35

图1-6 客户机/服务器网络操作系统模型 36

第2章 硬件和软件的概念 57

图2-1 Intel处理器中晶体管数量与时间的关系 61

图2-2 处理器组件 64

图2-3 存储器分级体系 66

图2-4 直接存储器存取(DMA) 71

图2-5 外围设备 73

图2-6 自举 78

图2-7 应用编程接口 86

图2-8 编译阶段 88

图2-9 目标模块 89

图2-10 链接过程 89

图2-11 符号解析 90

图2-12 加载 92

图2-13 编译、链接和加载 93

第Ⅱ部分 进程和线程 115

第3章 进程的概念 115

图3-1 进程状态转换 121

图3-2 进程表和进程控制块 123

图3-3 进程创建的层次结构 125

图3-4 Linux操作系统中的进程层次结构 125

图3-5 包括挂起状态和恢复状态的进程状态转换 126

图3-6 上下文切换 128

图3-7 处理中断 131

图3-8 Intel IA-32体系结构所识别的常见的中断类型 132

图3-9 Intel IA-32异常类型 133

图3-10 UNIX系统调用 137

图3-11 练习4的代码 145

第4章 线程的概念 155

图4-1 线程与进程的关系 159

图4-2 线程的生命周期 162

图4-3 用户级线程 165

图4-4 内核级线程 166

图4-5 组合线程模型 168

图4-6 信号屏蔽 171

图4-7 Linux系统任务状态转换图 176

图4-8 Windows XP线程状态转换图 178

图4-9 Java线程的创建、启动、睡眠和显示(1/2) 180

图4-9 Java线程的创建、启动、睡眠和显示(2/2) 181

第5章 异步并发执行 197

图5-1 生产者/消费者例子中使用的Buffer接口 202

图5-2 Producer类代表生产者/消费者关系中的生产者线程 202

图5-3 Consumer类代表生产者/消费者关系中的消费者线程 203

图5-4 UnsynchronizedBuffer类实现了Buffer接口,并声明要由Producer和Consumer共享的变量buffer 204

图5-5 SharedBufferTest类包含main方法,它负责启动应用程序 205

图5-6 互斥实现——版本1 211

图5-7 互斥实现——版本2 213

图5-8 互斥实现——版本3 214

图5-9 互斥实现——版本4 215

图5-10 正确解决互斥问题的Dekker算法 217

图5-11 Peterson互斥算法 220

图5-12 Lamport的Bakery算法 224

图5-13 用于互斥的testAndSet指令 230

图5-14 用于互斥的swap指令 232

图5-15 使用信号量的互斥 235

图5-16 使用信号量来实现的生产者/消费者关系 236

图5-17 练习5.5的代码 244

图5-18 用于练习5.16(a)的新的互斥基元 245

图5-19 用于练习5.16(b)的代码 245

图5-20 练习5.8的算法 246

第6章 并发编程 257

图6-1 资源分配监视器 263

图6-2 伪代码监视器实现循环缓冲区 266

图6-3 用于解决reader和writer问题的监视器伪代码 268

图6-4 SynchronizedBuffer负责同步对一个共享整数的访问 273

图6-5 通过同步机制来修改一个共享对象的线程 277

图6-6 CircularBuffer控制对一个共享整数数组的访问 281

图6-7 CircularBufferTest类实例化生产者和消费者线程 285

第7章 死锁和无限延期 299

图7-1 交通死锁的例子 302

图7-2 资源死锁示例:这个系统已经死锁,因为每个进程都持有另一个进程需要的资源,但两个进程都不愿释放它所持有的资源 304

图7-3 就餐哲学家行为 306

图7-4 eat方法的实现 306

图7-5 Havender提出的预防死锁的资源线性顺序方案 314

图7-6 安全状态 317

图7-7 非安全状态 318

图7-8 安全状态变成了非安全状态 319

图7-9 3个进程的状态描述 320

图7-10 资源分配和请求图 322

图7-11 通过缩减资源分配图,证明不存在死锁 323

图7-12 练习7.9的典型哲学家行为 332

图7-13 练习7.9(a)的哲学家行为 332

图7-14 练习7.9(b)的哲学家行为 332

图7-15 练习7.9(c)的哲学家行为 333

图7-16 练习7.9(d)的哲学家行为 333

图7-17 状态A的资源描述 335

图7-18 状态B的资源描述 335

图7-19 系统状态(当前loan、最大需求和当前claim) 336

图7-20 系统状态(资源总数和可用资源数) 336

图7-21 处于非安全状态的一个系统的例子 337

第8章 处理器调度 345

图8-1 调度级别 348

图8-2 先入先出调度 355

图8-3 轮流调度 356

图8-4 多级反馈队列 362

图8-5 标准UNIX进程调度程序。调度程序将处理器分配给用户,每个用户都可能有多个进程(AT&T Archives专利,使用已获AT&T许可) 365

图8-6 公平共享调度程序。公平共享调度程序将系统资源划分为不同的部分,然后由进程调度程序分配给各个公平共享组(AT&T Archives专利,使用已获AT&T许可) 365

图8-7 Java线程优先级调度 371

第Ⅲ部分 物理和虚拟内存 393

第9章 实内存组织和管理 393

图9-1 Microsoft Windows操作系统的内存需求 396

图9-2 层次化内存组织 398

图9-3 单用户连续性内存分配 401

图9-4 叠加结构 402

图9-5 单用户连续性内存分配系统中的内存保护 403

图9-6 单用户系统上的处理器使用情况(注意:在许多单用户作业中,与图中显示的相比,I/O等待时间要比处理器使用时间长得多) 405

图9-7 使用绝对翻译和加载的固定分区多道程序设计 406

图9-8 采用绝对翻译和加载的固定分区多道程序设计系统的内存浪费示意图 406

图9-9 采用可重定位翻译和加载技术的固定分区多道程序设计 407

图9-10 连续分配多道程序设计系统的内存保护 407

图9-11 固定分区多道程序设计系统中的内部碎片化问题 408

图9-12 可变分区多道程序设计的初始分区 410

图9-13 可变分区多道程序设计中的内存“洞” 411

图9-14 在可变分区多道程序设计中对内存洞进行合并 411

图9-15 可变分区多道程序设计中的内存压缩 412

图9-16 First-fit,Best-fit和Worst-fit内存安置策略 414

图9-17 交换系统中的多道程序设计,每次只能有一个进程驻留在主内存中 415

第10章 虚拟内存组织 431

图10-1 内存组织的演变 434

图10-2 二级存储结构 436

图10-3 内存和辅助存储器中存在的各种地址空间 437

图10-4 虚拟地址映射到真实地址 438

图10-5 假邻近 438

图10-6 块映射系统中虚拟地址格式 439

图10-7 用块映射进行虚拟地址转换 440

图10-8 纯分页系统下的虚拟地址格式 441

图10-9 主存被分成页帧 441

图10-10 在一个纯分页系统中的虚拟内存地址和物理内存地址间的对应关系 442

图10-11 页表项 443

图10-12 分页地址转换之直接映射技术 444

图10-13 分页地址转换之纯联想映射技术 445

图10-14 分页地址转换之联想/直接组合映射法 448

图10-15 多级页地址转换 450

图10-16 使用反向页表的页地址转换 452

图10-17 使用散列锚表的反向页表 453

图10-18 纯分页系统中的共享 454

图10-19 真实内存分段系统中不连续的内存分配 456

图10-20 纯分段系统中的虚拟内存格式 457

图10-21 纯分段系统中的虚拟地址转换 458

图10-22 分段映射表表项 459

图10-23 纯分段系统中的共享 460

图10-24 非连续内存分配多道程序设计系统中的内存保护键 461

图10-25 访问控制类型 462

图10-26 组合读、写和执行访问以产生有用的访问控制模式 462

图10-27 带保护位的分段映射表项 463

图10-28 分段/分页系统中的虚拟地址格式 464

图10-29 在一个分段/分页系统中,使用组合的联想/直接映射技术的虚拟地址转换 465

图10-30 分段/映射系统的映射表结构 466

图10-31 在分段/映射系统中两个进程共享一个分段 468

图10-32 虚拟机多道程序设计 474

第11章 虚拟内存管理 495

图11-1 请求分页系统下的空间-时间积 499

图11-2 先进先出(FIFO)页替换 504

图11-3 FIFO异常——缺页错误数可能随页帧分配而增加 506

图11-4 最近最少使用的(LRU)页替换策略 507

图11-5 NUR策略下的页分类 509

图11-6 最远的页先淘汰替换策略的访问图 511

图11-7 存储器的引用模式展示了局部性 512

图11-8 缺页率取决于一个进程的所有页可用的内存量 513

图11-9 进程的所引用页的工作集的定义 514

图11-10 工作集大小作为窗口大小的函数 514

图11-11 工作集内存管理下的主存分配 515

图11-12 在一个分页/分段组合系统中的内部碎片 518

图11-13 各种处理器构架中的页尺寸 519

图11-14 一个进程的所有页随时间的变化被引用的百分比 520

图11-15 缺页错误间隔时间与分配给一个进程的页帧数的关系 521

图11-16 Linux页替换策略综述 523

第Ⅳ部分 辅助存储器、文件和数据库 545

第12章 磁盘性能优化 545

图12-1 活动臂磁盘存储器的侧视图 548

图12-2 硬磁盘的寻道时间和延迟时间 549

图12-3 盘面的顶视图 549

图12-4 磁盘存取过程的组成 550

图12-5 磁盘请求模式 552

图12-6 FCFS策略下的寻道模式 553

图12-7 SSTF策略下的寻道模式 554

图12-8 SCAN策略下的寻道模式 556

图12-9 C-SCAN策略下的寻道模式 557

图12-10 FSCAN策略下的寻道模式 558

图12-11 N-Step SCAN策略下的寻道模式(n=3) 558

图12-12 LOOK策略下的寻道模式 559

图12-13 寻道优化策略总结 560

图12-14 SLTF调度。请求将以指示的顺序得到服务,而不管它们到达的先后顺序 561

图12-15 SPTF(a)和SATF(b)磁盘调度实例 562

图12-16 根据RAID系统中的单个文件创建的带区(strip)和带区集(stripe) 569

图12-17 第0级RAID(带区集) 572

图12-18 第1级RAID(镜像) 573

图12-19 第2级RAID(位级汉明纠错码奇偶校验) 576

图12-20 第3级RAID(位级、单个奇偶校验磁盘) 577

图12-21 第4级RAID(块级奇偶校验) 578

图12-22 第5级RAID(块级分布式奇偶校验) 580

图12-23 第0~5级RAID比较 580

第13章 文件和数据库系统 605

图13-1 目录文件内容示例 611

图13-2 二级分层文件系统 612

图13-3 分层文件系统的目录示例 613

图13-4 文件系统中的链接 614

图13-5 安装一个文件系统 617

图13-6 链表式非连续文件分配 621

图13-7 表式非连续文件分配 622

图13-8 索引块链接 625

图13-9 Inode结构 626

图13-10 使用空闲表的空闲空间管理 627

图13-11 使用位图的空闲空间管理 628

图13-12 访问控制矩阵 630

图13-13 基于日志的文件系统 636

图13-14 关系数据库中的一个关系 640

图13-15 通过投影形成的关系 640

图13-16 SQL查询 640

第Ⅴ部分 性能、处理器和多处理器管理 665

第14章 性能和处理器设计 665

图14-1 性能评估技术概括 679

图14-2 IBM的System/370构架上10个最常执行的指令(经IBM公司授权刊登) 684

图14-3 RISC和CISC设计对比 685

图14-4 (a)EPIC处理器中的指令执行,(b)post-RISC处理器中的指令执行 689

第15章 多处理器管理 711

图15-1 共享总线多处理器组织 717

图15-2 纵横开关矩阵多处理器组织 718

图15-3 4向连接的二维网状网络 719

图15-4 三维超立方体和四维超立方体 720

图15-5 多级基准网络 721

图15-6 紧密耦合系统 722

图15-7 松散耦合系统 722

图15-8 主/从多处理结构 724

图15-9 UMA多处理器 727

图15-10 NUMA多处理器 728

图15-11 COMA多处理器 729

图15-12 NORMA多处理器 730

图15-13 一起调度算法(未分版本) 740

图15-14 动态分割调度算法 741

图15-15 进程迁移 743

图15-16 使用图表示的静态负载平衡 747

图15-17 处理器负载扩散 749

第Ⅵ部分 联网和分布式计算 781

第16章 联网概论 781

图16-1 网络拓扑 784

图16-2 FTP命令 790

图16-3 通过令牌环协议来发送一条消息 798

图16-4 三层客户/服务器模型 801

第17章 分布式系统入门 817

图17-1 RPC通信模型 826

图17-2 wound-wait策略 833

图17-3 wait-die策略 834

图17-4 无死锁的系统 836

图17-5 出现了死锁的系统 836

图17-6 消除死锁之后的系统 837

第18章 分布式系统和Web服务 853

图18-1 NFS构架 858

图18-2 AFS结构 860

图18-3 Coda卷结构 862

图18-4 互斥AVSG中的文件一致性问题 863

图18-5 Sprite文件系统的域 864

图18-6 Sprite文件系统中的读取和写入 865

图18-7 典型的Beowulf群集 870

图18-8 使用共享存储的高可用性群集 871

图18-9 使用本地存储的高可用性群集 871

图18-10 具有32个结点的负载平衡群集 872

图18-11 集中式P2P即时通信应用程序 873

图18-12 纯P2P即时通信应用程序 874

图18-13 常见P2P应用 874

图18-14 JXTA低级协议 877

图18-15 Jini构架 881

图18-16 使用JavaSpaces的分布式图像处理应用程序 883

图18-17 JMX的三层管理构架 884

图18-18 含有6个peer的P2P系统 897

第Ⅶ部分 安全性 911

第19章 安全性 911

图19-1 用秘密密钥来加密和解密信息 917

图19-2 密钥分配中心分配会话密钥 917

图19-3 使用公钥加密技术加密和解密信息 919

图19-4 用公钥算法认证 920

图19-5 口令加码法(基于64位编码) 923

图19-6 一小组主体和客体的访问控制矩阵 930

图19-7 来源于访问控制矩阵的访问控制列表 930

图19-8 多态病毒 940

图19-9 创建数字信封 947

第Ⅷ部分 操作系统案例分析 985

第20章 案例分析:Linux 985

图20-1 Linux体系结构 994

图20-2 任务状态转换图 998

图20-3 调度程序优先级阵列 1000

图20-4 优先值和它们相应的交互性等级 1002

图20-5 页表组织 1005

图20-6 内核虚拟地址空间映射 1006

图20-7 在IA-32 Intel体系结构上的物理内存区 1008

图20-8 free_area向量 1009

图20-9 页面替换系统概观 1011

图20-10 VFS、文件系统和数据之间的关系 1014

图20-11 一个特定的/home目录的目录条目组织 1015

图20-12 VFS文件和索引节点操作 1016

图20-13 目录条目和索引节点高速缓存 1017

图20-14 ext2索引节点内容 1019

图20-15 块组 1020

图20-16 组描述符 1021

图20-17 目录结构 1021

图20-18 /proc目录的内容实例 1023

图20-19 /proc/devices文件内容 1024

图20-20 输入/输出接口层 1025

图20-21 chrdevs向量 1026

图20-22 块输入/输出子系统中的层 1027

图20-23 统一设备模型组织 1032

图20-24 POSIX信号 1038

图20-25 系统V共享内存系统调用 1042

图20-26 网络子系统所接收的网络数据包经过的路径 1045

图20-27 网络过滤异常分支 1046

图20-28 回送设备使用加密的API而提供的一个加密的文件系统 1052

第21章 案例分析:Windows XP 1077

图21-1 Windows XP系统体系结构 1086

图21-2 中断请求级(IRQL) 1090

图21-3 线程状态转换图 1097

图21-4 Windows XP中的调度程序对象 1101

图21-5 虚拟地址转换 1105

图21-6 页状态 1105

图21-7 内存分配步骤 1107

图21-8 页帧状态 1108

图21-9 页面替换过程 1110

图21-10 样本文件的主文件表 1113

图21-11 存储在B树中的目录内容 1114

图21-12 Windows XP I/O支持组件 1117

图21-13 I/O请求包 1121

图21-14 Windows XP中的主要功能代码示例 1121

图21-15 IRP的服务过程 1122

图21-16 LPC或RPC调用的流程 1130

图21-17 处理一个网络I/O请求 1134

图21-18 网络驱动程序体系结构 1136

图21-19 在一个Windows XP网络中的认证过程 1142