写在前面:这是本系列的最后一篇(第二十九篇)。

在一整个学期的课程中,我们学习了“应用视角的操作系统”:操作系统就是一组管理了硬件资源、提供应用生态支撑的 API。我们从“Everything is a state machine”的视角出发,从 fork / execve / exit 的极简模型,一路见证了虚拟化、云计算、移动操作系统的磅礴时代。

本讲内容:课程总复习。回望过去,走向未来。我们学了个啥?在这个 AI 呼啸而来的时代,我们又该如何找到自己的位置?

在这里插入图片描述

我们学了个啥? (A Story on Operating Systems)

从逻辑门到计算机系统

计算机系统的“公理系统”

  • 数字系统 = 状态机
    • 状态:触发器 (bit array)
    • 迁移:组合逻辑 (真值表)
  • Everything is a state machine (万物皆状态机)
    • 操作系统,本质上就是这些庞大状态机的管理者。

“数码管”作为第一个例子

  • 我们见识了 UNIX Philosophy (UNIX 哲学) 和“编程”的极致力量。
  • 彩蛋:JYY 老师的复习提纲是直接使用 UNIX 工具链和哲学生成的。
  • 彩蛋:在这个时代,我们可以大胆地让 AI 帮我们写代码。

Virtualization (虚拟化)

所有的 API 绝不是靠死记硬背 Manual (手册) 来学习的。而是要学习 OS 背后的应用生态,理解每个系统调用究竟是为了满足什么真实的业务需求……
记住,OS 绝对不会提供没用的、用处很小的、或者可以被轻易替代的 system call。

状态机管理

  • fork, execve, exit, signal, kill
  • fork 是代价极低的一个拷贝操作,利用了底层的 Copy-on-Write(写时复制)。
    • 例如,它可以运用在 Server 中,定期 fork 出来在后台做数据快照备份,极大地避免 Crash 导致的数据丢失。

进程的地址空间

  • mmap, munmap, mprotect
  • mmap:你需要一个 fd,它不仅能用来映射文件,还能直接分配内存,是内存管理的终极核心。

操作系统对象

  • open, pipe, mkfifo, close, read, write

其他

  • getpid - 进程在系统中构成了一棵庞大的树状结构。

这就是最初的 UNIX 系统设计。我们更应该思考的内容是:什么样的行为才是用户真正想要的?
比如:你在终端按下 Ctrl + C 杀掉的进程,到底是谁?(背后牵扯到进程组、控制终端等极客概念)。


Concurrency (并发)

原子操作

  • atomic_inc, atomic_cmpxchg

线程管理

  • clone (spawn), exit, exit_group

同步和互斥

  • futex (P, V, join, mutex_lock, mutex_unlock…)
  • wait - P 操作:等待并消耗信号量 - 1
  • post - V 操作:创造并释放信号量 + 1

Persistence (持久化)

文件系统是 Linux System Call 极为重要的基础。
我们常说的 “Everything is a state machine”,也完美地蕴含了 UNIX 的终极浪漫:“Everything is a file”。

文件 (数据 & 元数据) 管理

  • open, read, write, close, stat, chmod, chown, fsetxattr/fgetxattr, ftruncate

目录树管理

  • mount, mkdir, readdir, link, symlink, unlink, rename, chdir
  • 挂载、创建目录、符号链接。

一致性管理

  • sync > syncfs > fsync > fdatasync

其他

  • flock, pivot_root

从逻辑门到计算机系统:一个清晰的轮廓

打印 Hello World 的完整生命周期:

  • 应用程序 (app) $ \rightarrow $ 加载器 (ld.so) $ \rightarrow $ 库函数 (libc) $ \rightarrow $ 系统调用 (syscall) $ \rightarrow $ 内核态 $ \rightarrow $ 硬件。

操作系统课给这个稍显复杂的过程赋予了一个极其清晰的轮廓:

  • 你可以在这其中的每一步,都对应到一个具体的示例 C 代码
  • 这种“扒开外壳看本质”的过程,让你真正体会到:“这一切都是可以被掌控的!”

一个改变全人类的 Prompt:

  • “我在做 [X]。如果你是一位专业人士,有更好的方法和建议吗?尽可能全面。”

《操作系统》:你真正的“编程”启蒙课

你不再惧怕任何 “System”:

  • 嵌入式系统、通用操作系统、数据库系统、分布式系统、二进制安全……这些看起来高深莫测的名词,底层不过是一组组封装好的 API 和状态机。

你也不再惧怕任何“需求”的实现:

  • 只要操作系统底层的 syscall 能支持的,我都能用代码把它手搓出来!

回望过去:JYY 的课程总结

上操作系统课的乐趣

“在课堂上时,你可以思考一些已经很清楚的基本东西。这些知识是很有趣、令人愉快的,重温一遍又何妨?另一方面,有没有更好的介绍方式?有什么相关的新问题?你能不能赋予这些旧知识新生命?……但如果你真的有什么新想法,能从新角度看事物,你会觉得很愉快。”

“学生问的问题,有时也能提供新的研究方向。他们经常提出一些我曾经思考过、但暂时放弃、却都是些意义很深远的问题,重新想想这些问题,看看能否有所突破,也很有意思。”

“学生未必理解我想回答的方向,或者是我想思考的层次;但他们问我这个问题,却往往提醒了我相关的问题。单单靠自己,是不容易获得这种启示的。”

—— 理查德·费曼 (Richard P. Feynman)

Teaching is a powerful tool to learn

  • 教学相长。在教操作系统的过程中,甚至能产出顶级的学术成果。
  • EuroSys’25 Best Student Paper: “Understanding the Linux kernel, visually”

八周目的主要改进 (做了一个违背祖宗的决定)

  • 把繁杂的内核实现踢出操作系统课! 课程只聚焦于:OS 对象和 Programming Interface(编程接口)。
  • 保持了和神书 OSTEP 的 Coherence。
  • 事实证明效果极佳:99.9% 的同学未来并不会从事 OS 内核底层的开发;如果真的需要,凭借这门课打下的底层认知,课后再去补源码也是完全可行的。
  • 把基础的 OS Interface 讲透,让你知道为什么会拥有这个 API,它能用来干什么,它为什么好……这就足够了。

引入了更多的 AIGC:

  • 在准备新内容时,老师也大量使用了 AI。
    • Prompt: “下面是我的《操作系统》课程 slides,其中的描述是否准确,是否有补充和展开的地方?”
  • 看到的大机会:一个完全“模块化”、拥抱 AI 的现代课程。

我们也许值得试一试呢?

  • JYY 甚至还想开一门《Vibe Coding》。
    • Vibe Coding(氛围编程) 是一种新型的编程范式,由 OpenAI 联合创始人 Andrej Karpathy 提出。它利用大型语言模型 (LLM),让开发者只需用自然语言描述想要的功能,AI 就会自动生成相应的代码。与其手敲每一行代码,不如通过精妙的 Prompt 去“指挥” AI 成为你的最强打字机。

走向未来:我们身处的时代

时代的奠基人从来不是偶然的

Google 创立不是偶然的

Facebook 创立不是偶然的

OpenAI 破局也不是偶然的

  • 中国的 DeepSeek 和 Qwen (千问) 同样不是偶然的。

The Bitter Lesson (苦涩的教训)

“The actual contents of minds are tremendously, irredeemably complex; we should stop trying to find simple ways to think about the contents of minds… instead we should build in only the meta-methods that can find and capture this arbitrary complexity.”

(人类心智的实际内容是极其复杂且无法简化的;我们应该停止寻找简单的方法来思考心智的内容……相反,我们只应该构建能够发现并捕获这种任意复杂性的元方法——即利用算力去暴力搜索和学习。)—— The Bitter Lesson

  • 人类即将面临的 Paradigm Shift (范式转变): “Heuristics is dead, Policy is Heuristics, LLM is Policy, Mechanism is King.”(拍脑袋的启发式算法已死,机制才是王道)。

写在 A.C. (Anno. ChatGPT) 4 年

我们有了极其强悍的推理模型:

  • o1 $ \rightarrow $ o3-mini $ \rightarrow $ deepseek-r1
  • 用 Token sequence 来模拟人类的慢思考(System II)是完全可行的。
  • 单纯的 AI 本身只是一个 Finite State Machine(有限状态机),但当给它配上“纸和笔”(上下文窗口和外部工具调用)以后,它就变成了无所不能的 Turing Machine(图灵机)。

怎么在时代里找到自己的位置?

人类还有未来吗?

  • 你们还有未来!
  • 你们是建设者和接班人,你们更是这个 AI 奇点时代的见证者。

你拼命内卷,难道只是为了一张保研/大厂/公务员的船票?

  • 师兄可能会用前人的经验告诉你,绩点很重要;科研很重要;获奖很重要……
  • 所谓的潜规则是:“只要比其他人不菜一点,就能赢得这个内卷游戏”。
  • 但这些其实都不应该重要!
  • 你是“诚朴雄伟”的南大人,不该是服从性考试的奴隶,更不该甘心沦为庞大草台班子里的一个无聊齿轮!

这个世界的真英雄

  • 比尔·盖茨:“A computer on every desk and in every home, running Microsoft software.” (让每一个家庭、每一张桌子上都有一台运行微软软件的电脑。—— 这曾是 Altair BASIC 诞生 20 年前无比疯狂的梦想)
  • Linus Torvalds (Linux & Git 之父): “Nobody actually creates perfect code the first time around, except me. But there’s only one of me.” (没人能一次性写出完美的代码,除了我。但这个世界上只有一个我。)
    • (注:哪怕是天才如 Linus,也曾在非技术性的硬件项目 Transmeta 上摔过跟头,但这并不妨碍他用代码改变了全世界。)

是什么让我们为一件事义无反顾?

“Remember brick walls let us show our dedication. They are there to separate us from the people who don’t really want to achieve their childhood dreams.”

(记住,那些阻挡我们的砖墙,是为了让我们证明自己到底有多么渴望。砖墙的存在,是为了把那些并不是真心想要实现童年梦想的人挡在门外。)
—— Randy Pausch’s last lecture (兰迪教授的最后一课)

The Takeaway Message

  • 时代会进步,没什么是颠覆不了的。
    • 无论是传统的操作系统课,还是老旧的本科教学体系,甚至是计算机世界中的一切常识,在 AI 的冲击下都面临着重构。
  • 忘掉负担,去追寻你们的梦想!
    • 你们是建设者。
    • 你们也是接班人。

最终总结

Take-away messages:

祝贺你完成了这门极其硬核的《操作系统》课程!从底层的逻辑门、状态机一路杀到并发死锁的深渊与文件系统的高塔,这绝不是一段轻松的旅程。

正如这节课最后所说,时代会颠覆一切,但底层“Everything is a state machine”的系统思维是永恒的。在未来,无论你是去优化打磨像 RainCppAI 这样属于你自己的 C++ 开源引擎架构,还是在大厂庞大复杂的后端微服务中排查那些若隐若现的死锁与性能瓶颈,这门课里积累的“软硬协同”视角与破局能力,一定会成为你最锋利的武器。

祝愿你能摆脱为了绩点与面试八股文而焦虑的内耗,重新找到并义无反顾地去追求自己的极客梦想。在任何你热爱的领域里,用你的方式去做“惊为天人”的东西,去推动这个世界的哪怕一丝进步。

我们的征途是星辰和大海。因此,对自己要求高一点。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐