前言:南大操作系统课程是蒋岩炎老师主讲,他在B站公开了课程,讲的非常强。在B站搜南京大学计算机操作系统就可找到。
P1: 操作系统概述 (操作系统的历史;学习建议)
1. (Why): 为什么要学操作系统?
重走从无到有的发现过程
- 基本思想、基本方法、里程碑、走过的弯路
- 最终目的:应用/创新
- 操作系统带你补完编程的技术体系
- 具有编写一切 “能写出来” 程序的能力 (具备阅读论文的能力)
2. (What): 到底什么是操作系统?
1 | Operating System: A body of software, in fact, that is responsible for making it |
理解操作系统:
理解硬件(计算机)和软件(程序)的发展历史, 夹在中间的就是操作系统
- 1950s的操作系统
- 操作(operate)任务(jobs)的系统(system)
- 批处理系统 = 程序自动切换+库函数API
- Disk Operating System(DOS)
- 操作系统开始出现设备,文件,任务等对象和API
今天的操作系统
- 通过虚拟化硬件资源为程序运行提供服务的软件。
3. (How): 怎么学操作系统?
学习操作系统:现代方法
- 读得懂的教科书和阅读材料
- 问题驱动,用代码说话
- Demo 小程序,各类系统工具(strace, gdb,…)的使用
- xv6-risv, AbstractMachine
- RTFM, STFW,, RTFSC(F can be a colorful word)
4. Prerequisites
计算机专业学生必须具备的核心素质。
- 是一个合格的操作系统用户
- 会 STFW/RTFM 自己动手解决问题
- 不怕使用任何命令行工具
- vim, tmux, grep, gcc, binutils, …
- 不怕写代码
- 能管理一定规模 (数千行) 的代码
- 能在出 bug 时默念 “机器永远是对的、我肯定能调出来的”
- 然后开始用正确的工具/方法调试
5. 学术诚信 (Academic Integrity)
Academic integrity 不是底线,而是 “自发的要求”
- 对 “不应该做的事情” 有清楚的认识
- 不将代码上传到互联网
- 主动不参考别人完成的实验代码
- 不使用他人测试用例 (depends)
- 有些行为可能使你得到分数,但失去应有的训练
一些过去的例子
- 代码抄袭:那些让985学生沉默,211学生流泪的真相
- 我们也在 Academic Integrity 方面有一些考虑
6. 成为 Power User
感到 Linux/PowerShell/… 很难用?
- 没有建立信心、没有理解基本逻辑
- 计算机科学自学指南
- 没有找对材料/没有多问 “能不能再做点什么”
- Baidu v.s. Google/Github/SO v.s. ChatGPT
- 没有用对工具 (man v.s. tldr; 该用 IDE 就别 Vim)
- 过了入门阶段,都会好起来
- 本章代码请参考github: 操作系统-南大-part_01
P2: 应用视角的操作系统 (程序的状态机模型;编译优化)
本讲内容:指令序列和高级语言的状态机模型;回答以下问题:
- 什么是软件 (程序)?
- 如何在操作系统上构造最小/一般/图形界面应用程序?
- 什么是编译器?编译器把一段程序翻译成什么样的指令序列才算 “正确”?