吃透操作系统
我们开发的软件并不能直接去控制硬件资源,需要找一个代理人/媒介去管理硬件资源和软件的交互,就像一个资源管理器(resource collector),这就是操作系统存在的意义。当我们按下开机键后,位于电脑主板上的固件 ROM 中的启动程序(Boot Loader)会运行,启动程序会加载操作系统的启动程序,进而把整个操作系统加载到内存中并开始执行操作系统。
操作系统也是一种软件,但是操作系统是一种非常复杂的软件。
操作系统提供了几种抽象模型:
文件:对 I/O 设备的抽象 | 虚拟内存:对程序存储器的抽象
进程:对一个正在运行程序的抽象 | 虚拟机:对整个操作系统的抽象
操作系统课程包含的主要内容:
- 操作系统运行时(程序中断、定时器)
- CPU 调度
- 进程(同步、互斥)、线程、管程(Monitor)
- 存储管理
- 文件系统
- I/O 输入
- 死锁
- 信号量编程
读书、看视频课程都可以加深对操作系统的了解,经典书籍:
不过我们也可以学习一些跟得上时代的内容:
推荐课程 #1:MIT 6.S081: Operating System Engineering
MIT PDOS 实验室开设的面向本科生的操作系统课程,注重动手能力培养,让你在基于 RISC-V 开发的操作系统 xv6 之上增加新特性,深刻理解操作系统的每一部分。
推荐课程 #2:rCoreOS 清华大学的操作系统课程
清华大学是国内首个使用 Rust 进行操作系统教学的高校。目前,陈渝教授和他的学生吴一凡正在编写新的操作系统教材。
这本教程旨在一步一步展示如何 从零开始 用 Rust 语言写一个基于 RISC-V 架构的 类 Unix 内核 。值得注意的是,本项目不仅支持模拟器环境(如 Qemu/terminus 等),还支持在真实硬件平台 Kendryte K210 上运行。
rust 社区也有一个重写操作系统的小项目,可以和这个项目做个对比参照:Writing an OS in Rust,基于 x86架构(the x86 architecture),使用 Rust 语言,编写一个最小化的 64 位内核。
推荐课程 #3: 南京大学计算机系统基础
课程的项目 (Programming Assignment)
理解"程序如何在计算机上运行"的根本途径是从"零"开始实现一个完整的计算机系统. PA 将提出 x86/mips32/riscv32 架构相应的教学版子集, 指导学生实现一个经过简化但功能完备的 x86/mips32/riscv32 模拟器NEMU(NJU EMUlator), 最终在NEMU上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理.
学习自己动手构建一个操作系统,会让你对操作系统有全新的理解。