书 · 1983 · 亚伯拉罕·西尔伯沙茨、彼得·贝尔·高尔文、格雷格·加涅(后续版本作者;初版作者为詹姆斯·L.彼得森、亚伯拉罕·西尔伯沙茨)

《操作系统概念》

计算机与 AI书单第 31 名

一句话结论

操作系统让许多程序安全、有效地共享硬件,而理解它的关键,是看清每种抽象解决了什么问题,又带来了什么代价。

值不值得读完整本?

值得完整读一轮,尤其适合想系统理解程序运行、并发和存储的人;不过要配合推演和编程,单看概念介绍很容易产生已经学会的错觉。

  • 本导读依据2018年英文第十版展开,章节编号也按该版定位;作品的首次出版年份为1983年。
  • 先读第1—2章建立全景,再细读第3—10章。进程、线程、调度、同步、死锁和虚拟内存是后面各部分的基础。
  • 接着读第11—17章,把设备、文件、故障恢复和权限控制串起来;第18—19章再补上虚拟机、网络与分布式系统的视角。
  • 第20—21章适合用来检验前面的概念:挑一个熟悉的系统细读,另一个先浏览;附录和具体接口的重复示例可以留作查阅。
  • 每个核心部分至少做一次动手练习:画调度过程、找出并发交错、分析锁的等待关系、推演页面置换,并追踪一次文件读写。已有基础数据结构、计算机组成和编程知识,阅读会顺畅得多。

核心观点

1. 用抽象组织资源,让程序能够受控地共享硬件

操作系统一面提供进程、地址空间和文件等抽象,一面分配处理器、内存与设备。理解抽象时,要同时追问它背后保存了什么状态、使用了什么资源。

为什么:应用若都直接操作硬件,就得各自处理设备细节,还容易互相破坏。操作系统把这些操作放进受控接口,应用因而可以借助相对稳定的服务完成工作。进程把一次程序执行所需的状态组织起来,使系统能暂停它、运行别人,再恢复它。同一进程中的线程共享地址空间等资源,却各自保留执行所需的状态,因此合作方便,也更需要协调。

2. 调度算法的好坏,取决于你要优化什么

处理器调度没有脱离目标的最佳方案;吞吐量、响应时间、周转时间、公平性和实时期限可能要求不同的安排。

为什么:程序会在计算和等待输入输出之间交替,系统可以在一个程序等待时让另一个运行,提高资源利用率。但就绪任务仍可能争用处理器,先让谁运行会改变不同任务的等待时间。在教材讨论的模型中,优先执行短的处理器执行段可以降低平均等待时间,而时间片轮转让交互任务更快轮到执行。时间片太短又会增加切换开销,所以选择算法和参数必须同时考虑负载、目标与实施成本。

3. 并发正确性既要防止数据出错,也要保证工作能继续

并发程序必须控制共享数据的访问顺序,并检查死锁、饥饿等无法继续推进的问题。互斥只是正确性的一部分。

为什么:一段看起来完整的更新操作,实际可能分成读取、计算和写回,多条执行路径交错后就可能覆盖彼此的结果。锁、信号量和管程通过限制进入临界区的方式,或让执行者等待特定条件,建立必要的协调关系。单核上的执行也会被切换,所以竞争问题并不以多核同时执行为前提。不过,锁本身也是资源,持有一把锁再等待另一把锁可能形成循环依赖。因而还要根据资源关系选择预防、避免、检测与恢复等办法,并比较它们的开销和限制。

4. 虚拟内存依靠局部性节省资源,也受实际内存容量约束

虚拟内存把程序使用的地址与物理内存位置分开,按需提供页面,从而支持隔离、共享和更灵活的内存使用。

为什么:地址转换让程序不必知道数据实际放在哪个物理位置,也使不同进程可以使用各自的地址空间。程序在一段时间内通常集中访问有限的代码和数据,因此不必把全部内容同时装入主存。访问尚未驻留的页面时,系统通过缺页处理准备页面,再继续执行。可是页面调入调出远比普通内存访问昂贵;活跃程序需要的页面若长期装不下,系统就可能不断换页。由此产生的抖动说明,增加并发程序数量有时反而会减少真正完成的工作。

5. 文件系统必须同时处理访问效率与故障后的可恢复性

文件和目录提供便于使用的持久存储接口,底层还要完成空间分配、设备访问、缓存和恢复。正常运行时读写得快,并不等于崩溃后状态一定正确。

为什么:存储设备的接口和速度不同,操作系统通过驱动、请求管理等机制把它们接到较统一的服务上。中断和直接内存访问等机制可以减少处理器持续等待设备的时间,缓存与缓冲则减少或合并慢速访问。不过,数据留在内存缓存中与已经进入持久介质,是两个不同阶段。一次文件操作还可能同时修改目录、空间分配信息等多个位置,崩溃会把更新截断。日志等恢复机制通过记录必要信息和约束更新顺序,帮助恢复一致状态;它提供的保证仍取决于具体设计。

6. 共享系统的安全,要靠明确权限和持续执行边界

保护机制规定谁能对什么资源执行什么操作,安全则进一步处理攻击、身份冒用和其他威胁。系统需要把权限规则落实到每次相关访问中。

为什么:多个程序共享机器,意味着一个程序的错误或恶意行为可能影响别人的资源。用户态与内核态、地址空间和访问控制等机制,把可执行的操作限制在相应权限内。身份认证解决使用者是谁的问题,授权还要继续判断这个身份能做什么。最小权限原则让程序只持有所需权限,即使它出错或被攻破,能够波及的范围也较小。由于合法权限也可能被滥用,安全还需要结合威胁分析与多种防御措施。

反对意见

覆盖全面,不一定适合第一次自学(Oz Nova、Myles Byrne)

《Teach Yourself Computer Science》直接批评《操作系统概念》等教材的表达清晰度和学生友好程度,并推荐围绕虚拟化、并发与持久化组织内容的《Operating Systems: Three Easy Pieces》。这项批评针对学习路径与解释方式:材料齐全,并不保证初学者容易建立贯通全书的理解。

抽象概念需要接回硬件上的事件过程(Peter Desnoyers)

Desnoyers在《Teaching Operating Systems as How Computers Work》中批评本书2008年版过于抽象、回避硬件细节,同时肯定同步与文件系统部分。他主张沿用户操作触发的事件和状态变化解释系统,让学生能说明一步怎样引出下一步。这提醒读者,记住机制名称还不足以解释一次真实的程序执行。

资源保护与资源管理可以分得更开(Dawson R. Engler等)

Engler、Kaashoek与O’Toole在外核论文中认为,固定的内核抽象可能遮蔽硬件信息,限制应用对资源的定制和性能优化。他们提出让小内核负责保护资源,把更多管理工作交给应用层库。这是对传统职责划分的架构挑战,并非对本书的直接批评;本书本身也介绍多种系统结构。

相关推荐

导读由 AI 根据公开资料整理,没有读取原书全文,一切以原著为准。导读 Primer 首页