在1946年世界上的第一台电子数字计算机ENIAC诞生后,其仍然存在很多问题,ENIAC由各种门电路组成,这些门电路通过组装出一个固定的电路板,操作这台庞然大物需要通过旋钮、开关和接插线不同的位置来表示所要执行的程序,一旦需要修改程序功能,就要重新组装电路板,因此在ENIAC上设置一段程序往往需要花费大量的时间,如果频繁的设置不同的程序会导致机器在很大一部分时间内都处于程序设计状态而无法运行,实用性能大打折扣。
在ENIAC的总体设计已经完成并进入硬件实现阶段时,来自匈牙利犹太裔美籍计算机科学家约翰·冯·诺依曼(John von Neumann)加入了由莫奇利和埃克特主导的ENIAC团队,一起讨论对ENIAC进行改进,他们要解决的核心问题就是将硬件化程序变为可编程,放在存储器中,随意使用,这就是冯.诺依曼计算机体系的开端,这台新机器名叫电子离散变量自动计算机(Electronic Discrete Variable Automatic Computer),简称EDVAC,由于冯.诺依曼对现代计算机技术的突出贡献,因此冯·诺依曼又被称为“现代计算机之父”。
在冯.诺依曼结构(也被称为普林斯顿结构,因为冯诺依曼当时在普林斯顿大学任教授)概念被提出之前,程序和数据是俩个截然不同的概念,数据放在存储器中,而程序作为控制器的一部分(程序是作为硬件的存在),这样的计算机计算效率低,灵活性较差(每一次编程都需要重新组装电路等)。冯.诺依曼结构中,将程序和数据一样看待,将程序编码为数据,然后与数据一同存放在存储器中,这样计算机就可以调用存储器中的程序来处理数据了。
这意味着,无论什么程序,最终都是会转换为数据的形式存储在存储器中,要执行相应的程序只需要从存储器中依次取出指令、执行,冯.诺依曼结构减少了硬件的连接,这种设计思想导致了硬件和软件的分离,即硬件设计和程序设计可以分开执行。
概括的来讲,冯.诺依曼结构消除了原始计算机体系中,只能依靠硬件控制程序的状况(当时程序作为控制器的一部分,作为硬件存在),它将程序编码存储在存储器中,实现了可编程的计算机功能。
冯.诺依曼计算机体系的主要特点如下:
冯·诺依曼结构以运算器为中心,输入/输出设备与存储器之前的数据传输都需要经过运算器,如图所示。
在冯诺依曼结构中,控制器与其他4个部件都通过控制线与反馈线相连接,控制器通过控制线发送信号控制4个部件进行工作,这些部件通过反馈线将信息反馈给控制器。控制器将用户通过输入设备输入的信息交由运算器进行运算,存储器存储输入设备输入的数据和要控制器要执行的指令,在控制的控制下也可以将存储器存储的信息交由输出设备进行输出。这样一次信息的运算(交互)在5个部件的协同配合下完成了。
但是这样以运算器为中心的结构中也存在一定的问题,那就是即使不需要运算器参与的输入/输出操作时运算器也会参与进来运算,浪费了运算器性能。
现代计算机一般以存储器为中心,这样输入/输出设备就可以直接与存储器交换数据,提高整体效率,如图所示。