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

  • 购买积分:17 如何计算积分?
  • 作  者:(美)加里·纳特(Gary Nutt)著;罗宇,吕硕等译
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2005
  • ISBN:7111163788
  • 页数:553 页
图书介绍:本书通过各种实例来说明核心的操作系统概念,并对操作系统的基本原理进行了完整的讨论。

目录 1

出版者的话 1

专家指导委员会 1

译者序 1

前言 1

第1章 导言 1

1.1 计算机与软件 1

1.1.1 通常的系统软件 2

1.1.2 资源抽象 4

示例:磁盘设备抽象 5

1.1.3 资源共享 6

1.1.4 虚拟机和透明资源共享 6

1.1.5 显式资源共享 9

1.2 操作系统策略 10

1.2.2 用户的观点 11

1.2.1 批处理系统 11

1.2.3 批处理技术 12

示例:批处理文件 13

1.2.4 分时系统 13

1.2.5 用户的观点 14

1.2.6 分时技术 14

示例:UNIX分时系统 14

1.2.7 个人计算机和工作站 15

1.2.8 用户的观点 16

1.2.9 操作系统技术 16

1.2.10 对现代操作系统技术的贡献 17

示例:微软Windows操作系统家族 17

1.2.11 嵌入式系统 18

1.2.12 用户的观点 18

1.2.13 操作系统技术 18

1.2.16 用户的观点 19

1.2.15 小型通信计算机 19

1.2.14 对现代操作系统技术的贡献 19

示例:VxWorks 19

1.2.17 操作系统技术 20

示例:Windows CE(Pocket PC) 20

1.2.18 网络 21

1.2.19 现代操作系统的起源 22

1.3 小结 22

1.4 习题 23

第2章 使用操作系统 25

2.1 程序员看到的虚拟机 25

2.1.1 顺序计算 25

2.1.2 多线程计算 26

2.2 资源 27

示例:Windows文件 28

示例:POSIX文件 28

2.2.1 使用文件 28

2.2.2 使用其他资源 30

2.3 进程和线程 31

2.3.1 创建进程和线程 32

2.3.2 FORK()、JOIN()和QUIT():历史的观点 32

示例:使用FORK()、JOIN()和QUIT() 32

2.3.3 经典的进程创建 34

2.3.4 现代进程和线程的创建 34

2.4 并发程序的编写 34

2.4.1 多单线程进程:UNIX模型 34

示例:在UNIX系统中执行命令 36

2.4.2 多进程和进程中的多线程:Windows模型 39

示例:创建Windows进程 40

2.5 对象 43

2.7 习题 44

2.6 小结 44

实验2.1:一个简单的shell 45

实验2.2:一个多线程的应用程序 50

第3章 操作系统的组织结构 55

3.1 基本功能 55

3.1.1 设备管理 55

3.1.2 进程、线程和资源管理 56

3.1.3 存储管理 56

3.1.4 文件管理 57

3.2 一般实现考虑 57

3.2.1 性能 58

3.2.2 资源独占性使用 58

3.2.3 处理器模式 58

3.2.4 内核 59

3.2.5 请求获得操作系统服务 60

3.2.6 软件模块化 61

3.3 当代的操作系统内核 62

3.3.1 UNIX内核 63

示例:Linux 64

3.3.2 Windows NT执行体和内核 65

3.4 小结 66

3.5 习题 67

实验3.1:观察操作系统的行为 67

第4章 计算机组织结构 69

4.1 冯·诺依曼体系结构 69

4.1.1 冯·诺依曼体系结构的发展 69

4.1.2 基本思想 69

4.2 中央处理单元 71

4.2.1 算术逻辑运算单元 71

4.2.2 控制单元 72

4.3 主存储器 73

4.2.3 处理器的实现 73

4.4 I/O设备 74

4.4.1 设备控制器 75

4.4.2 直接内存访问 76

4.4.3 存储映射I/O 77

4.5 中断 78

4.6 当代传统计算机 80

4.7.1 片上系统技术 83

4.7 移动计算机 83

4.7.2 电源管理 84

示例:Itsy移动计算机 84

4.8 多处理机和并行计算机 85

4.8.1 并行指令执行 85

4.8.2 阵列处理机 86

4.8.3 共享内存多处理机 86

4.8.4 分布式存储多处理机 86

4.10 习题 87

4.8.5 工作站网络 87

4.9 小结 87

第5章 设备管理 91

5.1 I/O系统 91

5.1.1 设备管理器抽象 91

5.1.2 在应用程序内I/O与处理器的交迭执行 93

5.1.3 多个线程间的I/O-处理器交迭执行 94

5.2 I/O策略 94

5.2.1 使用轮询的直接I/O 95

5.2.2 中断驱动I/O 96

5.2.3 中断I/O与轮询I/O的性能比较 97

5.3 设备管理器设计 97

5.3.1 设备相关的驱动程序基础框架 98

5.3.2 服务中断 99

示例:Linux设备I/O 100

5.4 缓冲 102

5.5 不同种类设备的特征 104

5.5.1 通信设备 105

示例:异步串行设备 106

5.5.2 顺序访问存储设备 107

示例:传统磁带 107

5.5.3 随机访问存储设备 107

示例:磁盘 108

示例:磁盘访问优化 109

示例:CD-ROM和DVD 111

5.6 小结 112

5.7 习题 112

实验5.1:软盘驱动程序 113

第6章 进程、线程和资源的实现 119

6.1 手边的任务 119

6.1.1 经典进程的虚拟机 120

6.1.2 支持现代进程和线程 121

6.1.4 进程地址空间 122

6.1.3 资源 122

6.1.5 操作系统家族 123

6.1.6 进程管理器的任务 123

6.2 硬件进程 124

6.3 虚拟机接口 125

6.4 进程抽象 127

示例:Linux进程描述表 129

示例:Windows NT/2000/XP进程描述表 130

6.5 线程抽象 130

示例:Linux线程描述表 131

示例:Windows NT/2000/XP线程描述表 131

6.6 状态图 132

示例:UNIX状态图 133

6.7 资源管理器 134

6.8.1 精化进程管理器 136

6.8 概括进程管理策略 136

6.8.2 专用的资源分配策略 137

6.9 小结 138

6.10 习题 138

实验6.1:内核计时器 139

实验6.2:操纵内核对象 144

第7章 调度 153

7.1 概述 153

7.2 调度机制 154

7.2.1 进程调度程序组织 154

7.2.2 保存上下文 154

7.2.3 自愿的CPU共享 156

7.2.4 非自愿的CPU共享 157

7.2.5 性能 158

7.3 策略选择 158

7.3.1 调度程序的特征 159

7.3.2 一个调度研究模型 160

示例:分解一个进程成多个小进程 160

7.4 非剥夺策略 161

示例:估计系统负载 161

7.4.1 先来先服务 162

示例:预测FCFS的等待时间 163

7.4.2 最短作业优先 163

7.4.3 优先级调度 164

7.4.4 期限调度 165

7.5 剥夺式策略 166

7.5.1 轮转 166

7.5.2 多级队列 168

7.6 调度程序的实现 169

示例:Linux调度机制 170

7.7 小结 171

示例:Windows NT/2000/XP中的线程调度 171

示例:BSDUNIX中的调度策略 171

7.8 习题 172

实验7.1:分析RR调度 174

第8章 基本同步原理 179

8.1 协作进程 179

8.1.1 临界区 181

8.1.2 死锁 186

8.1.3 资源共享 187

8.2 经典解决办法的改进 188

8.3 信号量:现代解决方法的基础 189

8.3.1 操作原理 190

示例:使用信号量 191

8.3.2 应用中要考虑的因素 195

8.6 习题 199

8.5 小结 199

8.4 共享存储的多处理机中的同步 199

实验8.1:有限缓冲区问题 202

第9章 高级同步技术与进程间通信 209

9.1 可选的同步原语 209

9.1.1 AND同步 210

示例:使用AND同步来解决哲学家就餐问题 211

9.1.2 事件 211

示例:使用通用事件 213

示例:Windows NT/2000/XP中的分派对象 213

9.2 管程 215

9.2.1 操作原理 215

9.2.2 条件变量 216

示例:使用管程 218

9.2.3 使用管程的一些实际状况 220

9.3.1 管道模型 221

9.3.2 消息传递机制 221

9.3 进程间通信 221

9.3.3 信箱 222

9.3.4 消息协议 223

9.3.5 使用send()和receive()操作 223

示例:同步的IPC 224

9.3.6 延迟的消息拷贝 225

9.4 小结 225

9.5 习题 225

实验9.1:使用管道 227

实验9.2:精炼shell程序 232

第10章 死锁 235

10.1 背景 235

10.1.1 死锁预防 237

10.1.2 死锁避免 237

10.2 一个系统死锁模型 238

10.1.4 人工死锁管理 238

10.1.3 死锁检测和恢复 238

示例:单个资源类型 239

10.3 死锁预防 241

10.3.1 占有并等待 241

10.3.2 循环等待 242

10.3.3 允许剥夺 243

10.4 死锁避免 244

示例:使用银行家算法 246

10.5 死锁检测和恢复 247

10.5.1 顺序可重用资源 248

示例:顺序可重用资源图 252

10.5.2 可消费资源 253

10.5.3 一般资源系统 256

10.5.4 恢复 257

10.6 小结 257

10.7 习题 257

11.1 基本知识 259

第11章 存储管理 259

11.2 地址空间抽象 261

11.2.1 管理地址空间 261

示例:静态地址绑定 263

11.2.2 用于数据结构的动态存储 266

11.2.3 现代存储绑定 266

11.3 主存分配 267

11.3.1 固定分区存储分配策略 268

11.3.2 可变分区存储分配策略 268

示例:移动程序的开销 270

11.3.3 现代存储分配策略 271

11.4 动态地址空间绑定 271

11.5 现代存储管理器策略 274

11.5.1 交换 274

示例:使用高速缓存存储器 276

11.5.2 虚拟存储器 276

11.5.3 共享存储器的多处理机 277

11.6 小结 279

11.7 习题 280

实验11.1:使用共享存储器 281

第12章 虚拟存储器 287

12.1 概述 287

12.2 地址转换 287

12.2.1 地址空间映射 288

12.2.2 段式和页式 289

12.3 页式 290

示例:当代的页表实现 293

12.4 静态页面调度算法 293

12.4.1 取策略 294

12.4.2 请求调页算法 295

12.4.3 栈算法 297

12.4.4 实现LRU 298

12.4.5 页面调度性能 299

12.5 动态页面调度算法 300

12.5.1 驻留集算法 300

示例:驻留集算法 301

12.5.2 驻留集算法的实现 302

示例:利用分页实现IPC 303

示例:WindowsNT/2000/XP虚拟存储器 304

示例:Linux虚拟存储器 306

12.6 段式 307

12.6.1 地址转换 307

12.6.2 实现 309

示例:Multics段式系统 310

12.7 存储映射文件 311

12.8 小结 312

12.9 习题 313

实验12.1:存储映射文件 314

第13章 文件管理 319

13.1 概述 319

13.2 文件 320

13.2.1 低级文件 322

13.2.2 结构化文件 323

13.2.3 数据库管理系统 326

13.2.4 多媒体存储 326

13.3 低级文件实现 327

13.3.1 open()和close()操作 327

示例:UNIX中的open和close操作 329

13.3.2 块管理 331

示例:UNIX文件结构 333

示例:DOS下的FAT文件系统 334

13.3.3 读、写字节流 335

13.4.2 索引顺序文件 337

13.4 支持高级文件抽象 337

13.4.1 结构化顺序文件 337

13.4.3 数据库管理系统 338

13.4.4 多媒体文档 338

13.5 目录 338

示例:几个目录例子 340

13.6 目录实现 341

13.6.1 目录项 341

13.6.2 打开一个文件 341

13.7 文件系统 342

示例:ISO9660文件系统 342

13.7.1 安装文件系统 343

13.7.2 异构文件系统 344

13.8 小结 345

13.9 习题 345

实验13.1:一个简单的文件管理器 347

第14章 保护和安全 353

14.1 问题 353

14.1.1 目标 354

14.1.2 策略和机制 354

14.1.3 保护和安全的上下文 355

14.1.4 保护机制的开销 357

14.2 认证 357

14.2.1 外部用户认证 357

示例:Windows NT/2000/XP用户认证 359

14.2.2 内部的线程/进程认证 361

14.2.3 网络中的认证 361

14.2.4 软件认证 363

14.3 授权 364

14.3.1 特别的授权机制 365

14.3.2 授权的通用模型 367

14.3.3 实现安全策略 369

14.3.4 实现通用的授权机制 370

14.3.5 保护域 370

14.3.6 访问矩阵的实现 372

14.4 密码技术 374

14.4.1 概述 374

14.4.2 私有密钥加密技术 375

14.4.3 公开密钥加密技术 377

示例:PGP 377

14.4.4 Internet信息发送 377

14.5 小结 378

14.6 习题 379

第15章 网络 381

15.1 从计算机通信到网络 381

15.1.1 交换网络 381

15.1.2 网络硬件需求 382

15.1.3 网络软件需求 383

15.2 ISO的OSI网络体系结构模型 384

15.2.1 网络协议的演变 384

15.2.2 ISO的OSI模型 385

15.3 媒体访问控制(MAC)协议 387

15.3.1 物理层 387

示例:快速物理层 388

15.3.2 数据链路层 388

15.3.3 当代网络 389

15.4 网络层 391

15.4.1 Internet寻址 392

15.4.2 路由 393

15.4.3 网络层的使用 394

示例:在Internet上的延迟 395

15.5 传输层 395

15.5.1 通信端口 395

15.5.3 可靠的通信 396

15.5.2 数据类型 396

示例:数据报和虚电路性能 397

15.6 使用传输层 397

15.6.1 命名和地址 397

示例:域名服务 399

15.6.2 客户-服务器模型 399

15.7 网络安全 401

15.7.1 传输层安全:防火墙 401

15.7.2 网络层安全:IPsec 402

15.8 小结 402

15.9 习题 403

实验15.1:使用TCP/IP协议 404

示例:WinSock包 405

16.1 通过网络共享信息 409

第16章 远程文件 409

16.1.1 显式的文件复制系统 411

16.1.2 无缝文件系统接口 412

16.1.3 工作分布 413

16.2 远程磁盘系统 414

16.2.1 远程磁盘操作 415

16.2.2 性能因素 416

16.2.3 可靠性 417

16.2.4 远程磁盘的未来 419

16.3 远程文件系统 419

16.3.1 通用的体系结构 419

16.3.2 块高速缓存 420

16.3.3 失效后的恢复 422

16.4 文件级高速缓存 424

16.4.1 Andrew文件系统 424

16.4.2 LOCUS文件系统 425

16.5.1 文件名字 427

16.5 目录系统及其实现 427

16.5.2 打开一个文件 428

16.6 小结 429

16.7 习题 430

第17章 分布式计算 431

17.1 分布式操作系统机制 431

17.2 分布式主存 433

示例:Linda程序设计语言 435

17.2.1 远程存储器 435

17.2.2 分布式共享存储器 436

17.3 远程过程调用 438

17.3.1 RPC如何工作 438

17.3.2 实现RPC 440

17.4 远程对象 442

17.4.1 Emerald系统 442

17.4.2 CORBA 443

17.5 分布式进程管理 444

17.4.3 Java远程对象 444

17.5.1 通用的进程管理 445

17.5.2 进程和线程创建 445

17.5.3 调度 446

17.5.4 迁移和负载平衡 446

17.5.5 分布式同步 447

17.6 小结 450

17.7 习题 451

实验17.1:使用远程过程调用 452

第18章 分布式程序设计运行时系统 459

18.1 用中间件来支持分布式软件 459

18.2 传统的分布式应用程序 459

18.3 经典分布式程序设计的中间件支持 461

18.3.1 PVM 461

18.3.2 Beowulf集群计算环境 462

18.3.3 OSF分布式计算环境 463

18.4 Web上的分布式程序设计 468

18.5 移动代码的中间件支持 469

18.5.1 Java和Java虚拟机 469

18.5.2 ECMA-335通用语言基础设施 473

18.6 小结 477

18.7 习题 477

第19章 设计策略 479

19.1 设计考虑 479

19.1.1 性能 479

19.1.2 可信软件 480

19.1.3 模块化 480

19.1.4 可移植性 482

19.2 单一内核 483

示例:MS-DOS 483

示例:UNIX内核 483

示例:Choices——面向对象的操作系统 484

19.3 模块化组织结构 484

19.4 可扩展内核或微内核组织结构 486

示例:Mach操作系统 486

19.5 分层的组织结构 491

19.6 用于分布式系统的操作系统 492

19.6.1 网络操作系统 492

示例:BSD UNIX 493

19.6.2 分布式操作系统 493

示例:CHORUS操作系统 494

19.7 小结 496

19.8 习题 497

第20章 Linux内核 499

20.1 Linux内核 499

20.2 内核组织结构 499

20.2.1 使用内核服务 499

20.3 模块和设备管理 501

20.2.4 机器中的控制流 501

20.2.3 启动内核 501

20.2.2 守护进程 501

20.3.1 模块组织 502

20.3.2 模块的安装和移除 502

20.4 进程和资源管理 503

20.4.1 运行进程管理器 504

20.4.2 创建一个新任务 504

20.4.3 IPC和同步 505

20.4.4 调度程序 506

20.5 存储管理器 506

20.5.1 虚拟地址空间 507

20.5.2 缺页处理程序 509

20.6 文件管理 509

20.7 小结 511

第21章 Windows NT/2000/XP内核 513

21.1 概述 513

21.2.2 线程 514

21.2 NT内核 514

21.2.1 对象 514

21.2.3 多处理机同步 515

21.2.4 自陷、中断和异常 515

21.3 NT执行体 516

21.3.1 对象管理器 516

21.3.2 进程和线程管理器 517

21.3.3 虚拟存储管理器 518

21.3.4 I/O管理器 518

21.3.5 高速缓存管理器 520

21.4 内核本地过程调用和IPC 521

21.5 子系统 522

21.6 小结 523

术语表 525

参考文献 549