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

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

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

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

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

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

冯·诺依曼结构:现代计算机的诞生_第1张图片
约翰·冯·诺依曼(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盘、音箱、话筒,等等。

冯·诺依曼结构:现代计算机的诞生_第2张图片
冯·诺依曼结构

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

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

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

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

SSEC:第一台具有存储程序特点的计算机

第一台涉足存储程序的计算机是由IBM独立于ENIAC和EDVAC完成的。还记得那台让IBM与哈佛结下梁子的Harvard Mark I吗?就在建成它的同一年,没能如愿提高公司形象的IBM立马豪掷100万美元,启动了自己的独立项目SSEC——顺序可选电子计算器(Selective Sequence Electronic Calculator)。

SSEC在1947年8月建成,并于1948年1月27日公开亮相。它是半电子、半机电的,由12500个电子管和21400个继电器组成,两者的速度差异注定着它没有太高的实用价值。世界已经步入电子计算时代,SSEC的出现显得有些不合时宜,一不小心成了机电计算的谢幕者。它更像是IBM为了赌气和为了目的不惜代价的产物。

IBM在纽约市热闹的麦迪逊大道上选了一栋楼,把SSEC装在一楼,并特地在墙上开了一扇巨大的窗户,好让路过的行人都能看到。它全长36.58米,体积巨大,和ENIAC一样铺满了整个房间的墙壁。启动后,此起彼伏的嗒嗒声响和忽明忽暗的指示灯给围观的行人留下了深刻印象,一时间,每当人们提到计算机,脑海中浮现出的就是这台SSEC。IBM终于如愿了。

1949年的专利显示,SSEC的架构允许程序存在于任意物理位置,比如电子管、继电器和穿孔介质,因此它在理论上具有存储程序的特点。但在实现时,SSEC的程序仍主要存在于穿孔带,每秒50条指令的访问速度使它的历史地位备受争议。

ARC2:第一台存储程序计算机

第一台真正的存储程序计算机,也是第一台冯·诺依曼结构的计算机却出现在大西洋彼岸的英国。

1947年,伦敦大学伯贝克学院一位名为安德鲁·唐纳德·布思(Andrew Donald Booth)正在研制一台用于X射线研究的机电计算机——自动继电器计算器(Automatic Relay Calculator),简称ARC。布思在一次赴美的学术访问中接触到了冯·诺依曼,经过一番交流,他豁然开朗,回国后旋即将ARC改成了冯·诺依曼结构,称ARC2。

ARC2于1948年5月12日投入使用,它主要由继电器构成,只包含少量的电子管,其存储器是表面覆盖着金属镍的滚筒状磁鼓。访美期间,布思发现美国人使用的录音机是在一种表面覆盖着磁性氧化物的圆形纸片上记录声音的,由于磁性物质具有南北两极,可以表示二进制数据,布思决定把它引进到计算机中。但是圆形纸片太软了,在高速旋转时难以保持平坦,布思便改用了不会变形的磁鼓,与软盘的发明失之交臂。

冯·诺依曼结构:现代计算机的诞生_第3张图片
这是用于验证的磁鼓存储器原型,ARC2上实用的磁鼓要更大些。(图片来自《School of Computer Science & Information Systems: A Short History》)

威廉斯管中,电子束所能打到荧屏的所有位置构成一个32×32的点阵。一个亮点代表一个二进制位,共可存储32个字长为32位的字。但是威廉斯管的存储原理,与这些点的亮暗没有关系。

参考文献

  • 胡守仁. 计算机技术发展史(一)[M]. 长沙: 国防科技大学出版社, 2004.
  • Wikipedia. John von Neumann[EB/OL].
  • 百度百科. 约翰·冯·诺依曼[EB/OL].
  • Wikipedia. First Draft of a Report on the EDVAC[EB/OL].
  • Neumann J V. First Draft of a Report on the EDVAC[M]. Philadelphia: Moore School of Electrical Engineering University of Pennsylvania, 1945.
  • Wikipedia. IBM SSEC[EB/OL].
  • Johnson R. School of Computer Science & Information Systems: A Short History[M]. London: Birkbeck College, 2008.
  • Lavington S. Alan Turing and his Contemporaries: Building the World's First Computers[M]. Swindon: BCS, 2012.
  • Wikipedia. Manchester Baby[EB/OL].
  • Wikipedia. Williams tube[EB/OL].
  • Wikipedia. Delay line memory[EB/OL].
  • Wikipedia. EDSAC[EB/OL].
  • Wikipedia. EDVAC[EB/OL].

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

你可能感兴趣的:(01改变世界:计算机发展史趣谈)