背景回顾:在理解了 “软件 (应用)” 和 “硬件 (计算机)” 之后,操作系统就是直接运行在计算机硬件上的程序,它提供了应用程序执行的支撑和一组 API (系统调用):操作系统内核被加载后,拥有完整计算机的控制权限,包括中断和 I/O 设备,因此可以构造出多个应用程序同时执行的 “假象”。
本讲内容:一个 Python “操作系统玩具” 的设计与实现,帮助大家在更高的 “抽象层次” 上理解操作系统的行为。这个 “玩具” 将贯穿整个课程。
没错,计算机科学和数学的发展速度可能超过大家的想象——我们有被 “证明正确” 的 编译器、操作系统内核;大家也可以阅读科普文章:
Formal verification doesn’t result in perfect code; it simply narrows the possibility for errors and vulnerabilities to creep in,” Parno says. “What makes the technique so attractive is that you push the uncertainty or scope of problems down to smaller and smaller windows.
同时,proof assistant 也是人工智能时代堪称完美的辅助工具:如果我们要信任 AI 产生的结果,就让它们给出一个 proof assistant 认可的证明吧!
下面是我们绘制一个 “Hello World” 状态空间的例子。Hello 会调用一个有趣的系统调用 fork,它的行为是复制状态机的当前状态:
我们将会在这个学期的时间里,仔细分析模型和真实操作系统 (Linux) 系统调用的行为,并用它们实现很多有趣的程序。
程序就是状态机;状态机可以用程序表示。因此:
阅读 30 行简易操作系统模型的代码。你可以试着调试它,观察 generator 是如何实现状态机的切换的。作为类比,在现代分时操作系统中,状态机的隔离 (通过虚拟存储系统) 和切换是一项基础性的基础,也是操作系统最有趣的一小部分代码:在中断或是 trap 指令后,通常由一段汇编代码将当前状态机 (执行流) 的寄存器保存到内存中,完成状态的 “封存”。如果你感到 Mosaic 比较困难,完全可以忽略它 (或者,可以等课程结束后回来)。
开始课程实验:课程实验在在课程网站上发布。实验有一定难度,同时也有实验指导,请大家仔细阅读。