冯·诺依曼结构:现代计算机的诞生

从存储程序到冯·诺依曼结构

机电时期,人们使用穿孔卡片或穿孔带编制程序,由于计算机的运算速度受限于机械动作,输入模块有充分的时间读取穿孔介质上的指令信息。而到了电子时期,使用穿孔输入就远远跟不上电子运算的节奏了,因此,人们便利用旋钮、开关和接插线的不同位置来表示程序,虽然消除了控制与运算之间的速度差距,却使编程成为一件非常复杂的难事。在ENIAC上设置一个实用程序,往往需要几个星期的时间,如非必要,使用者很少愿意修改它。因此,尽管ENIAC是通用的,却总在一段时间内只专用于某个问题(比如弹道计算),它的通用价值被大大削弱。而如果频繁地设置不同程序,机器在很大一部分时间里将无法运行,它的高速性能又被大大浪费。

聪明的读者或许已经想到:程序能不能像数据一样,通过穿孔介质输入之后长期驻存在机器内部的存储器中呢?这样一来,读取指令就和读取数据一样快了。

埃克特和莫奇利也想到了这一点,1944年,在ENIAC还未建成之际,研制一台可以存储程序的新机器的申请就提交到了导弹实验室。导弹实验室同意了这个项目,并提供10万美元的预算。这台新机器名叫电子离散变量自动计算机(Electronic Discrete Variable Automatic Computer),简称EDVAC。

原本,EDVAC会和前辈ENIAC一样,悄悄地建成,风光地亮相,它将成为世界上第一台存储程序电子计算机,埃克特和莫奇利将为它申请一份专利,而这次不会再有谁质疑他们的原创性。然而故事并没有朝着这条既定路线展开,一位不期而至的“程咬金”使他们的原创变得不再纯粹,甚至,遮盖了他们应有的名气。他就是大名鼎鼎的约翰·冯·诺依曼(John von Neumann)。

约翰·冯·诺依曼(John von Neumann),1903-1957,美籍匈牙利人,数学家、物理学家、计算机科学家、博学家。(图片来自维基百科)

在所有计算机先驱中,冯·诺依曼和图灵一齐拥有着最高的知名度,但其实他的主要成就分布在其他领域。他首先是位伟大的数学家,在集合论、逻辑学、博弈论、代数学、几何学和拓扑学等各大分支都有卓越贡献,一生发表的150多篇论文中,120多篇都是数学论文;而后是一位物理学家,在量子力学和流体动力学中颇有建树;同时还是化学家和经济学家,是位令多数同行都只能望其项背的博学者。

他天赋异禀,6岁就能心算8位数除法,8岁便熟稔微积分,22岁获得布达佩斯大学数学博士学位。他能一字不差地背诵出曾经看过的名著,甚至电话本,他所知的历史知识甚至令普林斯顿大学的历史学教授都自愧不如。其心算能力和记忆力之强,曾令某位ENIAC小组的数学家感叹:还造什么计算机,他本身就是台计算机!

在与冯·诺依曼接触过的人中,越是高学识者越惊叹于他的超群智力。苏黎世联邦理工学院的教授乔治·波伊亚用“害怕”来形容自己对冯·诺依曼的感受,因为只要他在课堂上提到某个数学界的未解难题,冯·诺依曼很可能一下课就拿着完美的解答去和他讨论了。“原子能之父”恩利克·费米曾向曼哈顿计划的同事这样形容冯·诺依曼的心算能力:“他的心算速度是我的十倍,而我的心算速度已经是你的十倍了。”加拿大数学家海尔·比林则感叹:“想赶上冯·诺依曼是不可能,那种感觉就好像你骑着三轮车妄图追上汽车一样。”诺贝尔物理学奖获得者汉斯·贝特则不止一次半开玩笑地揣测:冯·诺依曼的大脑暗示着有比人类更先进的物种存在。

二战期间,冯·诺依曼加入曼哈顿计划,此时的他已经拥有极高的学术地位。原子弹的研制涉及大量运算,洛斯·阿拉莫斯国家实验室在体验过机电计算机Harvard Mark I之后,对ENIAC寄予了更高的期望。1944年的夏天,冯·诺依曼作为顾问加入ENIAC项目,提出了许多建设性意见,并深度参与到EDVAC的讨论中。

这期间,冯·诺依曼在EDVAC上投入了许多思考,他愈发觉得,EDVAC不单是一个平凡的计算机项目,它潜藏着更深的理论意义。他想起图灵的论文,通用图灵机能够根据纸带上的策略信息模拟任意图灵机的行为,纸带是它是存储器[1],策略信息就是程序,这正是存储程序最早的思想萌芽。而他们现在所尝试的,正是用电子管将它变成现实!1945年6月,在一趟返回洛斯·阿拉莫斯国家实验室的列车上,完整的EDVAC已在冯·诺依曼脑中清晰可见,他奋笔疾书,写出了那篇长达101页,影响计算机历史走向的《EDVAC报告书的第一份草案》。

草案不仅详述了EDVAC的设计,还为现代计算机的发展指明了道路:

  1. 机器内部使用二进制表示数据;
  2. 像存储数据一样存储程序;
  3. 计算机由运算器、控制器、存储器、输入模块和输出模块5部分组成。

这些在现在看来似乎是理所应当的原则,在当时却是一次划时代的总结。这份草案与其说是冯·诺依曼对EDVAC的设计描述,不如说是他对当时全世界计算机建造经验集大成式的高度提炼。

冯·诺依曼将计算机与神经细胞类比,运算器、控制器和存储器相当于联络神经元,输入模块和输出模块相当于感觉神经元和运动神经元。通俗地讲,就好比人拥有可以思考(处理信息)的大脑,并通过“感觉”获取来自世界的信息,通过“运动”去改变世界。计算机同样需要这样一个世界,那就是当时的穿孔介质、开关、旋钮、接插件,等等,统称外部记录媒体。

这种基于存储程序思想的计算机结构,后来被称为冯·诺依曼结构。冯诺依曼结构奠定了现代计算机的基调,放到今天,运算器和控制器就是CPU的主要组成部分,存储器主要对应为内存,输入和输出模块也被芯片化后集成到主板,外部记录媒体变得丰富多样,比如鼠标、键盘、显示器、触屏、手柄、硬盘、U盘、音箱、话筒,等等。

冯·诺依曼结构

这份草案很快流传开来,并轰动了整个计算机界,但作为ENIAC团队的共同成果,却只署了冯·诺依曼一个人的名字。命运又一次给埃克特和莫奇利开了个大玩笑,这不仅让EDVAC失去了巨大的专利价值,还让ENIAC团队失去了应得的声誉。尽管冯·诺依曼并非有意为之,埃克特和莫奇利也一再强调即使没有冯·诺依曼,他们也能给出同样的成果,但“冯·诺依曼结构”实在太过经典,这个名词早已深入人心。

而EDVAC的设计思想中,有多少属于埃克特和莫奇利,有多少又属于冯·诺依曼,这是个永远也解不开的谜。但至少,如果没有冯·诺依曼将设计方案抽象至理论层面,计算机世界的“大一统时代”可能还要推迟到来。

如果说图灵描绘了计算机的灵魂,那么冯·诺依曼则框定了计算机的骨架,后人所做的只是不断丰富计算机的血肉罢了。

1948年4月,ENIAC团队通过线路改造使ENIAC的函数表有了存储指令的能力,但其容量对于程序来说还是太小了。实现存储程序的关键是建造容量足够大的内部存储器,要既有不拖累电子运算的访问速度,也要有相对低廉的成本。一时间,计算机界百花齐放,涌现出各种不同的存储器。

参考文献


  1. 图灵机是一种抽象机器,图灵在提出它时并不考虑如何实现它。它所用的纸带可以映射为真实计算机用于输入输出的穿孔纸带,也可以映射为存储器,兼具两者功能,但其发挥的作用更偏向于后者。

禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容