操作系统导论
英文名:《Operating Systems:Three Easy Pieces》,英文版评分超高9.9。
堪称伟大的免费IT书籍。中文翻译得不好,尽量阅读英文原版。中文版评分9.3。
本书免费共享(英文版),主页地址:https://pages.cs.wisc.edu/~remzi/OSTEP/
1、将操作系统这一个主题分为三个大类(其实是四个大类,分布式的部分被包含在持久化中),这种方式能够让学生可以从较高的高度去理解操作系统如此设计的目的。
2、比较丰富的课后练习和示例代码,在每一节后作者给出的python代码,完成附带的练习,能够对这一节的内容有更好的理解,这里也附上这本书的python代码和课后练习的答案,强烈推荐有时间和精力的同学实践一下,毕竟只有实践才能检验自己是否真正掌握并运用。
习题答案查看(仅供参考):https://github.com/xxyzz/ostep-hw
python代码下载:http://pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
作者解释了为什么要免费共享这本书。
导读参考:https://www.zhihu.com/tardis/bd/art/49286109
摘抄部分导读:
虽然是研究生的课程,但是书中讨论问题的深入浅出的方式,本科生读来应该也毫不费力。最后,不得不提的一点是,操作系统是一个非常庞大的系统工程,读完这本书并不能保证你对操作系统相关的问题都能找到答案。这更像是一个 guide,将我们引入操作系统的世界,而想要成为专家则需要持续不断的学习("read more" 在这本书出现了几十次之多)。除此之外,另外几本操作系统相关教程也值得推荐一下:《深入理解计算机系统》、《现代操作系统》。 开始之前再插句关于书名的题外话:《Three Easy Piece》,是为了致敬费曼的关于物理学的书籍:《Six Easy Pieces: Essentials Of Physics Explained By Its Most Brilliant Teacher》。用作者的话说,操作系统只有物理学一半难,那就叫 《Three Easy Pieces》好了。本书三个部分分别为:虚拟化(Virtualization)、并发(Concurrency)、持久化(Persistence)。其中虚拟化部分包括虚拟内存和 CPU 虚拟化以让进程以类似独占内存和 CPU 的方式在运行;并发部分主要讨论了并发编程,以及锁(lock)、条件变量(Condition Variables)、信号量(Semaphores);持久化只要讨论了文件系统,包括不同的存储介质(HDD, RAID, SSD)和不同文件系统的实现(vFS, FFS, LFS, NFS, AFS)。 这里的 CPU 虚拟化严格来说并不是 Docker 或者其他虚拟化技术中使用 unix 的内核特性 cgroup 进行 cpu 使用限制来达到“虚拟化”的目的。 我一般比较喜欢将线程理解为一个 CPU 运行的实例。一个进程(process)可以由一个线程或者多个线程组成,线程是运行在 CPU 中的基本单元。如果进程由多个线程组成,那么就包含多个 PC (program counter),以及上下文切换的时候需要保存多组状态。 使用线程的主要好处一个是在多核系统上提高并行度;另一个好处是高效利用资源,比如说在 IO 请求的时候,调用另外一个线程去跑 CPU 。多线程编程的难点在于由于同一个进程内部多个线程共享数据的情况存在,导致共享数据的同步控制变得比较难。
第2章 操作系统介绍
操作系统实际上做了什么:它取得 CPU、内存或磁盘等物理资源(resources),甚对它们进行虚拟化(virtualize)。它处理与并发(concurrency)有关的麻烦且棘手的问题。它持久地(persistently)存储文件,从而使它们长期安全。
一个最基本的目标,是建立一些抽象(abstraction),让系统方便和易于使用。抽象对我们在计算机科学中做的每件事都很有帮助。抽象使得编写一个大型程序成为可能,将其划分为小而且容易理解的部分,用 C这样的高级语言编写这样的程序不用考虑汇编,用汇编写现码不用考虑逻辑门,用逻辑门来构建处理器不用太多考虑晶管。抽象是如此重要,有时我们会忘记它的重要性,但在这里我们不会忘记。因此,在每一部分中,我们将讨论随着时间的推移而发展的一些主要抽象,为你提供一种思考操作系统的方法。
我们将讨论许多重要的主题,包括 CPU 和内存虚拟化的基础知识、以及设备和文件系统的持久性。