每个学校都要开《操作系统》课……
长辈/学长:擦干泪不要问为什么
快速过完学习 “操作系统” 之前你应该掌握的知识
快速过完 “操作系统” 课程的全部内容
所有课程信息都在课程主页发布 & RTFM。
成绩构成
不要求到课 (把时间花在更有效的地方)
准备好 Linux 环境
在不违背 academic integrity 的前提下寻求帮助
努力成为卷王的临时工✖️ (计算机软件研究所✔)
Co-Founder of Project-N
JSOI/南京大学 ICPC 集训队教练
主要问题是...充满热情而且相当聪明的学生...仍然保持他们的兴趣...早就听说过物理学如何有趣、如何引人入胜...相对论、量子力学...
但是,当他们学完两年我们以前的那种课程后,许多人就泄气了...很少有意义重大的、新颖的和现代的观念...学的还是斜面、静电及诸如此类的内容...
——《The Feynman Lectures on Physics》
我学《操作系统》的时候 (2009)
我们生活在一个好的时代
操作系统课给你想要的全部
课程的逻辑组织获得了成功
Online Judge + 抓抄袭获得了成功
上次直播了一个学期……但对着屏幕直播根本就是灾难
能管理一定规模 (数千到数万行) 的代码。
懂得在程序不正确运行时默念一遍 “机器永远是对的” 然后开始用正确的工具/方法调试。
上学期经过的训练就足够了
如果你在上课时感到异常吃力
具有二进制代码的基本知识。
工具使用
会 STFW/RTFM 自己动手解决问题。
不需要多么熟练
Operating System: A body of software, in fact, that is responsible for making it easy to run programs (even allowing you to seemingly run many at the same time), allowing programs to share memory, enabling programs to interact with devices, and other fun stuff like that. (OSTEP)
很多疑点
本次课程的 three easy pieces
操作系统不是忽然成为现在这个样子的
跨时代、非凡的天才设计,但很简单 (还不如我们数电实验课做的 CPU 复杂呢):
实现:
ENIAC 程序是用物理线路 “hard-wire” 的
最早成功运行的一系列程序:打印平方数、素数表、计算弹道……
不需要也没有操作系统。
操作系统的目标是 “支持程序的运行”
更快更小的逻辑门 (晶体管)、更大的内存 (磁芯)、丰富的 I/O 设备
可以执行更复杂的任务,包括通用的计算任务
Fortran 诞生 (1957)
管理多个程序依次排队运行的库函数和调度器。
1950s 出现了
Disk Operating Systems (DOS)
集成电路、总线出现
更多的高级语言和编译器出现
计算机科学家们已经在今天难以想象的计算力下开发惊奇的程序
能载入多个程序到内存且灵活调度它们的管理程序,包括给程序提供编程接口。
因为计算资源的增加,有了
操作系统中增加了 “进程” 对象和进程管理 API
既然操作系统已经可以在程序之间
切换 ,为什么不让它们定时切换 呢?
基于中断 (例如时钟) 机制
集成电路空前发展,个人电脑兴起,“计算机” 已与今日无大异
PASCAL (1970), C (1972), …
分时系统走向成熟,UNIX 诞生并走向完善,奠定了现代操作系统的形态。
通过 “虚拟化” 硬件资源为程序运行提供服务的软件。
空前复杂的系统之一
在这门课中,我们会讲解其中最重要的三个头绪
OSTEP:目前世界上最好的操作系统教材之一
顺序调整后的 operating systems: three easy pieces
操作系统设计 (应用视角/设计)
操作系统实现 (硬件视角/实现)
无所谓听不听课看不看书,独立完成编程作业即可理解操作系统。
应用视角 (设计):Mini Labs x 6
硬件视角 (实现):OS Labs x 5
本学期采用在线评测
严格要求大家
-Wall -Werror
编译出错int x = (int)&y;
fopen("/home/jyy/a.txt", "r")
本次课内容与目标
Take-away message