| 作者 |
| (美)亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 格雷格·加涅(Greg Gagne) |
| 丛书名 |
| 计算机科学丛书 |
| 出版社 |
| 机械工业出版社 |
| ISBN |
| 9787111606482 |
| 简要 |
| 简介 |
| 内容简介书籍计算机书籍 本书是经典教材《操作系统概念》的精简版,强调基础概念,更适合本科阶段的教学。全书共六部分,不仅详细讲解了进程管理、内存管理、存储管理、保护与安全等概念,而且涵盖重要的理论结果和案例研究,并且给出了供读者深入学习的推荐读物。这一版新增了多核系统和移动计算的内容,每一章都融入了新的技术进展,并且更新了习题和编程项目。 本书既适合高等院校计算机相关专业的学生学习,也是专业技术人员的有益参考。 |
| 目录 |
| 出版者的话 译者序 前言 第一部分 概论 第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 第二部分 进程管理 第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 第三部分 内存管理 第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 共享内存Windows API 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 第四部分 存储管理 第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 第五部分 保护与安全 第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 第六部分 案例研究 第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 |