Skip to content

操作系统

操作系统有一个基本问题:

多个可能出错、也可能不可信的程序,怎样共同使用一台计算机?

考虑一个普通的文件处理程序:

bash
./worker input.txt output.txt

即使只执行这一条命令,系统也需要回答:

  • 程序文件 worker 如何变成正在运行的程序?
  • 为什么不同程序都能使用自己的变量、堆和栈,而不会互相覆盖?
  • 多个程序如何同时运行?
  • 文件系统如何从存储细节抽象出文件树?
  • 程序发生错误或恶意操作时,怎样限制它影响其他程序?

操作系统就是这样建立在硬件之上,为用户提供统一编程界面的系统。

本讲义以 xv6/RISC-V 为机制主线:先沿短小的源码闭合一条执行路径,再用 Linux、x86-64 和现代设备解释生产系统新增的约束。容器、NVMe、虚拟机和 eBPF 等 xv6 未实现的主题,则在已经建立的进程、内存、设备和文件系统模型上继续扩展。

参考