20世纪40年代,第二次世界大战爆发。当时武器装备落后,美军需要更精准、更有威力的火炮,但这会涉及大量复杂的运算。由于战争,为数不多的研究人员根市没时间慢慢地计算。于是,军方委托宾夕法尼亚大学的约翰·莫 克利(John Mauchly)博士和他的学生约翰·埃克特(John Eckert)研制能够进行快速计算的计算机。
第一代电子计算机
为了提高机器的计算速度,莫克利和他的学生用电子管代替了继电器, 实现了数字开关电路,并将这台设备取名为“电子数字积分器与计算器” (Electronic Numerical Integrator and Calculator),简称“ENIAC”。这一改变, 让人类进入了电子时代。
ENIAC 是个庞然大物,它长30.48 米,宽6米,高2.4米,占地面积约 170平方米,能在1秒内进行5000次 加法运算或400次乘法运算,计算速 度是当时使用继电器的机电式计算机的 1000倍、人工计算的20万倍。当时英 国的蒙巴顿(Louis Mountbatten) 元帅把ENIAC 誉为“一个电子的大脑”, “电脑”一词由此而来。
然而,从技术上来讲,ENIAC 还未正式投入使用就几乎过时了。因为在它之前,一份新型电子计算机的设计报告已经出炉。这份设计报告的起草人之一 就是20世纪的天才数学家冯 ·诺依曼。
冯 ·诺依曼时任弹道研究所顾问, 他原本想利用ENIAC来解决一些问题, 但发现ENIAC 被设计成了一台专门计 算火炮弹道轨迹的计算机,并不是什么 计算都能进行。为了解决计算机通用性 的问题,冯 ·诺依曼和莫克利、埃克 特一起提出了另外一台计算机的新方 案 EDVAC, 这台计算机彻底解决安装在弹道研究所实验室的 EDVAC
控制器
输入设备
运算器
存储器
冯 ·诺依曼设计 的电子计算机的 五大“器官”
EDVAC的出现也意味着一种新的系统结构的诞生,这种结构被后人称为“冯 ·诺依曼系统结构”。
电子计算机的五大“器官”
我们知道,任何事物都由特定的结构组成,比如人体是由各个器官组成的, 而计算机的系统结构就是计算机的器官系统。冯 · 诺依曼认为计算机必须由五大部件组成,缺一不可,那就是必须有一个存储器;必须有一个控制器;必须有一个运算器,用于完成算术运算和逻辑运算,必须有输入设备;必须有输出设备。
冯 · 诺依曼结构相对于ENIAC 结构的本质区别,是控制计算机运行的指令的存储位置不同。 ENIAC 的指令存储 于计算机外,通过改变电路接线来人工 设定指令。比如,ENIAC 计算一道题, 埃克特必须分配几十个人把上百条线路 接通, 一道运算需要好几个小时甚至一 天才能计算出来,如果再计算,又要重 新连线。而冯 · 诺依曼把指令存储到了计算机的存储器里面,只要输入一个初 始命令,控制器就可以把指令提取出来 计算一道题轻而易举。
于是,这种高效率的计算机系统逐渐被人们沿用,就连我们现在用的奔腾、 英特尔等芯片都是它的“后人”。今天大多数的计算机还是基于这种结构。冯 · 诺依曼还摒弃了十进制,选用二进制来表达计算机程序和数据。冯 · 诺依曼结构为电子计算机的逻辑结构奠定了基 础,成为计算机设计的基本原则。冯 · 诺依曼也当之无愧地成为现代电子计算机之父。
计算机工作过程
如果把冯 ·诺依曼结构跟一个加工厂类比:控制器相当于工厂的总经理,协调各部门顺利工作;指令就像工单; 存储器相当于仓库;数据就像原材料和 加工完成的工件;输入和输出设备相当 于物流部门;寄存器相当于一块用于临 时存放的空地;那么,运算器就相当于加工车间。
一个加工厂的运转过程大概是这样的:总经理接到订单后,先取出附带加 工程序的工单,根据工单领到原材料, 送入车间按照程序进行加工,加工完成 后打包存放,然后运出。
相应地,计算机的工作程序也可以是这样:将解题的步骤编成若干指令(也 叫“程序”),通过输入端口存放在计算机的存储器中;控制器接到初始命令,根据地址 从存储器中读出指令;控制器根据当前指令,从存储器 中取出数据,传送到计算器中;计算得到的结果被寄放在寄存器 或送回存储器;重复这一操作进行下一步计算,直到程序中指令执行完毕;最终的计算结果从输出端口输出。在这里你也许已经注意到,冯 · 诺依曼系统有一个先来后到的原则。
执行程序时,控制器按照程序指定的 逻辑顺序逐条把指令和数据从存储器 中取出并加以执行。访问存储器时必须严格按照地址顺序,从头至尾进行查找访问。并且每次只能对一个存储 单元进行操作,而无法一次性取出,等所需数据全部就绪后指令才能得以执行。也就是说,加工车间有时候会停工, 大家都在仓库外面排队领原料。这样就限制了运算速度,从而降低了计算机工作的效率。
冯 ·诺依曼结构的局限性束缚了现代计算机的进一步发展,科学家已经开 始寻求非冯 ·诺依曼结构的新体系,神 经计算机、量子计算机、 DNA计算机 也应运而生。它们会不会在不远的将来开启一个新计算机时代呢?