《操作概念精要 原书第2版》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)亚伯拉罕·西尔伯沙茨,(美)彼得·B.高尔文,格雷格·加涅著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2018
  • ISBN:9787111606482
  • 页数:502 页
图书介绍:本书是经典教材《操作系统概念》的精简版,强调基础概念,更适合本科阶段的教学。全书共六部分,不仅详细讲解了进程管理、内存管理、存储管理、保护与安全等概念,而且涵盖重要的理论结果和案例研究,并且给出了供读者深入学习的推荐读物。这一版新增了多核系统和移动计算的内容,每一章都融入了新的技术进展,并且更新了习题和编程项目。本书既适合高等院校计算机相关专业的学生学习,也是专业技术人员的有益参考。

第一部分 概论 2

第1章 导论 2

1.1 操作系统的功能 2

1.1.1 用户视角 2

1.1.2 系统视角 3

1.1.3 操作系统的定义 4

1.2 计算机系统的组成 4

1.2.1 计算机系统的运行 5

1.2.2 存储结构 6

1.2.3 I/O结构 8

1.3 计算机系统的体系结构 9

1.3.1 单处理器系统 9

1.3.2 多处理器系统 10

1.3.3 集群系统 12

1.4 操作系统的结构 13

1.5 操作系统的执行 14

1.5.1 双重模式与多重模式的执行 15

1.5.2 定时器 16

1.6 进程管理 17

1.7 内存管理 17

1.8 存储管理 18

1.8.1 文件系统管理 18

1.8.2 大容量存储器管理 19

1.8.3 高速缓存 19

1.8.4 I/O系统 21

1.9 保护与安全 21

1.10 内核数据结构 22

1.10.1 列表、堆栈及队列 22

1.10.2 树 23

1.10.3 哈希函数与哈希表 23

1.10.4 位图 24

1.11 计算环境 24

1.11.1 传统计算 24

1.11.2 移动计算 25

1.11.3 分布计算 26

1.11.4 客户机-服务器计算 26

1.11.5 对等计算 27

1.11.6 虚拟化 28

1.11.7 云计算 29

1.11.8 实时嵌入式系统 29

1.12 开源操作系统 30

1.12.1 历史 31

1.12.2 Linux 31

1.12.3 BSD UNIX 32

1.12.4 Solaris 32

1.12.5 用作学习的开源操作系统 33

1.13 小结 33

复习题 35

实践题 35

习题 35

推荐读物 36

参考文献 37

第2章 操作系统结构 38

2.1 操作系统的服务 38

2.2 用户与操作系统的界面 40

2.2.1 命令解释程序 40

2.2.2 图形用户界面 41

2.2.3 界面的选择 42

2.3 系统调用 43

2.4 系统调用的类型 46

2.4.1 进程控制 46

2.4.2 文件管理 49

2.4.3 设备管理 50

2.4.4 信息维护 50

2.4.5 通信 50

2.4.6 保护 51

2.5 系统程序 51

2.6 操作系统的设计与实现 52

2.6.1 设计目标 52

2.6.2 机制与策略 53

2.6.3 实现 53

2.7 操作系统的结构 54

2.7.1 简单结构 54

2.7.2 分层方法 55

2.7.3 微内核 56

2.7.4 模块 57

2.7.5 混合系统 58

2.8 操作系统的调试 60

2.8.1 故障分析 60

2.8.2 性能优化 60

2.8.3 DTrace 61

2.9 操作系统的生成 63

2.10 系统引导 64

2.11 小结 64

复习题 65

实践题 65

习题 65

编程题 66

编程项目 66

推荐读物 69

参考文献 70

第二部分 进程管理 72

第3章 进程 72

3.1 进程概念 72

3.1.1 进程 72

3.1.2 进程状态 73

3.1.3 进程控制块 73

3.1.4 线程 74

3.2 进程调度 75

3.2.1 调度队列 75

3.2.2 调度程序 77

3.2.3 上下文切换 78

3.3 进程运行 79

3.3.1 进程创建 79

3.3.2 进程终止 82

3.4 进程间通信 83

3.4.1 共享内存系统 85

3.4.2 消息传递系统 86

3.5 IPC系统例子 89

3.5.1 例子:POSIX共享内存 89

3.5.2 例子:Mach 91

3.5.3 例子:Windows 92

3.6 客户机/服务器通信 93

3.6.1 套接字 93

3.6.2 远程过程调用 96

3.6.3 管道 98

3.7 小结 102

复习题 103

实践题 103

习题 104

编程题 105

编程项目 107

推荐读物 110

参考文献 111

第4章 线程 112

4.1 概述 112

4.1.1 动机 112

4.1.2 优点 113

4.2 多核编程 114

4.2.1 编程挑战 115

4.2.2 并行类型 115

4.3 多线程模型 116

4.3.1 多对一模型 116

4.3.2 一对一模型 116

4.3.3 多对多模型 116

4.4 线程库 117

4.4.1 Pthreads 118

4.4.2 Windows线程 119

4.4.3 Java线程 121

4.5 隐式多线程 122

4.5.1 线程池 123

4.5.2 OpenMP 124

4.5.3 大中央调度 125

4.5.4 其他方法 125

4.6 多线程问题 125

4.6.1 系统调用fork()和exec() 125

4.6.2 信号处理 126

4.6.3 线程撤销 127

4.6.4 线程本地存储 128

4.6.5 调度程序激活 128

4.7 操作系统例子 129

4.7.1 Windows线程 129

4.7.2 Linux线程 130

4.8 小结 131

复习题 131

实践题 131

习题 131

编程题 133

编程项目 135

推荐读物 136

参考文献 136

第5章 进程同步 138

5.1 背景 138

5.2 临界区问题 140

5.3 Peterson解决方案 141

5.4 硬件同步 142

5.5 互斥锁 144

5.6 信号量 144

5.6.1 信号量的使用 145

5.6.2 信号量的实现 145

5.6.3 死锁与饥饿 147

5.6.4 优先级的反转 147

5.7 经典同步问题 148

5.7.1 有界缓冲问题 148

5.7.2 读者-作者问题 149

5.7.3 哲学家就餐问题 150

5.8 管程 151

5.8.1 使用方法 152

5.8.2 哲学家就餐问题的管程解决方案 153

5.8.3 采用信号量的管程实现 154

5.8.4 管程内的进程重启 155

5.9 同步例子 156

5.9.1 Windows同步 156

5.9.2 Linux同步 157

5.9.3 Solaris同步 158

5.9.4 Pthreads同步 159

5.10 替代方法 160

5.10.1 事务内存 161

5.10.2 OpenMP 162

5.10.3 函数式编程语言 162

5.11 死锁 163

5.11.1 系统模型 163

5.11.2 死锁特征 164

5.11.3 死锁处理方法 167

5.12 小结 168

复习题 168

实践题 168

习题 169

编程题 172

编程项目 174

推荐读物 178

参考文献 178

第6章 CPU调度 180

6.1 基本概念 180

6.1.1 CPU-I/O执行周期 180

6.1.2 CPU调度程序 181

6.1.3 抢占调度 181

6.1.4 调度程序 182

6.2 调度准则 182

6.3 调度算法 183

6.3.1 先到先服务调度 183

6.3.2 最短作业优先调度 184

6.3.3 优先级调度 186

6.3.4 轮转调度 187

6.3.5 多级队列调度 189

6.3.6 多级反馈队列调度 190

6.4 线程调度 191

6.4.1 竞争范围 191

6.4.2 Pthreads调度 191

6.5 多处理器调度 193

6.5.1 多处理器调度的方法 193

6.5.2 处理器亲和性 193

6.5.3 负载平衡 194

6.5.4 多核处理器 194

6.6 实时CPU调度 196

6.6.1 最小化延迟 196

6.6.2 优先级调度 197

6.6.3 单调速率调度 198

6.6.4 最早截止期限优先调度 199

6.6.5 比例分享调度 200

6.6.6 POSIX实时调度 200

6.7 操作系统例子 202

6.7.1 例子:Linux调度 202

6.7.2 例子:Windows调度 204

6.7.3 例子:Solaris调度 206

6.8 算法评估 207

6.8.1 确定性模型 208

6.8.2 排队模型 209

6.8.3 仿真 209

6.8.4 实现 210

6.9 小结 211

复习题 212

实践题 212

习题 213

推荐读物 215

参考文献 216

第三部分 内存管理 220

第7章 内存 220

7.1 背景 220

7.1.1 基本硬件 220

7.1.2 地址绑定 222

7.1.3 逻辑地址空间与物理地址空间 222

7.1.4 动态加载 223

7.1.5 动态链接与共享库 224

7.2 交换 224

7.2.1 标准交换 224

7.2.2 移动系统的交换 225

7.3 连续内存分配 226

7.3.1 内存保护 226

7.3.2 内存分配 227

7.3.3 碎片 228

7.4 分段 228

7.4.1 基本方法 229

7.4.2 分段硬件 229

7.5 分页 230

7.5.1 基本方法 231

7.5.2 硬件支持 233

7.5.3 保护 236

7.5.4 共享页 237

7.6 页表结构 238

7.6.1 分层分页 238

7.6.2 哈希页表 240

7.6.3 倒置页表 240

7.6.4 Oracle SPARC Solaris 241

7.7 例子:Intel 32位与64位体系结构 242

7.7.1 IA-32架构 242

7.7.2 x86-64 244

7.8 例子:ARM架构 245

7.9 小结 245

复习题 246

实践题 246

习题 247

编程题 249

推荐读物 249

参考文献 250

第8章 虚拟内存 251

8.1 背景 251

8.2 请求调页 253

8.2.1 基本概念 253

8.2.2 请求调页的性能 256

8.3 写时复制 258

8.4 页面置换 259

8.4.1 基本页面置换 260

8.4.2 FIFO页面置换 262

8.4.3 最优页面置换 263

8.4.4 LRU页面置换 263

8.4.5 近似LRU页面置换 265

8.4.6 基于计数的页面置换 266

8.4.7 页面缓冲算法 267

8.4.8 应用程序与页面置换 267

8.5 帧分配 267

8.5.1 帧的最小数 268

8.5.2 分配算法 269

8.5.3 全局分配与局部分配 269

8.5.4 非均匀内存访问 270

8.6 系统抖动 270

8.6.1 系统抖动的原因 271

8.6.2 工作集模型 272

8.6.3 缺页错误频率 273

8.6.4 结束语 274

8.7 内存映射文件 274

8.7.1 基本机制 274

8.7.2 共享内存WindowsAPI 275

8.7.3 内存映射I/O 277

8.8 分配内核内存 278

8.8.1 伙伴系统 278

8.8.2 slab分配 279

8.9 其他注意事项 280

8.9.1 预调页面 280

8.9.2 页面大小 280

8.9.3 TLB范围 281

8.9.4 倒置页表 282

8.9.5 程序结构 282

8.9.6 I/O联锁与页面锁定 283

8.10 操作系统例子 284

8.10.1 Windows 284

8.10.2 Solaris 285

8.11 小结 286

复习题 286

实践题 287

习题 288

编程题 292

编程项目 292

推荐读物 294

参考文献 295

第四部分 存储管理 298

第9章 大容量存储结构 298

9.1 大容量存储结构概述 298

9.1.1 硬盘 298

9.1.2 固态磁盘 299

9.1.3 磁带 299

9.2 磁盘结构 300

9.3 磁盘连接 300

9.3.1 主机连接存储 300

9.3.2 网络连接存储 301

9.3.3 存储区域网络 301

9.4 磁盘调度 302

9.4.1 FCFS调度 302

9.4.2 SSTF调度 302

9.4.3 SCAN调度 303

9.4.4 C-SCAN调度 304

9.4.5 LOOK调度 304

9.4.6 磁盘调度算法的选择 304

9.5 磁盘管理 305

9.5.1 磁盘格式化 305

9.5.2 引导块 306

9.5.3 坏块 307

9.6 交换空间管理 308

9.6.1 交换空间的使用 308

9.6.2 交换空间位置 308

9.6.3 交换空间管理例子 309

9.7 RAID结构 309

9.7.1 通过冗余提高可靠性 310

9.7.2 通过并行处理提高性能 311

9.7.3 RAID级别 311

9.7.4 RAID级别的选择 314

9.7.5 扩展 315

9.7.6 RAID的问题 315

9.8 稳定存储实现 316

9.9 小结 317

复习题 318

实践题 318

习题 318

编程题 320

推荐读物 320

参考文献 321

第10章 文件系统接口 322

10.1 文件概念 322

10.1.1 文件属性 322

10.1.2 文件操作 323

10.1.3 文件类型 327

10.1.4 文件结构 328

10.1.5 内部文件结构 328

10.2 访问方法 328

10.2.1 顺序访问 329

10.2.2 直接访问 329

10.2.3 其他访问方法 330

10.3 目录与磁盘的结构 331

10.3.1 存储结构 331

10.3.2 目录概述 332

10.3.3 单级目录 332

10.3.4 两级目录 333

10.3.5 树形目录 334

10.3.6 无环图目录 335

10.3.7 通用图目录 337

10.4 文件系统安装 338

10.5 文件共享 339

10.5.1 多用户 339

10.5.2 远程文件系统 340

10.5.3 一致性语义 342

10.6 保护 343

10.6.1 访问类型 343

10.6.2 访问控制 343

10.6.3 其他保护方式 345

10.7 小结 346

复习题 346

实践题 346

习题 347

推荐读物 348

参考文献 348

第11章 文件系统实现 349

11.1 文件系统结构 349

11.2 文件系统实现 350

11.2.1 概述 351

11.2.2 分区与安装 353

11.2.3 虚拟文件系统 353

11.3 目录实现 355

11.3.1 线性列表 355

11.3.2 哈希表 355

11.4 分配方法 356

11.4.1 连续分配 356

11.4.2 链接分配 357

11.4.3 索引分配 359

11.4.4 性能 360

11.5 空闲空间管理 361

11.5.1 位向量 361

11.5.2 链表 362

11.5.3 组 362

11.5.4 计数 362

11.5.5 空间图 363

11.6 效率与性能 363

11.6.1 效率 363

11.6.2 性能 364

11.7 恢复 366

11.7.1 一致性检查 366

11.7.2 基于日志的文件系统 366

11.7.3 其他解决方法 367

11.7.4 备份和恢复 368

11.8 NFS 368

11.8.1 概述 369

11.8.2 安装协议 370

11.8.3 NFS协议 370

11.8.4 路径名称转换 371

11.8.5 远程操作 372

11.9 例子:WAFL文件系统 372

11.10 小结 374

复习题 375

实践题 375

习题 375

编程题 376

推荐读物 377

参考文献 378

第12章 I/O系统 379

12.1 概述 379

12.2 I/O硬件 379

12.2.1 轮询 381

12.2.2 中断 382

12.2.3 直接内存访问 385

12.2.4 I/O硬件小结 386

12.3 应用程序I/O接口 386

12.3.1 块与字符设备 388

12.3.2 网络设备 389

12.3.3 时钟与定时器 389

12.3.4 非阻塞与异步I/O 390

12.3.5 向量I/O 391

12.4 内核I/O子系统 391

12.4.1 I/O调度 391

12.4.2 缓冲 392

12.4.3 缓存 393

12.4.4 假脱机与设备预留 394

12.4.5 错误处理 394

12.4.6 I/O保护 394

12.4.7 内核数据结构 395

12.4.8 电源管理 396

12.4.9 内核I/O子系统小结 397

12.5 I/O请求转成硬件操作 397

12.6 流 399

12.7 性能 400

12.8 小结 402

复习题 403

实践题 403

习题 403

推荐读物 404

参考文献 404

第五部分 保护与安全 406

第13章 保护 406

13.1 保护目标 406

13.2 保护原则 407

13.3 保护域 407

13.3.1 域结构 408

13.3.2 例子:UNIX 409

13.3.3 例子:MULTICS 410

13.4 访问矩阵 411

13.5 访问矩阵的实现 413

13.5.1 全局表 413

13.5.2 对象的访问列表 413

13.5.3 域的能力列表 414

13.5.4 锁-钥匙机制 414

13.5.5 比较 414

13.6 访问控制 415

13.7 访问权限的撤回 416

13.8 基于能力的系统 417

13.8.1 例子:Hydra 417

13.8.2 例子:剑桥CAP系统 418

13.9 基于语言的保护 418

13.9.1 基于编译程序的实现 419

13.9.2 Java的保护 420

13.10 小结 422

复习题 422

实践题 422

习题 423

推荐读物 423

参考文献 424

第14章 安全 427

14.1 安全问题 427

14.2 程序威胁 429

14.2.1 特洛伊木马 429

14.2.2 后门 430

14.2.3 逻辑炸弹 431

14.2.4 堆栈和缓冲区溢出 431

14.2.5 病毒 433

14.3 系统和网络的威胁 435

14.3.1 蠕虫 436

14.3.2 端口扫描 438

14.3.3 拒绝服务 439

14.4 作为安全工具的密码术 439

14.4.1 加密 440

14.4.2 密码术的实现 445

14.4.3 例子:SSL 445

14.5 用户认证 447

14.5.1 密码 447

14.5.2 密码漏洞 447

14.5.3 密码安全 448

14.5.4 一次性密码 449

14.5.5 生物识别技术 449

14.6 实现安全防御 450

14.6.1 安全策略 450

14.6.2 漏洞评估 450

14.6.3 入侵检测 451

14.6.4 病毒防护 453

14.6.5 审计、记账和日志 455

14.7 保护系统和网络的防火墙 455

14.8 计算机安全等级 456

14.9 例子:Windows 7 457

14.10 小结 459

复习题 459

习题 459

推荐读物 460

参考文献 461

第六部分 案例研究 466

第15章 Linux系统 466

15.1 Linux历史 466

15.1.1 Linux内核 467

15.1.2 Linux系统 468

15.1.3 Linux发行 468

15.1.4 Linux许可 469

15.2 设计原则 469

15.3 内核模块 471

15.3.1 模块管理 472

15.3.2 驱动程序注册 473

15.3.3 冲突解决 473

15.4 进程管理 473

15.4.1 fork()/exec()进程模型 474

15.4.2 进程与线程 475

15.5 调度 476

15.5.1 进程调度 476

15.5.2 实时调度 477

15.5.3 内核同步 478

15.5.4 对称多处理 479

15.6 内存管理 480

15.6.1 物理内存管理 480

15.6.2 虚拟内存 482

15.6.3 执行与加载用户程序 484

15.7 文件系统 486

15.7.1 虚拟文件系统 486

15.7.2 Linux ext3文件系统 487

15.7.3 日志 489

15.7.4 Linux进程文件系统 489

15.8 输入与输出 490

15.8.1 块设备 491

15.8.2 字符设备 492

15.9 进程间通信 492

15.9.1 同步与信号 492

15.9.2 进程间的数据传递 493

15.10 网络结构 493

15.11 安全 495

15.11.1 认证 495

15.11.2 访问控制 495

15.12 小结 496

复习题 497

实践题 497

习题 497

推荐读物 498

参考文献 499