§ 6·CS 地基5 prompts

体系结构、操作系统、系统

这一节的核心是*会用 GDB 跟 AI 一起 debug*。理解「每条指令只做一件事」就够。

先读这部分
§ 6

体系结构、操作系统、系统

这一节的核心是*会用 GDB 跟 AI 一起 debug*。理解「每条指令只做一件事」就够。

学到什么程度
  • 体系结构。CPU 只有少量寄存器,每条指令只做一件事(改一个寄存器的值或一块内存)。编译器把高级语言翻译成这些基本指令。
  • 边界意识。知道计算机能写什么不能写什么。要浇花得有根线连到机械臂上,计算机自己不会长出手。
  • 进程 / 线程 / 内存。一个进程有一块内存,里面可以有很多线程。线程共享内存,但各自有独立的寄存器。
  • 二进制、电路、汇编。知道基本概念。
  • 文件系统、IO、死锁。知道在干啥。
并行与分布式
  • Raft。分布式共识算法。核心要求是至少一半以上服务器在线系统才能工作。
  • 并发编程。deadlock、各种 lock、multithread、context switch。
  • 编译原理。上下文无关语法:你可以挑出其中一小段,只要这段本身符合语法规则,外面的东西不受影响。

知道 Raft 的「过半存活」原则、知道并发经典问题。不需要自己实现分布式系统或编译器。

建议
实践方法
写点代码然后用 GDB 跟 AI 一起学,看里面发生了什么。AI 不一定能直接操作 GDB,你操作完截图问它就行。
动手做 · 提示词卡

把这段知识变成一段可执行的练习

以下 5 张卡,每张都是一段可复制的提示词。打开 Claude Code(或任何 LLM 终端),把卡里的提示词粘进去,AI 会陪你完成这一步。遇到不会的概念,把 AI 的回答贴回 卡里继续问下一步。可以一次做完,也可以分几次。

2 操作3 概念
Prompt 01操作★★

GDB 跑 hello world

为什么要学AI 写的代码出底层 bug 时你只会看日志猜。GDB 让你看 CPU 在干嘛。
打个比方体检照胃镜:直接看到胃里有没有东西,比猜症状准 100 倍。
VibeCoder 场景Claude Code 写的 C 程序莫名崩溃,你只会让它再试一次。

体系结构最直观的学法是 GDB 单步跑一遍 hello world。

前置macOS 装 lldb 或 Linux 装 gdb · 本地装好 gcc 或 clang
  1. 01写 hello.c 写 5 行最小程序。
  2. 02gcc -g hello.c -o hello。
  3. 03gdb ./hello 或 lldb ./hello。
  4. 04break main、run,连续按 step 看每一步。
  5. 05info registers 看 rip 寄存器变化。
粘贴到 Claude Code(或任何 LLM 终端)
教我用 gdb(或 macOS 的 lldb)单步执行一个 hello world。要求:1. 给我一个 5 行的 C hello world。2. 编译命令(带 -g 调试符号)。3. 启动调试器、break main、run、step、next、info registers、quit 这 6 个最少命令各做什么。4. 单步执行时观察 rip 寄存器怎么变。5. 用 3 句话告诉我你看到的就印证了'每条指令只改一个寄存器或一块内存'这个原则。如果我在 macOS 用 lldb,给一份命令对应表。
✓ 完成判据你看到 rip 寄存器在每一步 step 后会变;能用一句话复述'每条指令只做一件事'。
macOS 上 gdb 要签名才能用,否则用 lldb,命令对应关系让 AI 给个表。
Prompt 02操作★★

多线程竞态自造

为什么要学多线程 bug 是最难复现的鬼魂 bug。不懂等于把项目押在概率上。
打个比方两人同时往一本子记账,一不留神同时翻页,账就丢了。
VibeCoder 场景Claude Code 给你多线程脚本跑数据,每次结果不一样还查不出原因。

你听说 race condition 不直观,想自己造一个看到。

前置本地装好 Python 3
  1. 01AI 给两段代码。
  2. 02跑无锁版本 5 次,看每次结果都不一样、都小于 400000。
  3. 03跑加锁版本,看结果稳定 400000。
  4. 04让 AI 解释 read-modify-write 不是原子操作。
粘贴到 Claude Code(或任何 LLM 终端)
写一段 Python 代码:用 threading 开 4 个线程,每个线程对一个共享变量 counter 累加 100000 次。不要加锁。运行 5 次,每次打印最终 counter 值。然后再加一段加锁版本(用 threading.Lock),对比打印。最后用 4 行解释为什么不加锁会丢更新。提示:counter += 1 不是原子操作,请用 tmp = counter; counter = tmp + 1 这样的显式拆分制造可观察的丢失。
✓ 完成判据无锁版本 5 次结果都 < 400000 且互不相同;加锁版本稳定 400000。
Python GIL 有时会掩盖竞态,必须让 AI 用显式 read/write 拆分制造可观察的丢失。
Prompt 03概念★★

Raft 过半存活模拟

为什么要学不懂'过半存活',AI 部署的分布式库挂俩节点你不知还能否用。
打个比方5 人投票决定吃啥:3 人在场就能定,少于 3 人吃不上饭。
VibeCoder 场景Claude Code 帮你搭 etcd 集群,挂了 2 个节点你不知道还能用不。

你想直观验证 Raft '至少过半存活' 这个原则。

  1. 01AI 输出 4 个时间步。
  2. 02自己复述 2 和 3 之间的临界点:为什么 2 还能工作、3 就不行。
  3. 03把节点数改成 4,让 AI 再来一遍,看'过半'在偶数下变成什么。
  4. 04让 AI 解释为什么 Raft 集群通常用奇数节点。
粘贴到 Claude Code(或任何 LLM 终端)
帮我做一个文字版 Raft 模拟。情境:5 节点集群,每个节点处于 leader、follower、candidate 三种状态之一。请按时间步演示下面 4 个事件:1. 初始选出 1 个 leader,4 个 follower。2. 2 个 follower 下线(剩 3 个在线,过半)—— 集群还能正常工作吗?解释为什么。3. 再下线 1 个(剩 2 个在线,不过半)—— 集群停摆吗?解释为什么。4. 之前下线的 1 个恢复(剩 3 个在线)—— 能恢复服务吗?每步用不超过 4 行文字描述。
✓ 完成判据你能用一句话解释 5 节点集群最多挂几台还能工作(答案:2)。
不要让 AI 给完整 Raft 论文细节(leader election、log replication 一起讲会爆炸),只盯'过半存活'这一个点。
Prompt 04概念★★

上下文无关语法验证

为什么要学不懂这个,AI 改你代码时为啥能'只改这一块'你完全不知原理。
打个比方改 HTML 里一个标签,外面 div 不用动,因为它管不到内部。
VibeCoder 场景Claude Code 改 JSX 里某个组件,你担心外面会被牵连出问题。

编译原理只要懂'上下文无关'这一个概念。

  1. 01AI 给嵌套 HTML 例子。
  2. 02自己拿浏览器或在线 HTML 校验器验证改完还是合法 HTML。
  3. 03让 AI 给一个反例(自然语言里的代词消解就是经典反例)。
  4. 04用一句话自己解释。
粘贴到 Claude Code(或任何 LLM 终端)
用一个 HTML 例子向我演示'上下文无关语法'。请:1. 给我一段嵌套 4 层的 HTML 片段(包含 div、p、span 等)。2. 从最内层挑一个标签(比如 span),把它改成另一个合法标签(比如 b)。3. 告诉我外层为什么不需要改,整段 HTML 还是合法的 —— 这就是'上下文无关'的字面含义。4. 再给一个反例:哪种语言或场景下改一个局部,外层必须跟着改?解释为什么这种叫'上下文相关'。每部分不超过 5 行。
✓ 完成判据你能不查资料解释为什么编程语言要设计成上下文无关。
不要让 AI 直接讲 BNF/EBNF 形式定义,先用 HTML 直觉理解再说。
Prompt 05概念★★

边界意识 3 件事

为什么要学你让 AI 浇花关灯,它说不行你以为它笨。其实是计算机没手。
打个比方你叫朋友帮买咖啡,他在家里也变不出咖啡,得有店有钱。
VibeCoder 场景Claude Code 拒绝你让它'打开台灯',你不知道这是物理限制。

要知道'计算机能写什么、不能写什么'。

  1. 01AI 给 3 件事。
  2. 02自己再想一件 AI 没想到的(比如让代码自己买咖啡)。
  3. 03想清楚每件事的接口(智能花盆 API、智能开关、摄像头 + CV 模型、外卖 API)。
  4. 04把这 4 件事记下来,下次有人问 'AI 能不能做 X' 你就有判断框架。
粘贴到 Claude Code(或任何 LLM 终端)
我想训练自己的'边界意识'。请按下面格式回答:列出 3 件计算机本身不能直接做、必须要外接硬件或人工介入的事情。每件事说明:1. 为什么计算机自己做不到。2. 如果你想让它做到,需要外接什么硬件或接口。3. 写代码时这个边界对我意味着什么(一句话提醒)。例子要具体(如浇花、打开台灯、识别真实物体),不要抽象。
✓ 完成判据你能脱稿讲清楚'计算机不能浇花是因为它没有手'这个边界,并给出补全方案。
不要把'LLM 不会 X'和'计算机不会 X'混在一起,前者是模型限制,后者是物理限制。