前言·

正如about页中所说,打算MIT的课或南京大学二选一,6.824(这是分布式的,记错了),6.828,但是感觉就太吃力了,本就抽象+英语概念名词,可能会因此失彼,于是选择南京大学jyy。

搜到了播放量高的2022,因为当时是线上直播,直接就是slides全屏

看到有2023的,就看最新的吧,目前唯一的可能缺点就是:教室录制,slides+黑板,那就一屏课,一屏slides/自己记的笔记

而slide的意思就是幻灯片,不仅包括ppt,也包括其他软件制作的幻灯片,如苹果系统中的keynote。

中间老师也会有一些英文穿插,但不影响学习

感觉这个老师真的是宝藏老师,纯粹,至少不是那种死气沉沉念PPT的,绝对认真备课了,那么自己听不懂就是自己的问题了,多听

23年课程的升级:

  • 更多代码课代码示例(model checker、xv6-riscv)
  • 尽量去除对《计算机系统基础》的依赖 self-contained,需要的前置基础或减少
  • 引入Jupyter + VSCODE取代vim(?)

前导课程基础要求:·

  • 数字逻辑电路(公理)/计算机系统基础 ||可以考虑下学完csapp再学操作系统(B站评论)
  • 读懂汇编代码
  • 对编程语言有一定的了解(例如:C,Py)

整个课程目录·

以下目录内容来自课件官方网站:操作系统:设计与实现 (2023 春季学期) (jyywiki.cn) 自行查看,故自己的博客可能也会分为绪论、并发、虚拟化、持久化的四个篇章,具体要看到时候的长度、重要程度划分

  1. 绪论 操作系统概述 | 应用视角的操作系统
  2. 绪论 硬件视角的操作系统 | 操作系统模型 | [M1] pstree | [L0] hello-os
  3. 并发 多处理器编程 | 并发控制基础 | [M2] plcs
  4. 并发 并发控制:互斥 | 调试理论与实践
  5. 并发 并发控制:同步 (1) | 并发控制:同步 (2) | [L1] pmm
  6. 并发 真实世界的并发编程 | 并发 Bugs (1)
  7. 并发 并发 Bugs (2) | 多处理器系统与中断 | [L2] kmt
  8. 虚拟化 操作系统上的进程 | Linux 操作系统
  9. 虚拟化 随堂期中测验 (闭卷笔试) | 进程的地址空间 (1) | [M3] sperf
  10. 虚拟化 操作系统实验生存指南 | 系统调用和 UNIX Shell
  11. 虚拟化 C 标准库和实现
  12. 虚拟化 可执行文件和加载 (1) | 可执行文件和加载 (2)
  13. 虚拟化 状态机模型的应用 | 操作系统内核实现 | [M4] crepl | [L3] uproc
  14. 持久化 存储设备原理 | 输入输出设备
  15. 持久化 设备驱动程序 | 文件系统 API | [M5] frecov
  16. 持久化 FAT 和 UNIX 文件系统 | 持久数据的可靠性

第一讲 操作系统概述:历史及学习建议·

why 在学习任何事物之前都要先思考为什么?·

作者借用微积分的例子,描述了微积分的发展历程、重要主题和自己在学习过程中由于只是刷题而造成的困惑,最后得出了:重走从无到有的发现历程,任何学科事物的学习是为了应用/创新,是因为学了A才能更好地学B,在A的基础上才能实现更多的东西(做题得分不是目的而是手段)

知道老师这个页面是Jupyter Notebook,不知道slides怎么做的,没好好听课,能复制,排版啥的也不错

中间借助给初高中生讲微积分的例子,利用z3、numpy 、sympy 形象地展示了微积分的一些性质,我也忘为什么要讲这个了,睡前听的

目的·

搞懂win窗口、线程;可能帮助实现:浏览器、编译器、杀毒软件、病毒等;后者也算是自己学习的目的之一(当然现在主要还是因为408有,希望能够更深入地理解操作系统)

what 什么是操作系统?·

作者关于定义的看法联想到了:《三傻大闹宝莱坞》

OSTEP 操作系统定义

1
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)

verilog根本没听过,不过只是用C和py实现了一下七段数码管,有意思,

甚至通过管道符| 引出了UNIX哲学

真牛,感觉53min的C语言程序编译过程(黑板)是老师设计好的

看着老师敲代码真爽,像是之前看y总一样

本课程所讨论的为狭义的操作系统(硬件软件中间层):对单机(多处理器)抽象,支撑多程序运行;而非讨论分布式系统等,更难

老师讲到1940s的计算机硬件,存储器:延迟线,举了抛球的例子,感觉挺有意思,可惜自己没什么计组的知识基础

一直都感觉那个年代,愿意砸那么多钱去搞笨重(以吨为单位)、算力不高的计算机,真的是件伟大的事

*编程一行80字符以内,源于纸带

多用户轮流共享计算机,operator负责调度

由此引出操作系统的概念:操作(operate)任务(jobs)的系统(system)

批处理系统=程序的自动切换+库函数API

Disk Operating Systems(DOS)

更快、更大的内存引出了虚拟存储

WOW,最后甚至能够做出一个迷你操作系统

HOW 怎么学操作系统·

在学习到新知识的时候应该感到很快乐

Education is not the filling of a pail,but the lighting of a fire.

参考教科书:Operating Systems: Three Easy Pieces (wisc.edu)

作者说在知道这本书的时候已经不需要它了,所以走了很多弯路

老师举的很多例子,到现在依然适用,烂教材之类的

问题驱动,靠学习代码

RTFM, STFW, RTFSC (F can be a colorful word)

haha,colorful word

机器永远是对的,我肯定能调出来的

如果学起来有困难,不建议"架空学习",回头补基础

这个确实跟自己想的不一样,具体情况具体分析

例如这门课听着吃力,去看CSAPP,再看不懂,补一下C语言基础

老师举了很多国外书籍和链接(知乎/北大CS自学指南),可见老师对于计算机教学真的很用心、热爱,紧跟潮流

写代码=创造有趣的世界

  • 不需要讲语言特性、设计模式、……
    • 编就对了;你自然而然会需要它们的

确实,先学,Get Your Hands Dirty,很多问题会自然而然地出现,然后再去寻找专业的方式解决它们

掌握 “提出问题” 的能力,就能极快地提升自己。同时,这可能将在 AI 时代被颠覆——AI 可能会猜测你的目的,并且告诉你 “应该去做什么”。

以下为复制官网内容,太纯粹了,让直接复制,感觉自己Typora里的排版不如人家官网里的,Typora字太稀了:

课后习题/编程作业·

1. 阅读材料·

教科书 Operating Systems: Three Easy Pieces:

  • Preface 前言
  • 第 1 章 - Dialogue on the Book
  • 第 2 章 - Introduction to Operating Systems

延伸阅读:

2. 浏览课程网站·

浏览课程网站内容,包括:

  • 首页上的信息
  • 课程概述
  • 参考书与参考资料
  • 生存指南

3. 配置编程环境·

  • 准备好一个可用的 Linux 系统。这个系统将伴随你完成整个《操作系统》课程。可能的方案有:
    • 物理机直接安装的 Linux
    • Windows Subsystem for Linux (应用商店安装 Ubuntu),通过 ssh 登陆
    • VirtualBox 安装的 Linux 虚拟机,通过 ssh 登陆
    • 网络上购买的 Linux 虚拟主机,通过 ssh 登陆
  • 在 Linux 系统中安装必要的软件,包括编译器、git、编辑器、ssh server 等
  • 确保你可以在这个环境中编辑、编译和调试 C/C++ 代码

4. 熟悉基础命令行工具·

熟悉一些典型的 Linux 的命令行工具:

  • 查找文档的工具,例如 tldr 和 man
  • UNIX 系统管理的基础工具,请 STFW
  • 在命令行使用 gcc 编译、运行一个 C 程序,阅读 gcc --help 的帮助信息了解 gcc 支持的主要功能
  • GNU Make - 本课程使用 GNU Make 构建项目。我们避免了 CMake 这些在实际项目中很常用,但会导致非常冗长 (也难以理解) 流程的工具
  • Git - 本课程所有代码都用 Git 管理;虽然严格意义说你不需要知道 Git 是如何工作的,但学会使用它会对你今后的职业生涯很有帮助

用每一个工具都完成一个基本的功能,并在你愿意的时候读一读 Tutorial 和手册 (我们强烈推荐你收藏上面这些工具的官方文档,并且在你空闲的时候读一读)。此外,在互联网上找到好的 tutorial 会极大幅地提高你的效率;同时你也可以开始尝试定制你的工具 (例如课堂上的 fish 和 tmux 行为就与默认配置有一定区别)。我们为大家提供了一些参考资料,其中有一些你用得上的线索,例如 The Art of Command Line

此外,现在已经是 2023 年了。我们也有两条新的建议:

  • 如果你希望完成一件事但却不知道怎么做,你可以问搜索引擎 (通常会得到 StackOverflow 上的答案),或是直接问 ChatGPT!不过要小心,人工智能现在还经常一本正经胡说八道。
  • 传统工具的缺点也不断在被改进。特别值得推荐的是 Modern Unix,列出了经典工具的现代替代;但这门课中我们仍然介绍经典工具为主——它们更稳定且具有更好的 “portability”:在你见到的几乎任何平台都可以使用。

5. 编程实践·

在你的 Linux 中运行课堂上的代码示例。

感觉工程量很大呵

把上面提到的阅读材料看一下,linux尝试一些命令,C编译,再学下一节吧,先准备数学考试

OSTEP读书笔记·

Operating Systems: Three Easy Pieces ||还有CSAPP,北大的CSwiki,自己也都知道了解,现在都串起来了就很神奇,可惜都是只浮皮潦草地看了个前几页(北大地wiki真的可惜了,如果想成为大佬的话,真的应该跟着学)

virtualization, concurrency, and persistence

https://pic4.zhimg.com/v2-522ded6304485cdac723f25d03c012dd_1200x500.jpg

原来书名是这个意思啊!OS的三座大山

呜,自己之前搜OS的课的时候看到过这本书,现在唯一的印象就是:Confucius,在single.dvi (wisc.edu) 的DIALOGUE章节中

’I hear and I forget. I see and I remember. I do and I understand.’


第二讲 应用视角的操作系统 (程序的状态机模型;编译优化)·

学会提出正确的问题

感觉老师在最后生成汇编程序的时候真的很兴奋、很开心,哈哈

前20多分钟,关于C的编译半懂半不懂