本篇要回答的问题:作为信息世界地基的冯·诺依曼体系,为什么如此精简的规格能解决如此庞大的需求?
上一讲鸟瞰了大厦全貌,本讲下到最底层,近距离解剖大厦的地基——冯·诺依曼体系结构。开始解剖前,先学一套通用的"解剖学"。
解剖架构的关键点是什么?
分析任何一个零部件,都问两个问题:
| 问题 | 含义 | 真正的难点 |
|---|---|---|
| 需求 | 它用来做什么?不做什么? | “为什么”——为何设计成干这些,而不多干或少干一点? |
| 规格 | 接口什么样?怎么和别的零件连接? | 规格是"连接需求的抽象",约束一旦不满足,连接就失败 |
符合规格的零部件可以有很多种实现方案,但规格中任一条件不满足,它就无法与其他零件连接、达成预期目标。
为"解决一切的问题"而生
冯·诺依曼体系既是应用程序大厦的地基,也是整个信息科技的地基——它更像一个"无中生有的全新世界"。
它的迷人之处在于:需求大到极致——想解决一切可以用"计算"来解决的问题。计算的边界在哪?今天没人说得清;但人工智能热潮让我们乐观:计算终将逼近甚至超越人类智能。
冯·诺依曼体系的规格
而它的规格简到极致——只有三类零部件:
| 零部件 | 职责 | 要点 |
|---|---|---|
| 存储 | 存放计算的输入与输出 | 指 CPU 内置支持的存储(寄存器/内存/ROM);外置存储属于 IO 设备 |
| 输入输出设备 | 通过端口与 CPU 交换数据 | 数据格式由设备定义,CPU 不理解;驱动程序隐藏交换细节 |
| 中央处理器(CPU) | 执行存储中的指令序列 | 加电后从固定地址开始执行 |
CPU 指令只有三类:计算类、I/O 类、指令跳转类。
和"解决一切计算问题"这个伟大目标相比,三类零件的规格设计显得如此精简。为什么这么简洁的规格,能解决这么复杂的需求?
需求是怎么被满足的?
这一讲最精彩的是从零推导。假设我们是"电脑"的主架构师,目标是"解决一切计算问题":
- 电脑的核心能力是"计算",计算就是
y = F(x)——对输入做变换得到输出。物理上即func F(x []byte) (y []byte)。 - x、y 放哪? → "存储"概念自然诞生:存放计算要操作的数据。
- F 怎么表达? 任意复杂计算 = 内置函数 + 循环/条件分支 + 子函数的组合 → 一组指令序列。所以存储不只放数据,也放"计算"本身。
- 谁来执行这些指令? → 中央处理器(CPU)。有了 CPU + 存储,就能支持任意复杂的计算。
但只有头脑没有四肢五官,再聪明也无法与现实交互。交互抽象来看就是输入和输出,于是引入 IO 设备——CPU 除了纯计算,还要有"数据交换(IO)"能力。
IO 设备的深意:它和电脑完全异构,对电脑只是一个"实现了某项能力的黑盒"。黑盒内部可以是普通元器件,也可以是另一台电脑、GPU、甚至量子计算机。它从根本上解决的,是电脑无限可能的扩展能力。
架构思维上我们学习到什么?
架构第一步是需求分析,关键是抓住稳定点和变化点:
| 稳定点(核心价值) | 变化点(需开放性设计) | |
|---|---|---|
| 电脑的需求 | "计算"能力 | ① 计算需求多样性 ② 交互方式多样性 |
| 如何落地 | 体现为 CPU 指令集,相对稳定 | ① 通过存储中的指令序列(BIOS→操作系统) ② 通过外设与 CPU 的数据交换协议 |
加电后 CPU 并不按固有过程走,而是从固定地址加载指令序列(通常指向主板 ROM 上的 BIOS),再把执行权移交给外置存储上的操作系统。
核心洞见:把所有变化点从最核心部件 CPU 中剥离后,CPU 的需求变得极其稳定,可独立作为产品演进其核心价值。
总结
本讲近距离解剖了信息世界的地基:冯·诺依曼体系。它的不凡在于用三类极简零件(CPU + 存储 + IO)回答了"解决一切计算问题"的宏大需求。
先把"是什么"回答清楚
| 概念 | 一句话说明 |
|---|---|
| 冯·诺依曼体系 | CPU + 存储 + 输入输出设备 |
| 存储 | 既存数据,也存"计算"本身(指令序列) |
| IO 设备 | 异构黑盒,带来无限扩展能力 |
| 稳定点 / 变化点 | 需求分析的核心抓手 |
一句话速记
把变化点(指令序列、外设协议)从 CPU 剥离,核心才能稳定演进——这就是"无生有,有生万物"的架构之道。
思考题
许式伟用 Go 模拟实现了冯·诺依曼架构(github.com/qiniu/arch/tree/master/von)。如果让你给现在负责的系统找"那个 CPU"——即剥离掉所有变化点后、极其稳定的核心,它会是什么?


