
1.1.1 计算机的产生
人类为了满足社会生产发展的需要,在不同的时期发明了各种计算工具。
在原始社会,人们曾使用树枝、石块等物品作为计数和计算的工具。至迟在商代时,中国已采用十进制计数方法,对世界科学和文化的发展起着不可估量的作用。我国在春秋战国时期有了算筹法的记载,算筹被普遍认为是人类最早的手动计算工具。中国南北朝时期的数学家祖冲之就是用算筹计算出圆周率在3.1415926和3.1415927之间,这一结果比西方早1100多年。在长期使用算筹的基础上,东汉时期,中国人又发明了算盘。由于算盘制作简单,价格便宜,珠算口诀便于记忆,运算又简便,所以在中国被普遍使用,并且陆续流传到了日本、朝鲜、美国和东南亚等国家和地区。
随着经济、贸易事业的发展,以及金融业和航运业的日渐繁荣,需要大量复杂、繁重的计算,而且计算问题多与天文、航海有关,这就促使了计算工具的改革。1621年,英国数学界埃德蒙·冈特(Edmund Gunter)制造出第一把对数计算尺,给数的乘除计算带来了方便。同年,英国数学家奥特瑞德(William Oughtred)在冈特计算尺的基础上发明了直尺计算尺,如图1-1所示。1622年,奥特瑞德还设计了圆形计算尺。奥特瑞德对数计算尺不仅可以进行加、减、乘、除、乘方和开方运算,还能计算三角函数、指数函数和对数函数。为了使这种工具更加便捷和实用,人们尝试了多种改进计算尺的办法,它的使用一直持续到20世纪70年代袖珍电子计算器的出现。

图1-1 奥特瑞德与直尺计算尺
生产的发展和科技的进步,继续推动着计算工具的发展。特别是齿轮传动装置技术的发展,为机械计算机的产生提供了必要的技术支持。1642年,法国数学家、物理学家布莱斯·帕斯卡(Blaise Pascal)研制出了世界上第一台机械式齿轮加法器,这是人类历史上第一台机械式计算工具,其原理对后来的计算工具产生了持久的影响。帕斯卡加法器是由齿轮组成,以发条为动力,通过转动齿轮来实现加减运算,用连杆实现进位的计算工具。1673年,德国数学家莱布尼兹(Gottfriend Leibniz)在帕斯卡研究的基础上增加了乘除法器,制成可以进行四则运算的机械式计算器,并可以实现重复做加减运算,它的实现思想也是现代计算机做乘除运算所采用的办法。但是,以上这些计算器都不具备自动进行计算的功能。
受法国工程师雅克特(Joseph Marie Jacquard)发明的自动提花织布机的启发,英国数学家查尔斯·巴贝奇(Charles Babbage)提出了带有程序控制的通用数字计算机的基本设计思想,并于1822年设计了第一台差分机。巴贝奇差分机使用十进制系统,采用齿轮结构,能够预先安排完成一系列算术运算。1834年,巴贝奇设计了分析机,它具有输入、处理、存储、输出及控制5个基本装置,设想采用穿孔卡片来存储指令,并根据这些孔的特点来决定执行什么指令,进行自动运算,如图1-2所示。巴贝奇提出了几乎是完整的现代电子计算机的设计方案,但是因受当时技术和资金的限制而失败。随着19世纪中期精密机械制造技术和工艺水平的提高,电磁学等学科也得到飞速发展,美国人霍华德·艾肯(Howard Aiken)采用机电方法来实现巴贝奇分析机的想法,并在1944年成功制造了自动数字计算机MarkⅠ,使巴贝奇的梦想变成现实。MarkⅠ作为世界上最早的通用型自动程序控制计算机之一,是计算机技术历史上的一个重大突破,如图1-3所示。

图1-2 巴贝奇和他的发明

图1-3 艾肯和Mark I
20世纪20年代以后,电子科学技术和电子工业迅速发展(如电子管、晶体管和集成电路相继诞生),为现代电子计算机的产生提供了物质基础和技术条件。
美国爱荷华州立大学的约翰·文森特·阿塔纳索夫(John Vincent Atanasoff)教授和他的研究生克里福特·贝瑞(Clifford Berry),于1942年10月研制成第一台完全采用真空管作为存储与运算器件的计算机“阿塔纳索夫-贝瑞计算机”(Atanasoff-Berry Computer),简称ABC,如图1-4所示。ABC计算机被认为是最早的电子管计算机。阿塔纳索夫在研制ABC计算机的过程中提出计算机设计的三条原则:使用二进制来实现数字运算,以保证精度;利用电子元件和技术实现控制、逻辑运算和算术运算,以保证计算速度;采用计算功能和存储功能相分离的结构。这三条原则对后来计算机的体系结构及逻辑设计带来深远的影响。

图1-4 ABC计算机和它的发明者
任何事物的产生都是有起因的。同以往的许多重大发明一样,现代电子计算机的诞生是同军事上的迫切需要紧密相连的。战争的需要像一双强有力的巨手,给电子计算机的诞生铺平了道路。第二次世界大战期间,美国陆军军械部在马里兰州的阿伯丁设立了“弹道研究实验室”,该实验室每天要为陆军提供6张火力表,每张表要计算几百条弹道轨迹。而当时一个熟练的计算人员用台式计算器计算一条60s的弹道就需要20多个小时,还常常出现计算错误。更为关键的是,由于美军进入非洲作战,土质带来的差别导致炮弹根本打不中目标,所以军方领导人命令弹道实验室重新编制射击表。时任弹道实验室的领导人赫尔曼·戈德斯坦(Herman H.Goldstine)估算出,为某一型号、某一口径的火炮重新编制射击表,需要一个人用台式计算器不吃不喝4~5年才能完成。计算需求和计算能力之间的矛盾日益突出,作为数学家的戈德斯坦意识到研制一种高速新型计算机的迫切性。于是,在戈德斯坦的推动和组织下,陆军军械部着手与宾夕法尼亚大学莫尔电气工程学院联合开发电子计算机。1942年,莫尔学院的两位青年学者——36岁的副教授约翰·莫克利(John Mauchly)和24岁的工程师约翰·普雷斯伯·埃克特(John Presper Eckert)(见图1-5)提交了一份研制电子计算机的设计方案——高速电子管计算装置的使用。他们建议用电子管作为主要元件,制造一台前所未有的计算机,把弹道计算的效率提高成百上千倍。同年4月9日,陆军军械部通过这份报告。1943年7月,项目开始正式实施。莫尔学院组50名技术人员投入该项研究,莫克利作为顾问负责总体设计,埃克特担任总工程师。军方与莫尔学院签订的协议是提供14万美元的研制经费,但后来合同被修改了12次,经费一直追加到约48.68万美元,相当于现在的1000多万美元。

图1-5 埃克特(左)和莫克利
然而,为支援战争而赶制的机器没能在战争期间完成,直到1946年2月14日,这台标志着人类计算工具的历史性变革的电子计算机才研制成功,这台机器的名字叫ENIAC(Electronic Numerical Integrator And Calculator,电子数字积分计算机),如图1-6所示。ENIAC占地170m2,重30t,有18000个电子管,功率为150kW,运算速度为加法5000次/s或乘法400次/s。这比当时最快的继电器计算机的运算速度要快1000多倍。过去需要100多名工程师花费1年才能解决的计算问题,它只需要2个小时就能给出答案。

图1-6 世界上第一台电子计算机ENIAC
尽管ENIAC有许多不足之处,如使用十进制、不能存储程序、体积庞大、耗电量大、电子元件寿命短、故障率高、操作困难等,但它毕竟是世界上第一台真正意义上的数字电子计算机。ENIAC的问世具有划时代的意义,它揭开了现代计算机时代的序幕,标志着人类计算工具的历史性变革,为提高计算速度开辟了极为广阔的前景,也标志着人类文明的一个新起点。ENIAC的产生历程也充分表明,一项重大发明只有为社会发展所迫切需要,才能脱颖而出。反之,如果社会没有这方面的需求,多么美妙的设想也逃脱不掉被历史所淘汰的命运。电子计算机制造技术在20世纪30年代已经成熟,而在20世纪40年代才真正制造出来,也正是这个原因。

图1-7 约翰·冯·诺依曼
1944年,美籍匈牙利数学家约翰·冯·诺依曼(John von Neumann)(见图1-7)参加的原子弹研制项目受阻,原因同样是遇到了极为困难的计算问题。冯·诺依曼在一次偶然的机会中得知ENIAC的研制计划,便投身到这一宏伟的事业中。冯·诺依曼与埃克特、莫克利等人讨论ENIAC的不足,于1945年6月拟定了存储程序式电子计算机方案EDVAC(Electronic Discrete Variable Automatic Computer,离散变量自动电子计算机)。该方案指出了计算机应由五部分构成,提出了程序存储的思想,成为电子计算机设计的基本原则。根据这些原理制造的计算机称为冯·诺依曼结构计算机。由于诺依曼的突出贡献,他被西方人称为计算机之父。冯·诺依曼等人于1952年研制成功EDVAC。EDVAC采用二进制,使用了3600个电子管,占地面积不足ENIAC的1/3。而世界上首台“存储程序式”电子计算机EDSAC(Electronic Delay Storage Automatic Calculator,电子延迟存储自动计算机)是由剑桥大学的莫里斯·威尔克斯(Maurice V.Wilkes)教授在诺依曼EDVAC草案的启发下,于1949年5月研制成功。