研制第一批通用计算机

谁发明了计算机?

现代计算机是逻辑与工程的复杂混合体,单独挑出一人作为发明者是可笑的。随着我们的故事从背后的逻辑思想转到现代通用计算机的实际制造,工程问题以及能够有效应对这些问题的人便走上了前台。计算史已经给出了各不相同的说法,在继续我们的故事之前,我们最好简要回顾一下这些人物。

约瑟夫-玛丽·雅卡尔

雅卡尔织布机是一种可以用一堆穿孔卡片来控制编织纹样的织布机器,它首先在法国引发了纺织业的革命,最后席卷了全世界。职业职工往往不无夸张地所,这就是第一台计算机。尽管它是一项奇妙的发明,但雅卡尔织布机与其说是一台计算机,不如说是一架自动织布钢琴。因为它就像自动钢琴那样,可以通过在输入介质上打孔来自动控制一台机械装置。

查尔斯·巴贝奇

巴贝奇建议把雅卡尔那样的穿孔卡片用到他没有制造出来的分析机上。他的想法类似于雅卡尔关于织布机的想法。

爱达·洛普莱斯

她的父亲拜伦爵士在她一岁之后就再没见过她。她对数学,特别是对巴贝奇的分析机有很大热情。她翻译了一本有关分析机的法文研究报告,并且经巴贝奇的统一,再其中加入自己的评论。她被称为世界上第一位计算机程序员,为了纪念她,有一种主要的编程语言就是以她的名字“爱达”命名的。她把分析机与雅卡尔织布机联系起来的名言常常被人引用:

我们也许可以非常恰当地说,分析机编织的代数模式和雅卡尔织布机编织的花叶完全一样。

克劳德·仙农

仙农在麻省理工学院所作的硕士论文中,说明了乔治·布尔的逻辑代数如何能被用于设计复杂的开关电路。这篇论文“有助于把数字电路设计从一门技术转变成一门科学”。

他的信息论在当代通信技术中起着至关重要的作用。

仙农在计算机下棋算法方面做了先驱性的工作。他说明了如何仅用两个状态就可以制造出一台通用的图灵机。

霍华德·艾肯

1944年,他为哈佛大学设计的,IBM用电子继电器制造的“自动序列受控计算机”研制成功,它可以完成巴贝奇所设想的任何任务。在为物理学家和工程师的数字处理研制了一台专用机器之后,艾肯发现,通用机很难有效地处理这种计算。

约翰·阿塔纳索夫

这位衣阿华州立大学的不大引人注意的物理学家基于美国参加二战时的真空管电子学,设计并制造出了一台专用的小型计算机。尽管这台机器只能处理非常特殊的问题,但它的重要性体验在它能够证明真空管电路对于计算的重要性。

阿塔纳索夫的机器是为解决联立的线性方程组而设计的。这种问题的一个例子是

2x + 3y - 4z = 5
3x - 4y + 2z = 2
x -3y -5z = 4

机器最多可以处理含有30个未知量的30个方程。

约翰·莫齐利

莫齐利的先见之明为世界上第一台大型数字处理电子计算机ENIAC在费城宾夕法尼亚大学的摩尔电子工程学院的成功研制打下了基础。莫齐利也是一个物理学家,他曾经访问了阿塔纳索夫在埃姆斯和衣阿华的实验室,并有机会研究了在那里制造的电子计算机。

约翰·普瑞斯伯·埃克特

埃克特是一位卓越的电气工程师,他的工作为ENIAC的成功研制起到了关键性的作用。

赫尔曼·戈德斯坦

数学家赫尔曼·戈德斯坦于1942年入伍,他被派到军械部弹道研究实验室当一名中尉。作为ENIAC项目的军方代表,他把冯·诺伊曼吸收到了摩尔学院的小组中。再后来与埃克特和莫齐利的争论中,他支持冯·诺伊曼一方。战争结束后,他成了冯·诺伊曼在计算方面的工作的主要合作者。他关于计算史的书强调了冯·诺伊曼的地位,并因此而受到指责。

约翰·冯·诺伊曼与摩尔学院

冯·诺伊曼欣然加入了费城电子工程摩尔学院的一个令人激动的项目——研制一台强大的电子计算机ENIAC。

如果说拥有1500根真空管的“巨人”是一件工程奇迹的话,那么有着18000根真空管的ENIAC就简直令人震惊了。当时的传统看法认为,这样的配置不可能有效地工作,因为没过几秒钟就肯定会有一根真空管坏掉。ENIAC的首席工程师约翰·普瑞斯伯·埃克特是这个项目得以成功的关键人物。他要求每一个部件的可靠性都达到非常高的标准。真空管在尽可能低的功率电平上工作,以使真空管的损坏率保持在每星期3根。这件庞然大物塞满了一个巨大的房间,通过把缆线连接在一块很像旧式电话交换机的线路连接板上来运行。

ENIAC模仿了当时最成功的计算机器——微分分析器。微分分析器并不是对数直接进行运算的数字设备,而是用可测的物理量(如电流或电压)把数表示出来,把各个部件连接在一起以模拟所需的数学运算。这些模拟机的精确度受到了测量仪器的限制。ENIAC是一台数字设备,它是能够处理与微分分析器相同的数学问题的第一台电子机。它的设计者使它的部件发挥与微分分析器的部件类似的作用,更大的速度和精确度则依赖于真空管电子学的接受力。

当冯·诺伊曼开始与摩尔学院进行讨论的是互殴,ENIAC的研制成功已经没有什么重要的障碍了,人们开始把注意力转向下一台计算机,它的名称暂定为EDVAC(电子离散变量自动计算机)。

1945年6月,冯·诺伊曼提出了他著名的“关于EDVAC的报告草案”,它实际上是主张把马上就要建造的EDVAC作为图灵通用机的一个物理模型实现出来。就像抽象装置上的纸带一样,EDVAC具有存储能力——冯·诺伊曼称之为“存储器”,它既能存储数据,又存储代码指令。为了实用,EDVAC有一个能够在一步之内执行每一条算术基本操作(加,减,乘,除)的算术器件,而在图灵的原始概念中,这些操作需要用像“向左移动一格”这样的原始操作来建立。尽管EDVAC把算术用在了十进制数上,但它将会享受到二进制符号可能带来的简洁。EDVAC还包含一个实现逻辑控制的器件,它把需要执行的指令(每次执行一条)从存储器转移到算术器件。计算机的这种组织方式后来被称为“冯·诺伊曼结构”,今天绝大多数计算机仍然是按照这种非常基本的方案进行组织的,尽管它们的部件已经与EDVAC大相径庭。

与图灵类似,冯·诺伊曼也猜想人脑的某些显著能力源于它拥有一台通用计算机的能力。在EDVAC报告中,冯·诺伊曼曾多次提到人脑和他所讨论的机器之间的类比。他注意到了,真空管电路可以被设计得就像我们电脑中的神经元一样以多种方式运转,他还讨论了EDVAC所需的算术器件和逻辑控制器件都可以由这种电路制成,而暂时没有考虑技术细节。

约翰·冯·诺伊曼关于EDVAC的逻辑控制,制定了指令代码,并未具体问题写出了代码指令以检验这些系统。冯·诺伊曼还写了一份初步的报告,在他的报告中,物理结构和物理装置被理想化的元素代替了,以免引起工程上的问题从而分散逻辑考虑的注意力。

冯·诺伊曼希望他所说的机器实际上已经充分接近通用机算了。他强调一台计算机的“逻辑控制”对于它的“尽可能地接近通用”是至关重要的。为了检验EDVAC的普适性,冯·诺伊曼第一次认真写出了一个程序,有效地给数据分类。

通过形式-逻辑的方法,我们很容易理解,足以控制和执行任何操作序列的抽象代码是存在的,它们可以在机器中单个使用,其整体又可以被问题计划者所设想。从目前的观点来看,在选择一个代码时,真正重要的是一种更为实际的性质:代码所要求的装置的简洁性,它运用于实际重要问题上的清晰性以及它处理这些问题的速度。

第二次世界大战之后发展出来的计算机与早期的自动计算机之间有着本质性的区别。这些战后的机器都被设计成了通用的普遍装置,只要过程中的步骤被明确指定,它们就能够执行任何符号过程。

然而,它们有一个巨大的存储器(与图灵机的无限长的纸带相对应)却是至关重要的,只有这样,指令和数据才能共存于其中。指令和数据之间的这种不固定的界限就意味着,我们可以设计出把其他程序当成数据的程序。早期的程序员主要就是利用这种自由度来设计出能够更改自身的程序。

在人们普遍使用操作系统和不同等级的程序设计语言的今天,更为复杂的应用已经成为可能。对于一个操作系统而言,它所启动的程序(比如你的Word处理器或电子邮件程序)就是供它操作的数据,只要每一个程序都有它自身的存储部分,而且(当处理多重任务时)能够纪录所要完成的每一项任务的进程。编译程序把用今天常用的某种语言写成的程序翻译成可以被计算机直接执行的指令:对于编译程序而言,这些程序就是数据。

对于一台模仿图灵的通用机的通用计算机来说,还需要一件物理装置来充当足够大的存储器。在图灵抽象的通用机的纸带上,要想从一个方格移到较远的另一个方格,就不得不进行多次繁琐的移动。然而,快速的电子计算机却需要一个快速的存储器,这就要求被存储在存储器中某一位置的数据一步就能得到,也就是说,存储器应当时随机存取。

20实际40年代后期,人们通常都把正在研制的新的计算机说成是体现了存储程序概念,这是因为需要执行的程序在历史上第一次被存储在计算机内部,而这些机器真正革命性的地方是它们的通用特征,且存储程序只是达到目的的一种手段。

阿兰·图灵的ACE(自动计算机)

到了1945年末,图灵已经完成了他那篇著名的ACE(自动计算机)报告。ACE报告与冯·诺伊曼的EDVAC报告之间的一个不同之处是,后者“是一份尚未完成的草案……更重要的是……它是不完整的……”。ACE报告却“是对计算机的一次完整描述,一直到逻辑电路图”,甚至还包括“预算为11200英镑”。在ACE有可能处理的10个问题的清单中,图灵凭借他那宽广的视野,把两个并非与数字数据直接相关的问题——下棋和简单的拼图玩具——包括了进来。

图灵的ACE是一种与冯·诺伊曼的EDVAC非常不同的机器,它们与这两位数学家的不同态度密切相关。冯·诺伊曼却把重点放在了数值计算上,EDVAC的逻辑构造都是为了在这个方向上有所推进。图灵发现ACE不适于做繁重的算术计算,所以ACE是沿着小得多的方式进行设计的,它更接近于“论可计算数”这篇论文中的图灵机,算术运算将通过程序设计(也就是通过软件而非硬件)来进行。为此,ACE的设计提供了一种特殊的机制,能够把以前的程序操作包含在一个更长的程序中。

用现代的术语来说,图灵所建议的是用堆栈来代替子程序处理。堆栈可以以后进先出(LIFO)的结构对数据进行排列。于是,当一次计算被中断,以调用一个预先编好的子程序时,它必须记住子程序结束时所要回到的位置。由于子程序可以调用其他子程序,这将导致一个记忆这种中断位置的堆栈。图灵建议把放入堆栈的操作称为“push”,从堆栈顶部释放称为“pop”。

由于图灵的最小主义思想,ACE设计预计了所谓的微程序设计,它使程序员可以直接进行最基本的计算机操作。今天所使用的个人电脑是建立在硅微处理器的基础之上的,芯片采用了RISC(精简指令集计算)结构,则在芯片上使用了最小指令集,它又一次与ACE的哲学相一致。

1947年2月20日,图灵在伦敦数学会上作了关于ACE和一般数字电子计算机的讲演。图灵提出了一个问题,即“一台计算机原则上可以在多大程度上模仿人的活动”。这使它提出,一台经过编译的计算机也许可以进行学习和犯错误。“有几条定理说的几乎就是……但对于一台不出错的机器能够表现出多少智能,这些定理却什么都没有说。”这间接提到了哥德尔的不完备性定理,我们将在下一章中更详细地加以讨论。图灵讲演的最后提出“要让与人同样会犯错误的计算机进行公平竞赛”,并且建议可以从下棋开始检验。

埃克特,冯·诺伊曼和图灵

从图灵的饿“‘经验发展’过程和‘机械过程’这两种说法讲的是同一意思”的结论可以很清楚地看出,把数从十进制转变成二进制,然后再转变回来,这是机器操作中最微不足道的事情。

埃克特的确完成了一项与EDVAC有关的重大任务:他认为水银延迟线可以解决大容量存储器的问题。

冯·诺伊曼把计算机程序设计看作一种活动,把这种看法与图灵的看法作一番比较是很有趣的。冯·诺伊曼称之为“编码”,并且明确指出它是一种办事员的工作,基本不需要理智参与。在ACE报告中,图灵说计算机程序设计过程“应当是非常吸引人,它不应该被沦落为苦差事,因为任何非常机械的过程都可以交由机器本身去处理。”

《时代》杂志评选的20世纪最伟大的20位科学家和思想家名录。这样说:

现代计算机的创造是由众多的思想和技术进步共同完成的,以至于把它的发明完全归功于一个人是太不明智了。有一个事实仍然成立,那就是每一个敲击键盘,打开电子数据表或Word处理程序的人都是在实现了的图灵机上工作的。

下面是《时代》杂志对冯·诺伊曼的评论:

事实上,从耗资1000万美元的超级计算机到今天的无线电话和菲比玩具上所使用的微小芯片,所有计算机都有一个共同点:它们都是“冯·诺伊曼机”,都是冯·诺伊曼基于图灵在20世纪40年代的工作所提出的计算机的基本结构的变种。

在1949年,成功运行的Mark I型曼切斯特计算机出色地证明了威廉姆斯把现成的阴极射线管用作存储设备的技术,这一技术不久就用在了美国的计算机上。然而,其基本设计仍是院子冯·诺伊曼的EDVAC报告,而不是阿兰·图灵。

图灵曾经提出过一种相对简单的机器,它的许多功能都是由软件来实现的。但反过来,程序员要对背后的机器操作进行许多控制。这特别有利于编写旨在完成逻辑运算而非数值运算的程序。

Loading Disqus comments...
Table of Contents