你可能注意到一个现象:同一个文件,第一次打开慢,第二次打开就飞快。为什么?因为系统"记性很好"——读过的数据,它偷偷缓存起来了。这一课,我们讲缓存与磁盘调度,看清"为什么系统越用越快",以及"快"背后的代价。这是第五阶段(存储与 I/O)的收官课。从"第二次读文件为什么快"说起你第一次用 vim 打开一个大文件,可能要等一会儿;关掉,马上再打开——几乎秒开。同样的文件、同样的磁盘,为什么第二次 …

上一课讲了文件怎么存进磁盘。但还有个问题悬着:磁盘、键盘、网卡这些"外设",到底是怎么跟 CPU 对话的? 是你敲一下键盘,CPU 立刻知道;还是 CPU 一直盯着键盘问"按了吗按了吗"?这一课,我们走进 I/O 与设备,看清 CPU 和外设之间的三种对话方式,以及"等 I/O"这件事为什么是高性能系统的关键。从"烧水"说起你想烧一壶水。有三种做法:盯着烧:一直站在水壶边,盯着看"开了没、开了 …

从这一课起进入第五阶段:存储与 I/O。前面讲的内存是"电"里存的东西,一断电就没了;而你的文件,是要持久地存在磁盘上、关了机还能找回来的。那磁盘上一堆裸字节,是怎么被组织成你看到的"文件、文件夹"的?"文件名"和"文件"是同一个东西吗?这一课,我们走进文件系统。从"文件名其实是个假象"说起你在文件管理器里看到的是一棵漂亮的目录树:/home/user/文档/笔记.md。但磁盘上根本不存在"树 …

前面几课反复出现的"段错误""只读不可执行"这些字眼,其实都在暗示一件事:操作系统在偷偷保护你。这一课,我们站到攻击者的视角,看一个程序是怎么被攻破的——以及操作系统用什么手段,把这道防线一层层垒起来。这也是第四阶段(内存管理)的收官课。从"一个程序崩溃,为什么系统不崩"说起你可能遇到过:某个程序崩溃了,弹出"段错误(Segmentation fault)",但系统还好好的,其他程序照跑。为什 …

前面二十六课,我们从冒泡排序一路走到了 GPT。但有个问题一直悬着:大模型只会"生成文字",它怎么"干活"?它不会真的查今天的天气——只能凭记忆猜。它不会真的发邮件、写文件、执行代码——只能输出"看起来像"的代码。直到我们给大模型装上手和脚——让它调用工具。这就从"会说话的模型"进化成了"能干活的助手":AI Agent(智能体)。这一课,最后一课,我们看 Agent 是怎么工作的。一、LLM …

上一课我们搭好了 Transformer 的骨架。但一个"骨架"本身不会说话——它只会把输入"重新表示"一下。那 ChatGPT 到底是怎么做到"你问一句、它像人一样回一句"的?答案藏在三个关键点里:自回归生成:一个字一个字地"续写"。预训练:在几乎整个互联网的文本上,学"下一个字是什么"。缩放(scaling):模型越大、数据越多、算力越强,能力越强。这一课,我们把 GPT 的"引擎"拆开看 …

上一课我们学了 CNN 和 RNN:CNN 看图像,RNN 读序列。但它们各有硬伤:RNN 不能并行:必须一个词一个词地读,第 100 个词要等前面 99 个词都算完。句子一长就慢,而且距离远的词之间的信息传着传着就"忘"了。CNN 视野有限:卷积核只有 3×3、5×5 那么大,要叠很多层才能看到全局。2017 年,一篇论文《Attention Is All You Need》提出了 Tran …

上一课我们学了缺页中断:访问的页不在内存,内核就把它从磁盘换进来。但这里藏着一个前提——物理内存是满的。要换新页进来,就得先踢掉一个旧页。踢谁?这一脚的选择,直接决定系统是丝滑流畅还是卡成幻灯片。这一课,我们就看操作系统怎么"挑倒霉蛋",也就是页面置换(Page Replacement)。从"内存只能装 3 本书"说起假设你的书架(内存)只能放 3 本书,但你要按顺序读 1、2、3、4 这几本 …

上一课我们留了个悬念:程序用的是"虚拟地址",中间隔着 MMU 翻译。那为什么要费这么大劲造这层假象? 答案藏在三个词里:隔离、超卖、共享。这一课,我们走进虚拟内存的核心,看清它如何给每个进程造出一个"独立世界",以及翻译背后的机制——分页、页表、缺页、TLB。从"每个人都觉得自己有整条内存"说起想象一栋楼里有 100 个住户,但房子只有 10 套。怎么让 100 个人都"住"进去?答案:让每 …

上一课我们用全连接神经网络(MLP)识别了手写数字,准确率 95% 以上。已经不错了,但还没到"深度学习"真正的杀手锏。这一课讲两个改变世界的网络结构:CNN(卷积神经网络):专治图像,让计算机"看懂"图。RNN(循环神经网络):专治序列,让计算机"读懂"一句话。它们解决的问题,正是当年全连接网络的两个硬伤——参数爆炸和无法处理顺序。一、全连接网络的两个硬伤上一课的 MLP,每个神经元和上一层 …