目录

计算机体系结构 | 冯诺依曼体系

1. 冯诺依曼体系

生活中的PC、服务器、手机、Raspberry Pi等设备虽然他们的硬件组成方式可能不同,比如手机出于便携等原因,会把CPU、内存、网络通信或者摄像头芯片都集成到SoC(system on a chip)中,但是他们都遵循同一个“计算机”的抽象概念,即冯诺依曼体系结构,也叫存储程序计算机(因为本机构隐约指导将存储设备和中央处理器分开)。冯诺依曼体系是一种将程序指令和数据存储器合并在一起的计算机设计概念结构,结构图如下所示。

https://img.dawnguo.cn/ComputerOrganization/1_0_Von_Neumann_architecture.jpg

冯诺依曼体系最早在一篇报告中First_Draft_of_a_Report_on_the_EDVAC提出,指出一个计算机应该包含:

  1. 运算器或者叫做数据通路,负责完成各种数据的处理或者计算的工作。由算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(processor register)组成;
  2. 控制器用来控制程序的流程,通常就是不同条件下的分支和跳转。由一个指令寄存器(instruction register)和程序计数器(Program counter)组成。运算器和控制器组成了CPU
  3. 存储器,存放运行时候数据和指令以及更大的外部存储;
  4. 输入/输出设备,以及对应的输入和输出机制。比如鼠标键盘是输入设备、显示是输出设备。

任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备,现代所有的计算机都是基于这个基础架构在设计开发的。

所有的计算程序,也都可以抽象为从输入设备获取输入信息,通过运算器控制器来执行存储在存储器中的程序,最终把结果输出到输出设备。而我们所有撰写的无论高级还是低级语言的程序也都是基于这样一个抽象框架来运作的。

前面提到冯诺依曼结构由于将存储设备和中央处理分开,又可以称为"存储程序计算机",那么下面我们对存储程序进行解释,存储程序包含两个概念,一个是可编程,一个是存储:

  • 可编程是相对不可编程而言,不可编程的例子比如老式计算器,它就是由各种门电路组合而成,然后通过组装让其完成一个特定的计算程序,但是这种一旦设计好了就不能改变了,也就不能做其他事情了,若想改变机器的程序,必须更改线路、更改结构甚至重新设计。也就是说可编程是计算机设计好了之后,可以根据指定的程序完成不同的任务。

  • 存储是指,程序本身存储在计算机的内存中,可以通过加载不同的程序来解决不同的问题。不能存储程序的计算机,典型的是早年的“Plugboard”这样的插线板式的计算机,整个计算机就是一个巨大的插线板,通过在板子上的不同插口或者接口的位置插入线路,来实现不同的功能,这样子的计算机是可编程的,但是编写好的程序不能存储下来供下一次记载使用,当每次用到和当前不同的程序的时候,都得重新插板子(编程)。

    https://img.dawnguo.cn/ComputerOrganization/1_1.jpg

2. 总结

计算机的整个组成乃至体系结构,都是基于冯诺依曼架构组成的软硬件一体的解决方案。在目前的接触中作者对体系结构的理解是包含软硬件的,从硬件的设计到软件的设计。而冯诺依曼不仅仅包含了硬件的组成结构,还包含了硬件之间的交互规则(比如通过运算器和控制器来执行存储在存储器中的程序)。

3. appendix

现在我们的PC上可能还有南桥、北桥等概念:

南桥:连接鼠标、键盘以及硬盘这些外部设备和CPU之间的通信;

北桥:连接CPU和内存、显卡之间的通信。现在北桥已经被移到CPU的内部了,所以在主板上看不到北桥芯片了;

显卡:显卡里面除了CPU之外还有GPU,GPU也可以完成各种“计算”工作;

主板:CPU、内存、芯片组、总线等都是在主板上的;

本文参考

  1. 计算机组成原理(第五版).白中英,戴志涛等

  2. 极客时间专栏.深入浅出计算机组成原理

  3. wikipedia_冯·诺伊曼结构