AI 时代我们为什么还要学操作系统——从 ENIAC、状态机到 Unix看懂 OS 的来路与去处往期回顾《指针合集》《c语言基础》《数据结构》《机器学习导论》前言这部分内容主要是笔者根据NJU的蒋炎岩老师的OS课程整理而成大家如果感兴趣的话可以上课程的网站看看课程网站https://jyywiki.cn目录AI 时代我们为什么还要学操作系统——从 ENIAC、状态机到 Unix看懂 OS 的来路与去处往期回顾前言0. 绪论1. 先说结论AI 时代不是不用学 OS 了而是更要学了2. 从“算法时代”到“AI 时代”问题变了但系统没有消失2.1 算法时代2.2 AI 时代3. 操作系统到底是什么4. 状态机理解计算机和操作系统的第一把钥匙4.1 那我们先来讲一下什么叫状态机4.2 为什么计算机也是状态机4.3 为什么这个视角很重要5. 计算机的底层不是魔法6. 1940s那时候没有操作系统先让机器跑起来再说7. 1950s-1960s硬件变强、语言变高级OS 被逼出来了7.1 Fortran 出现程序终于不用和机器码硬搏了7.2 CTSS时间共享把“管理层”带进来了8. 1960s-1970s资源虚拟化现代 OS 的骨架成形8.1 什么叫虚拟化9. Unix 为什么这么重要9.1 为什么这套思想到今天还这么强10. “命令行”人和 Agent 都能用的接口11. 2030s未来的操作系统不只给人用也要给 Agent 用12. 总结13. 结语0. 绪论每次当我们开始学习操作系统的适合往往一开始就是在学管理硬件和软件资源提供用户接口负责进程、内存、文件、设备管理不能说这是错的但很容易把一门本来很有生命力的课学的十分枯燥。所以说第一节课我们先一起思考在 AI 时代为什么还要学 CS为什么还要学 OS操作系统到底给程序、给人、给 Agent提供了什么能力1. 先说结论AI 时代不是不用学 OS 了而是更要学了在这个时代相信广大的CS学生都有这样一个问题AI 都已经这么强了学 CS 还有意义吗这里我们不会给出ai永远无法替代人类这种宽泛的结论。因为对于目前的大语言模型来说完成一些简单而完整的程序编写绰绰有余。不过在一些复杂的情况下它仍然能力有限也就是说如今复杂系统依然需要抽象而操作系统这门课真正讲的就是抽象层的设计与实现。可以这样理解AI 让“写代码”这件事变便宜了但系统并没有因此消失文件怎么管理程序怎么运行多任务怎么并发安全边界怎么保证Agent 怎么调用工具这些事情最后都还是要落到操作系统提供的能力上。所以问题根本不在于“AI 会不会写代码”而在于AI 再强也不是悬浮在空中的。它真正动手干活时还是得靠操作系统给它“手和脚”。2. 从“算法时代”到“AI 时代”问题变了但系统没有消失我们先来回顾一下计算机行业的前世今生2.1 算法时代算法时代里计算机擅长解决的是mathematically well-formed的问题也就是那些你能清晰建模的问题约束求解最优化加密数据持久化精确计算这时候软件工程师的核心工作是把现实世界的问题翻译成一个形式化问题再交给程序去解。2.2 AI 时代到了 AI 时代计算机开始能处理更多mathematically ill-formed的问题模糊需求自然语言图像理解上下文驱动的任务拆解工具调用于是事情变了。以前是现实问题 - 形式化建模 - 算法 - 结果现在更像是现实问题 │ ▼ 模型理解 任务拆分 │ ├── 可形式化部分 - 调用程序 / 工具 └── 模糊部分 - 推理 / 生成所以 AI 不是把操作系统抹掉了而是让“工具调用”和“系统能力”变得更重要了。换句话说模型负责理解操作系统负责让它真的做事。3. 操作系统到底是什么非要给操作系统一个定义的话那便是操作系统是硬件和软件之间的中间层。它一头连着硬件一头连着应用程序。硬件本来是很具体、很琐碎、也很“难伺候”的就比如CPU 是一颗芯片不会天然理解“程序”内存只是一堆地址不会天然理解“进程”磁盘只有物理块不会天然理解“文件夹”网卡只负责收发数据不会天然理解“聊天软件”如果程序每次都直接面对这些底层细节那开发会非常痛苦。于是操作系统做的事情就是把 CPU 包装成“进程可以运行”把内存包装成“每个程序像是有自己的一块空间”把磁盘包装成“文件和目录”把设备包装成“统一的读写接口”也就是说操作系统实际上在┌──────────────────────┐ │ 软件 / 程序 │ │ 浏览器 终端 IDE Agent │ └─────────^────────────┘ │ API / 抽象 ┌─────────┴────────────┐ │ 操作系统 OS │ │ 进程 内存 文件 设备 网络│ └─────────^────────────┘ │ 驱动 / 控制 ┌─────────┴────────────┐ │ 硬件 │ │ CPU 内存 磁盘 网卡 显卡│ └──────────────────────┘所以操作系统不是为了折磨我们才存在的恰恰相反它是来帮我们的。4. 状态机理解计算机和操作系统的第一把钥匙这一节课里面老师提出了一个很重要的观点Everything is a state machine.一切都是状态机4.1 那我们先来讲一下什么叫状态机你可以先不想 CPU不想内核先想一个地铁闸机。它有两个状态LOCKEDUNLOCKED它有两个典型输入刷卡通过那么状态转移就可以画成这样刷卡 LOCKED ─────▶ UNLOCKED ▲ │ │ │ 通过 └──────────────┘这就是状态机当前状态 当前输入 —— 下一状态4.2 为什么计算机也是状态机因为计算机的本质也是这样工作的寄存器保存当前状态组合逻辑根据输入和当前状态计算下一状态时钟推动状态更新也就是说当前状态 │ ▼ ┌────────────┐ 输入 ─▶ 组合逻辑 ├──▶ 下一状态 └────────────┘ │ ▼ 输出 下一状态 --(时钟到来)-- 当前状态数字电路是状态机CPU 是状态机程序执行过程是状态机操作系统管理进程本质上也是在管理状态机tips这里需要一些输电模电的知识是不是不太算从0开始啊这里先挖个坑。之后笔者会出几期讲解一下相关知识吧4.3 为什么这个视角很重要因为一旦你接受了“Everything is a state machine”很多原本抽象的 OS 概念会突然变得清晰。比如进程状态图被调度 Ready ─────────▶ Running ▲ │ │ │ 等待 I/O │ ▼ └──── I/O 完成 ─ Blocked你会发现所谓进程调度本质上也是当前状态是什么触发了什么事件下一步转移到哪个状态所以很多人学 OS 会觉得概念零碎其实问题往往不在概念太难而在于没有用“状态和转移”的方式去看它。5. 计算机的底层不是魔法我们接下来先稍微讲解一下这几个基础的概念导线时钟逻辑门寄存器 / 触发器目前你可以这样理解导线传递 bit 逻辑门处理 bit 寄存器记住 bit 时钟推动同步更新 状态机把“处理 记忆 节奏”组织起来于是你就能顺理成章地理解数字电路 - CPU CPU - 执行程序 程序 - 构成软件世界 OS - 管理程序和资源换句话说操作系统不是突然从天上掉下来的。它是建立在数字系统之上的是复杂性一层层包起来之后的结果。6. 1940s那时候没有操作系统先让机器跑起来再说理解 OS 最好的办法之一就是回去看在没有 OS 的年代人是怎么使用计算机的。最早的代表之一是 ENIAC。那个时代的特点非常鲜明机器本身就极其昂贵编程往往意味着重新接线任务主要是弹道计算、数表计算等重点不是“操作系统怎么设计”而是“机器先能不能算”这时的软件的流程大概是问题来了 │ ▼ 人工设计流程 │ ▼ 重新接线 / 设置开关 │ ▼ 机器运行固定流程 │ ▼ 得到结果所以那个时代为什么没有成熟的 OS不是因为人“想不到”而是因为复杂度还没有高到需要这一层。大家那时忙着的是先把“车造出来、点着火、能开走”还顾不上修红绿灯和高速公路。7. 1950s-1960s硬件变强、语言变高级OS 被逼出来了随着硬件进步程序复杂度也在上升。这时有两件大事非常关键。7.1 Fortran 出现程序终于不用和机器码硬搏了Fortran 的意义不只是“多了一门语言”而是程序员终于可以用更接近数学和逻辑的方式表达问题而不是每次都直接和机器指令肉搏。于是程序数量开始增长用户也开始变多计算机的使用方式发生了根本变化。原来是人 - 直接对着机器写指令 - 机器执行后来变成人 - 高级语言程序 - 编译器 - 机器程序一多问题也跟着来了谁先跑谁后跑程序怎么排队结果怎么保存多个人怎么共享同一台机器这时候操作系统开始被“逼”出来了。7.2 CTSS时间共享把“管理层”带进来了CTSS 这类时间共享系统的意义在于一台昂贵的计算机不再只给一个人用多个用户开始共享同一台机器文件、任务、控制台、内存管理开始系统化这意味着 OS 开始真正承担起“中间层”的职责。你可以把它理解成原来 用户 - 直接面对机器 后来 用户 / 程序 │ ▼ 时间共享系统 / 管理层 │ ▼ 机器这也能说明操作系统不是“定义出来的”而是“用出来的”。当复杂度和共享需求上来以后没有它就根本玩不转。8. 1960s-1970s资源虚拟化现代 OS 的骨架成形到了这个阶段现代 OS 最核心的思想开始成熟。关键词就是资源虚拟化8.1 什么叫虚拟化一句话来讲把有限的物理资源包装成“每个程序都像拥有一份自己的”。比如只有一颗 CPU但很多程序看起来像同时在运行只有一块物理内存但每个进程都像有自己的地址空间只有一块磁盘但用户看到的是文件和目录而不是扇区和磁道可以画成这样物理资源 CPU / Memory / Disk / Device │ ▼ 操作系统抽象层 │ ┌───────────────┼───────────────┐ ▼ ▼ ▼ 进程视角 地址空间 文件 / 目录 “我有CPU” “我有一片内存” “我有我的文件”这一步的意义极大因为它直接决定了现代程序为什么能方便地开发、运行和隔离。你今天之所以可以同时打开浏览器、编辑器、终端、聊天软件本质上就是因为 OS 在背后做了非常强的“资源包装”。9. Unix 为什么这么重要很多人一听 Unix会想到黑窗口老系统命令行程序员专属工具但这其实太低估 Unix 了。Unix 真正伟大的地方在于它不只是一个系统它定义了一整套现代软件世界的交互方式。最经典的 Unix Philosophy 可以概括成三句话一个程序只做好一件事一个程序的输出可以成为另一个程序的输入尽量使用文本接口最典型的命令行示例就是catlog.txt|grepERROR|sort|uniq每个工具都不大但只要组合起来战斗力就会非常强。9.1 为什么这套思想到今天还这么强因为命令行有一个特别妙的特点它刚好卡在自然语言和编程语言之间。也就是说自然语言 ------ 命令行 ------ 编程语言 易说 易组合 / 易执行所以对人类程序员来说它足够灵活对系统工具来说它足够结构化对 Agent 来说它也特别适合作为工具调用接口这就是为什么到了 AI 时代CLI 和文本接口不仅没有过时反而越来越有生命力。10. “命令行”人和 Agent 都能用的接口很多同学会觉得命令行“老土”“不够现代””黑框框看起来好不顺眼“。但如果你真的站在系统设计的角度看会发现命令行几乎是一个非常漂亮的折中方案比纯 GUI 更容易组合比纯代码更容易快速交互比复杂图形协议更容易自动化对模型也特别友好所以当我们说操作系统给 AI 提供了手和脚这句话一点都不抽象。因为大模型真正动手时往往就是在做这些事读文件写文件跑程序调命令打开终端联网访问调工具链而这些能力最后都还是操作系统在托底。11. 2030s未来的操作系统不只给人用也要给 Agent 用这门课程做了一个大胆的预测也就是未来的 OS不再只面对人类用户也会越来越多地面对 Agent。这并不意味着“内核要推倒重来”而是意味着系统抽象层会继续往上长工具调用会越来越自动化权限和隔离会越来越重要用户这个概念不再只指“真人点击屏幕”未来的软件世界可能更像这样人类用户 ──┐ ├── 应用 / Agent / 工作流系统 ── OS API ── 硬件 Agent用户 ─┘也就是说未来不是“没有操作系统”而是越来越多不是人的“东西”也会像用户一样使用操作系统。所以学 OS不是怀旧而是在看懂未来。12. 总结所以说这堂课主要所要讲解的内容就是程序为什么能运行为什么多个程序能看起来同时运行为什么程序能访问文件为什么它能和设备交互为什么崩了一个进程不会立刻把整台机器一起带走为什么命令行工具能像积木一样拼起来为什么 Agent 不是“直接控制宇宙”而是通过 OS 能力工作这些问题背后才是操作系统。而这门课是在学抽象如何设计复杂性如何隔离资源如何共享程序如何被组织起来接口如何支撑生态从 ENIAC 那种重新接线的年代到 Fortran 降低编程门槛再到 CTSS 让多用户共享再到 Unix 定义程序协作方式操作系统不是某一天被发明出来的“概念”而是复杂度不断增长后人类不得不建立起来的一整套基础设施。就像城市规模一大必然会长出道路系统排水系统电网系统交通规则没有这些东西城市一大就会直接瘫掉。操作系统就是软件世界的城市基础设施。13. 结语操作系统不是老古董而是现代软件世界的地基。你今天看到的浏览器、编辑器、游戏、服务器、表面上五花八门但往下挖最后都会落回到程序怎么运行资源怎么管理状态怎么切换接口怎么抽象而这些正是操作系统一直在做的事。说到底代码会越来越便宜但理解抽象、理解接口、理解系统边界永远是贵的。而操作系统恰恰就是这一切的起点之一。