冯·诺依曼体系结构
“存储程序”的计算机金字塔
早期的计算机组成
- 早期的基本硬件组成:CPU、内存和主板。
- 存放在内存中的程序和数据,需要被CPU读取,CPU 计算完之后,还要把数据写回到内存
- 主板是一个有着各种各样,有时候多达数十乃至上百个插槽的配件。我们的 CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了 CPU 和内存之间如何通信的问题。芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题。总线则是实际数据传输的高速公路。因此,总线速度(Bus Speed)决定了数据能传输得多快。
- 有了以上三件,只要配上电源,计算机差不多就可以跑起来了,现在还缺少的是各类输入(Input)/ 输出(Output)设备,也就是 *I/O 设备*。最后,还可以配上一个硬盘。这样各种数据才能持久地保存下来。
- 另外,显卡(Graphics Card)对于使用图形界面操作系统的计算机,无论是 Windows、Mac OS 还是 Linux,都是必不可少的。显卡之所以特殊,是因为显卡里有除了 CPU 之外的另一个“处理器”,也就是 GPU(Graphics Processing Unit,图形处理器),GPU 一样可以做各种“计算”的工作。
主板
鼠标、键盘以及硬盘,这些都是插在主板上的。作为外部 I/O 设备,它们是通过主板上的南桥(SouthBridge)芯片组,来控制和 CPU 之间的通信的。“南桥”芯片的名字很直观,一方面,它在主板上的位置,通常在主板的“南面”。另一方面,它的作用就是作为“桥”,来连接鼠标、键盘以及硬盘这些外部设备和 CPU 之间的通信。
有了南桥,自然对应着也有“北桥”。是的,以前的主板上通常也有“北桥”芯片,用来作为“桥”,连接 CPU 和内存、显卡之间的通信。不过,随着时间的变迁,现在的主板上的“北桥”芯片的工作,已经被移到了 CPU 的内部,所以你在主板上,已经看不到北桥芯片了。
冯·诺依曼体系结构
类似的手机也有这样的组成。我们手机里只有 SD 卡(Secure Digital Memory Card)这样类似硬盘功能的存储卡插槽,并没有内存插槽、CPU 插槽这些东西。这是由于尺寸的原因,手机制造商们选择把 CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫 SoC,也就是 System on a Chip(系统芯片)。
无论是个人电脑、服务器、智能手机,还是 Raspberry Pi 这样的微型卡片机,都遵循着同一个“计算机”的抽象概念。这是怎么样一个“计算机”呢?这其实就是冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机。包含了两个概念:一个是可编程,一个是存储。
关于“存储程序计算机”的由来,可以参见冯在秘密开发的 EDVAC 写了一篇报告First Draft of a Report on the EDVAC,描述了他心目中的一台计算机应该长什么样。
计算机结构体系
- 处理器:首先是一个包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),用来完成各种算术和逻辑运算。因为它能够完成各种数据的处理或者计算工作,因此也有人把这个叫作数据通路(Datapath)或者运算器。
- 控制器单元:一个包含指令寄存器(Instruction Register)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。在现在的计算机里,上面的算术逻辑单元和这里的控制器单元,共同组成了我们说的 CPU。
- 内存:接着是用来存储数据(Data)和指令(Instruction)的内存。以及更大容量的外部存储,在过去,可能是磁带、磁鼓这样的设备,现在通常就是硬盘。
- I/O 设备:最后就是各种输入和输出设备,以及对应的输入和输出机制。我们现在无论是使用什么样的计算机,其实都是和输入输出设备在打交道。

延伸:图灵机
冯·诺依曼机侧重于硬件抽象,而图灵机侧重于计算抽象
- 图灵机是一种思想模型,是一种有穷的、构造性的问题的问题求解思路,图s灵认为凡事能用算法解决的问题也一定能用图灵机解决;
- 阿兰图灵确定了利用当代计算机的计算极限,即冯诺依曼机只能解决 1.有解的可计算的数学问题 2.能够在有限步骤得到解,为软件便成确立的问题领域边界。
- 相比而言,冯诺依曼机侧重于”程序存储”与”二进制执行”,并提出实现这两点必须的五个部分:控制器,处理器,存储单元,输入和输出设备。这个体系基本奠定了近现代计算机的硬件基础。