01 / 导读
导读
引用
Silberschatz, A., Galvin, P. B., & Gagne, G. (2018). Operating System Concepts (10th ed.). Wiley.
章节概要
第10版(2018年4月;Wiley标注为1,040页)分九个部分共21章,另有四个附录(有影响的操作系统、Windows 7、BSD UNIX和Mach系统),附录单独编页,据序言介绍放在本书网站上提供。序言把本书定位为本科三、四年级或研究生一年级操作系统入门课程的教材,以直观描述、图示和例子而非形式化证明来呈现概念。例子取自Linux、Windows、macOS、Solaris、Android和iOS。每章以练习题(答案在网站上)、更多习题和延伸阅读结束。本版围绕作者指出的四大趋势修订:移动操作系统、多核系统、虚拟化以及基于非易失性存储器的存储。
第一部分 第1–2章:导论;操作系统结构
讲操作系统是什么、做什么,硬件背景(包括对内核中常用数据结构的概述),以及系统如何设计和构建:服务、系统调用、链接器与加载器、操作系统结构以及用GRUB启动。序言指出,这两章不涉及内部算法,适合只想了解概貌的读者。
第二部分 第3–5章:进程;线程与并发;CPU调度
把进程作为工作单元,讲其内存布局和进程间通信(包括Mach消息传递和Android RPC);线程与隐式线程,包括fork-join并行、Java Future、Grand Central Dispatch和Intel Threading Building Blocks;以及CPU调度,从基本算法讲到多核与NUMA感知调度、Linux CFS调度器和Windows 10。
第三部分 第6–8章:同步工具;同步示例;死锁
原来的同步一章现在分为两章:第6章讲竞争条件和通用工具,从内存模型和内存屏障到比较并交换(CAS)和无锁算法,但不绑定具体API;第7章把这些工具用于经典同步问题,使用POSIX信号量、条件变量和Java。第8章讲死锁和活锁,并介绍Linux lockdep等工具。
第四部分 第9–10章:内存;虚拟内存
讲现代硬件上的内存管理,包括分页、以页为单位的交换和ARMv8 64位体系结构(分段内容已删除);接着讲虚拟内存:缺页、帧分配、NUMA上的分配、内存压缩以及Linux和Windows 10的内存管理。
第五部分 第11–12章:大容量存储结构;I/O系统
把硬盘和非易失性存储设备同等对待,讲磁盘调度、RAID、云存储和对象存储;然后讲I/O硬件、接口和内核I/O结构、阻塞与非阻塞I/O以及性能。
第六部分 第13–15章:文件系统接口;文件系统实现;文件系统内部
从用户角度讲文件、目录、保护和内存映射文件;然后讲文件系统如何实现,包括分配方法、性能、日志、TRIM和Apple文件系统;还有新增的一章讲文件系统内部,整合了上一版的相关内容。
第七部分 第16–17章:安全;保护
安全一章现在放在保护之前:讲勒索软件等当前威胁、附代码示例的代码注入攻击、加密、认证以及地址空间布局随机化等防御。保护一章讲保护环、访问控制、强制访问控制、Linux能力机制、沙箱、代码签名以及Java栈检查。
第八部分 第18–19章:虚拟机;网络与分布式系统
讲虚拟化技术和硬件支持、容器、Docker和Kubernetes,以及单内核(unikernel)等最新研究;然后讲以TCP/IP为重点的网络,并结合分布式系统和Google文件系统、Hadoop等分布式文件系统。
第九部分 第20–21章:Linux系统;Windows 10
两个案例研究,把全书概念应用于完整的系统。Linux一章讲历史、设计原则、内核模块、进程管理、调度、内存管理、文件系统、I/O、进程间通信、网络和安全。
核心概念
第一、二部分:结构与进程
- 系统调用与内核结构:程序如何请求服务,以及操作系统的各种组织和构建方式。
- 进程与线程:工作单元及其中的执行单元,以及进程之间的通信。
- CPU调度:选择下一个运行线程的策略,包括多核和NUMA的影响。
第三部分:同步
- 竞争条件与临界区:为什么对共享数据的并发访问需要协调。
- 同步工具:锁、信号量、管程和条件变量,以及无锁的比较并交换。
- 死锁与活性:进程永远等待的条件,以及如何预防、避免或检测死锁。
第四至六部分:内存、存储与文件
- 分页与虚拟内存:虚拟内存到物理内存的映射、按需调页和页面置换。
- 大容量存储与I/O:磁盘和非易失性存储设备、调度、RAID以及内核I/O子系统。
- 文件系统实现:分配、目录、日志和性能。
第七至九部分:安全、高级主题与案例研究
- 安全与保护:抵御攻击与控制对资源的访问。
- 虚拟机与容器:在共享硬件上运行相互隔离的环境。
- 案例研究:以Linux和Windows 10作为概念的完整实例。
评析
优点
- 概念为先,系统为例。 序言提出的目标是在不依附于某一操作系统的一般框架中呈现概念,并用当今桌面、服务器和移动系统中的大量例子加以说明。因此,无论课程实践使用哪种系统,本书都适用。
- 内容新颖的一版。 序言列出了每一章的主要修订:加强多核、移动和ARM的内容,固态存储,拆分并扩充的同步内容(包括内存模型和无锁算法),容器和Kubernetes等。
- 三种环境下的编程。 示例使用C语言的POSIX和Pthreads、Java以及Windows API,有时对同一任务(如创建线程)三种都给出。可下载的Ubuntu虚拟机支持编程作业,其中一些作业需要编写Linux内核模块。
- 配套资源丰富。 网站上提供练习题答案、更多习题、复习题、学生学习指南、幻灯片和课程大纲示例。
局限
- 重直观而非证明。 作者有意省略了大部分形式化证明,代之以图示和例子,并指引读者查阅研究论文;想要严格论述(例如同步的正确性)的学生需要其他资料。
- 篇幅大。 本书超过1,000页,既是课程教材也是参考书;序言建议按章节顺序学习,但也提供了用于挑选章节的课程大纲示例。
- 先修要求。 序言假定读者掌握基本数据结构、计算机组成并熟悉C语言;不熟悉C的读者会觉得编程示例很吃力。
- 出版形式。 据作者网站介绍,第10版以电子版单独销售,或与删节版的印刷配套本捆绑销售(Wiley后来又出了活页版);想要完整纸质书的读者应确认所购买的版本。
在课程中的定位
本书是本课程操作系统课的主要教材之一。Tanenbaum和Bos的 Modern Operating Systems 是一本同类的标准教材,以Linux、Android和Windows的详细案例研究支撑原理;两者中任何一本都可以作为主教材,另一本作为补充讲解。Arpaci-Dusseau夫妇免费提供的 Operating Systems: Three Easy Pieces 围绕虚拟化、并发和持久化组织内容,对于想从另一个角度(尤其是并发)理解的学生是很好的伴读。
Ward的 How Linux Works 是实践性的伴读,展示第2、3、9–14和20章的概念在一台运行中的Linux机器上出现在哪里、如何查看。Saltzer和Kaashoek的 Principles of Computer System Design 适合之后更广泛地讨论计算机系统设计原则的课程。
如何使用本书
本书适合三、四年级的计算机科学本科生(序言所指的程度)、研究生一年级学生,以及想系统了解操作系统的从业者。学习前应具备数据结构、计算机组成和C语言基础。
一学期课程的实用计划:
- 核心: 第1–7章(概述、进程、线程、调度、同步)、第8章(死锁)、第9–10章(内存)和第13–14章(文件系统)。这些章节承载主要概念和大部分编程作业。
- 存储与I/O: 第11–12章,尤其适合对系统性能感兴趣的学生。
- 选读或第二门课: 第15–19章,讲文件系统内部、安全、保护、虚拟化和分布式系统。
- 案例研究: 如果课程用Linux编程,就把第20章与核心章节同步阅读;如果用Windows,则读第21章。关于历史系统的在线附录可按兴趣阅读。
做完每章末尾的练习题,并对照网站上的答案。尽早安装Linux虚拟机并完成编程项目,因为进程、线程、同步和内存管理主要是通过亲手编程才能真正理解的。复习时可借助学习指南。
