1.2 计算简史
计算机到底是谁发明的?不同的人可能会有不同的答案,因为很多人都为计算机的诞生贡献了力量,计算机的诞生凝聚了无数人的智慧。下面主要介绍计算发展史中的里程碑阶段。
1.2.1 古典计算
1.结绳
原始社会的人类只能借助外物的帮助来计数,比如用在绳子上打结的方法,如图1.7所示。中国古书《易经》的《系辞》里曾记载:“上古结绳而治,后世圣人,易之以书契。”在4 000多年前的甲骨文中,“数”字的表示方法为左边形如一根绳上打了许多结,上下有被拴在主绳上的细绳,右边则是一只手,这表示古人是用结绳来计数的,如图1.8所示。传说古波斯王有一次外出打仗,命令手下将士守桥60天。为了让将士们不少守一天也不多守一天,波斯王在一根长长的皮条上系了60个扣。他对守桥的官兵说:“我走后你们一天解一个扣,什么时候解完了,你们就可以回家了。”
图1.7 结绳示意
图1.8 “数”的甲骨文表示
2.算筹
从现存文献和出土文物来看,算筹是春秋战国时期的主要计算工具。算筹通常是用木、竹、骨等材料制成的横截面为圆形、方形或三角形的小棍,如图1.9所示。《孙子算经》是目前已知的最早记载算筹记数规则的著作。算筹的摆放方式分为横式和纵式两种,不同的摆放方式表示不同的数字,如图1.10所示。算筹记数制十分明确地体现了十进制记数法,便利简洁。
图1.9 算筹示意
图1.10 古代算筹记数的摆法
与当时的其他记数法相比,算筹具有极大的优越性。按照纵横相间的摆放原则可以表示任意自然数,从而进行加、减、乘、除运算。用算筹进行加、减运算比较简单。进行加法运算时,将加数和被加数分别摆在两行上,接着从高位开始,从左向右依次计算各位数值的相加结果。这和现在流行的笔算恰好相反,笔算是从低位开始,从右向左依次计算。减法运算与加法运算类似。负数出现后,算筹分为红黑两种。魏晋数学家刘徽在《九章算术》里写到:“正算赤,负算黑,否则以邪正为异。”也就是说红筹表示正数,黑筹表示负数,如果黑色的算筹不够用,就用斜放的算筹表示负数。北宋著名科学家沈括在《梦溪笔谈》卷八中曾写到:“算法用赤筹、黑筹,以别正负之数。”《汉书·律历志》中记载:“其算法用竹,径一分,长六寸,二百七十一枚而成六觚,为一握。”这说明在西汉时算筹一般用圆形的竹棍,通常把二百七十一枚筹捆成六角形的捆。到了隋朝,算筹渐渐变得短小,造型由圆柱形变成了棱柱形,使用三棱的算筹表示正数,四棱的算筹表示负数。
3.算盘
随着商业贸易的不断发展,需要计算的数据越来越多,为了提升运算速度并解决携带方便等问题,人们对算筹进行了改进,算盘由此产生。制造算盘的材质多种多样,有铜的、金的、玉的等,最常见的是竹木的,如图1.11和图1.12所示。它结合了十进制计数法,可以进行加、减、乘、除运算。算盘上粒粒算珠的上下移动,可以使计算者直观地看到加、减、乘、除运算的过程。时至今日,用算盘计算加、减运算的速度毫不逊色于计算器。算珠互相碰撞及算珠与横档碰撞发出的有节奏的声音,形成一首美妙的“计算进行曲”。
图1.11 金属算盘
图1.12 木质算盘
珠算是以算盘为工具进行数字计算的一种方法,被誉为“中国第五大发明”。2013年12月,联合国教科文组织宣布,中国珠算正式成为人类非物质文化遗产。由于用算盘计算有这么多的优点,目前这个计算工具在世界各地仍得到广泛应用。在受中国文化影响比较深的日本,珠算技术的传授及普及教育一直受到重视。日本的小学生把读书、写字、打算盘列为三大基本功,日本的珠算教育在世界上处于领先地位。远在南美洲的巴西也成立了珠算联盟,每年都会举办珠算大赛。北美洲的墨西哥建有全国珠算支部,美国建有珠算教育中心。
1.2.2 机械计算
1.加法机
法国人布莱士·帕斯卡于1645年制造出了一种机械式加法机,它是世界上第一台机械式数字计算机,如图1.13所示。帕斯卡聪颖博学,在数学、物理等领域都做出了杰出的贡献,比如物理学中流体对压强的传递原理(帕斯卡定理)就是他发现的。在帕斯卡的众多成果中,最让他感到满意和自豪的还是这台加法机。因为它不但实现了帕斯卡童年的梦想,而且这种计算器所进行的工作接近人类的思维。试图用机械来模拟人的思维,也许是行不通的,然而这种想法正是现代计算机发展的出发点,帕斯卡对计算机的发展做出了突出贡献。
图1.13 帕斯卡加法机
帕斯卡加法机的用户界面由输入轮、补码的内轮、两个相邻辐条的标注以及系数轮这4部分组成。从图1.13中可以看到,在加法器上方有一排窗口,每一个窗口下都对应一个刻着0~9这10个数字的拨盘,拨盘通过盒子内部的齿轮相互咬合。最右侧的窗口代表个位,与之对应的齿轮转动10圈,紧挨近它的代表十位的齿轮才能转动一圈,以此类推。在进行加法运算时,每一拨盘都要手动置0,即先拨到“0”的位置,这样每一窗口都显示“0”,然后拨被加数,再拨加数,窗口就显示出和数。在进行减法运算时,先要把计算器上面的金属直尺往前推,盖住上面的加法窗口,露出减法窗口,接着拨被减数,再拨减数,差值就自动显示在窗口上。
2.差分机
在那个没有计算器和计算机的时代,最快的计算方式是查表。但是人工制表费时费力,并且难免有计算错误、抄写错误、校对错误、印制错误等各种各样的问题存在。查尔斯·巴贝奇(Charles Babbage)在剑桥求学时,发现了这个现象,于是就将改善制表时的各种问题当作了毕生的志愿。1822年,他成功研制出第一台差分机模型,如图1.14所示。该模型不仅能够按照设计者的意愿,自动处理不同函数的计算过程,还能提高乘法速度、改进对数表等数字表的精确度。
图1.14 差分机
差分机又称作差分引擎,差分机其实可以理解为一台多项式求值机,只要将欲求解的一元多次方程式输入机器里,机器每运转一轮,就能产生出一个值。假设我们使用差分机求解F(x)=x2+4的值,机器输出的结果就是F(1) = 5,F(2) = 8,F(3) = 13,F(4) =20,…,直到系统停止。
3.分析机
1834年,查尔斯·巴贝奇成功设计出了分析机引擎,如图1.15所示。与差分机不同的是,它的机械结构被拆分成了计算单元和存储单元这两部分,其中计算单元不但内建四则运算,而且可以存储4组不同的运算方程式,用穿孔卡片加载到机器里,最后的结果可以选择印刷、打卡、绘图等多种输出方式。从某些方面来说,其计算、存储、I/O 三者相分离的设计和今天的计算机并无区别。但遗憾的是,分析机引擎只停留在了设计阶段,并没有研制出实体机。
图1.15 分析机
提到分析机还不得不提一个人,那就是阿达·洛芙莱斯(Ada Lovelace)。阿达是英国著名诗人拜伦之女、巴贝奇的好朋友兼合作伙伴,阿达写了有关分析机的文章,将巴贝奇的一些具体的观点发展成更加抽象的概念,在通用计算方面做出了不可小觑的贡献。阿达在她的笔记中曾说过:“无论如何编程,分析机都不能自己做出决策。它只能完成我们让它做的事情,只能协助证明我们已经懂得的东西。”阿达的观点和传统的编程观点不谋而合:工程师通过编程只能做我们已经知道如何去做的工作。阿达的笔记中最经典的部分就是她在巴贝奇分析机上设计的求解伯努利方程的一个程序,并证明当时巴贝奇的分析器可以用于许多问题的求解。她甚至还建立了循环和子程序的概念。由于她在程序设计上的开创性工作,阿达被称为世界上第一位程序员,她设计的求解伯努利方程的程序也被看作世界上第一个程序。
1.2.3 电子计算
1.第一代电子管计算机
电子管计算机的主要特征是采用电子管元件作为基本器件,用光屏管或汞时延电路作为存储器,输入与输出主要采用穿孔卡片或纸带,存在体积大、存储容量小、可维护性差等缺陷。这一时期计算机的主要用途是进行科学计算,具有代表性的机器有阿塔纳索夫·贝瑞计算机、电子数字积分计算机(Electronic Numerical and Calculator,ENIAC)等。
阿塔纳索夫·贝瑞计算机是约翰·文森特·阿塔纳索夫(John Vincent Atanasoff)和克利福特·贝瑞(Clifford Berry)在1942年设计完成的,如图1.16所示。它是世界上第一台电子计算机,虽然只可用于求解线性方程组问题,但是却标志着计算机从模拟时代向数字时代的转变。
图1.16 阿塔纳索夫·贝瑞计算机模型
阿塔纳索夫曾是美国爱荷华州立大学的物理兼数学教授,20世纪30年代中期,由于课题需要完成大量的计算,而现有计算工具难以满足需要,因此阿塔纳索夫产生了研制计算机的念头,想以此来提高计算速度。他曾经尝试用一个公共轴驱动将30台门罗计算器(机械计算机的一种)连接起来,但这样做并没有将计算速度提高多少,而且这种方法的缺陷是存在很大的误差率。在这段时间内,他几乎把当时可用的各种计算工具(如机械式和机电式计算器、穿孔卡片计算机、微分分析器)都尝试了个遍也没有找到最理想的解决方法。但他始终没有放弃,直到1937年的冬天,他在一个小酒馆内吃饭时突然找到了创造灵感。首先是使用二进制进行计算,这样可以让机器更加准确地工作。但是二进制的存储是一个问题,存储这些0、1数值需要使用大量的电子管,当时电子管的价格十分昂贵,仅数字寄存器这一项所需的费用就超过了2 000美元,大大超出了预算,因此他不得不考虑用廉价的物品来替代电子管。他想到了价格低廉的电容,用电容的充电和未充电状态来表示0和1。他飞速地将思路记录到餐馆提供的纸巾上,接着画出了一个粗陋的电容滚筒,这种滚筒看上去类似于自行车链条驱动系统。正是这个灵感,使通过建立一种能直接处理两个二进制数的电路,就可以电子化地计算出结果成为可能。
有了最初的设计思想还需要进一步实施,阿塔纳索夫和他的助手克利福特·贝瑞经过几年的不懈努力,于1942年顺利研制成计算机,阿塔纳索夫将其命名为Atanasoff-Berry Computer,用以纪念他和贝瑞的合作成果以及贝瑞在此过程中的突出贡献。
1946年2月14日,美国宾夕法尼亚大学以莫奇利(Mauchiy)和埃克特(Eckert)为首的项目组对外宣布成功研制了世界上第一台通用计算机——ENIAC,如图1.17所示。它也是继阿塔纳索夫·贝瑞计算机之后的第二台电子计算机,在计算机发展史上具有极其重大的意义,标志着电子计算机时代的到来。
图1.17 ENIAC
最初研制ENIAC是为了战争需要。当时美国阿伯丁弹道研究室计算射程表,每天计算6张,每张都要计算几百条弹道,而每条弹道的数学模型都是一组非常复杂的非线性方程组。在战争年代,时间就是胜利,为了能够实现快速计算,在美国军方的支持下,当时在宾夕法尼亚大学莫尔电机工程学院的莫奇利带领他的项目组成员埃克特等开始了电子计算机的研制工作。在研究过程中,著名数学家冯·诺依曼加入了研制小组并对计算机中许多关键性问题的解决做出了巨大的贡献。
经过两年多的艰苦奋斗,1946年ENIAC正式诞生,其长30.48 m,宽6 m,高2.4 m,占地面积约170 m2,共有30个操作台,包含17 468根真空管,7 200根晶体二极管,耗电量150 kW·h,造价48万美元。在ENIAC诞生前,使用微分机计算60 s射程弹道轨迹需要20 min,现在使用ENIAC只要30 s就可以完成。埃克特曾在一次专访中透露,ENIAC第一次真正被使用是“氢弹之父”爱德华·泰勒利用其完成氢弹研制过程中的计算工作。由于冯·诺依曼参与了“曼哈顿计划”,因此ENIAC还曾用于计算第一颗原子弹的关键方程的解。宾夕法尼亚大学为了纪念ENIAC的诞生在校园内建造了标示牌,如图1.18所示。
图1.18 校园内的标示牌
你可能会觉得奇怪,因为从初高中的记忆来看ENIAC才是世界上第一台电子计算机,怎么这里却说阿塔纳索夫·贝瑞计算机是电子计算机的鼻祖呢?其实关于谁是世界上第一台电子计算机的争论持续了很长的时间,直到1973年10月,明尼苏达州一家地方法院在经过135次开庭审理的漫长过程后,才宣判世界上第一台电子计算机是阿塔纳索夫·贝瑞计算机,而不是ENIAC。因为早在1941年莫奇利就到阿塔纳索夫所在的爱荷华州立大学参观过阿塔纳索夫·贝瑞计算机,并且阿塔纳索夫还为他就机器进行了详细的讲解,莫奇利和埃克特在研制ENIAC时借鉴了阿塔纳索夫·贝瑞计算机的主要设计思想,所以判定莫奇利和埃克特的专利无效。因此现在公认的世界上第一台电子计算机是阿塔纳索夫·贝瑞计算机。
2.第二代晶体管计算机
说到晶体管,首先想到的应该是被誉为晶体管之父的威廉·肖克利(William Shockley)。
其实晶体管并不是肖克利发明的。1945年,肖克利在经过多次尝试后始终没有成功研制出半导体晶体管,于是他将这项研究工作交给了同在贝尔实验室的同事约翰·巴丁(John Bardeen)和瓦尔特·布拉顿(Walter Brattain)。这两个人经过两年多紧张的工作,终于在1947年12月成功构造出了世界上第一个半导体晶体管。肖克利在为两人感到高兴的同时也为自己没有亲眼见证晶体管的发明过程而深感遗憾。他在半导体晶体管的基础上进行了研究和改进,不久成功研制了一种性能更高、实用性更强的半导体三极管。由于具有良好的性能,因此很多年后肖克利设计的晶体管一直拥有很高的市场占有率。
晶体管由于体积小、重量轻、效率高、发热少的特点得到了科学家的青睐,因此促使计算机的发展产生了根本性的变化。随着20世纪50年代晶体管的产生,此时的计算机开始使用晶体管作为计算机的基本器件而不再使用原来的电子管,并使用磁芯或磁鼓作为存储器,整体性能较第一代计算机有了很大提高。该阶段的计算机除了用于科学计算外,还可以进行数据处理、过程控制等操作,具有典型特点的机器有UNIVAC-1、IBM 701、TRADIC、IBM 1401等。
UNIVAC-1是1951年由莫奇利和埃克特研发的第一台商用计算机,该机器被美国人口普查局用于人口普查,标志着计算机进入商业应用时代。
1953年4月,IBM正式对外发布自己的第一台电子计算机 IBM 701,如图1.19所示。它是IBM第一台商用科学计算机,也是第一款批量制造的大型计算机,还是世界上一个里程碑式的产品。
图1.19 IBM 701
TRADIC是1954年由贝尔实验室成功研发的世界上第一台全晶体管计算机,如图1.20所示,该计算机由800只晶体管组装完成。
图1.20 TRADIC
1958年,IBM 1401研制成功。IBM公司宣称这是第一台低价通用性计算机,用户可以租用机器。它也是当时最容易编程的机器,在易用性方面有了很大改进。
3.第三代集成电路计算机
第三代计算机的发展建立在集成电路技术的基础之上,其硬件的各个组成部分,从微处理器、存储器到输入/输出设备,都应用了集成电路技术。同晶体管计算机相比,集成电路计算机具有体积小、价格低、高可靠、速度快的优势,具有典型特点的机器有IBM System/360,如图1.21所示。
图1.21 IBM System/360
20世纪60年代左右,IBM公司已经成为计算机界的翘楚,公司营业额稳步上升,并且成功实现了从真空管向晶体管的过渡。时任IBM公司总裁的小托马斯·沃森并没有因为眼前的繁荣而懈怠,他发现了隐藏的危机。公司当时在售的几款计算机基本上存在一个共性问题,那就是这些计算机互不相干,它们具有不同的内部结构、处理器、程序设计软件和外部设备。其实不只是IBM公司,当时计算机行业基本上都存在这一普遍问题。由于这种原因,沃森经常会收到用户的抱怨,每次用户因为业务需要更换计算机都是一件非常麻烦的事,不仅要更换计算机本身,也要更换外部设备,并且还需要重新编写程序,移植过程耗费了大量的人力和时间。为了解决这一问题,沃森找来负责开发和生产的副总裁文森·利尔森,让他全权负责此事。利尔森就该问题和公司的主要技术骨干进行讨论研究,一部分研究人员提出了一种计算机家族的概念。为了实现该方案,利尔森从核心技术组中抽调了13人专门研究该方案,经过两个月的紧张工作,“处理机产品——SPREAD工作组的最后报告”终于在1961年12月28日诞生了,这就是IBM System/360的总体设计方案。除了具有良好的通用性外,IBM System/360的另一个显著特点是该家族的所有计算机系统都具有相同的体系结构和相同标准的指令系统、地址格式、数据格式和外部设备接口。当用户因业务需要更换计算机时,应用程序和外部设备不需要做任何变动,节省了大量时间,大大提高了工作效率。
1964年4月,IBM公司成功研制了世界上第一台采用集成电路技术设计的通用计算机IBM System/360,它可以同时实现科学计算和事务处理两个方面的应用。IBM System/360系列是最早采用集成电路技术的通用计算机系列,开创了民用计算机使用集成电路的先例,标志着计算机由此进入集成电路计算机时代。IBM System/360是第三代集成电路计算机的里程碑产品。
IBM System/360系列推出后获得了巨大的成功。1966年,IBM System/360系列计算机销售量达8 000多台,IBM System/360系列为IBM公司的成功做出了很大的贡献。
4.第四代大规模集成电路计算机
第四代计算机仍然使用集成电路作为基础元件,但是与第三代计算机不同的是,它使用的集成电路有了较大改善,使用的晶体管数量也上升到几十万甚至上百万个,因此称第四代计算机为大规模和超大规模集成电路计算机。第四代计算机的另一个重要特点是在大规模和超大规模集成电路的基础上,微处理器和微型计算机得到了快速发展。
1971年,英特尔(Intel)公司研制出世界上第一个微处理器Intel 4004,如图1.22所示。它利用大规模集成电路将运算器和控制器做到一块芯片上,虽然字长只有4位,并且功能还有待完善,但是它却是第四代计算机在微型处理器方面发展的先锋,为以后计算机的发展指明了方向。1971年,Intel公司研制出MCS4微型计算机,其采用Intel 4040处理器,是世界上第一台4位微型计算机。
图1.22 Intel 4004
1972年,世界上第一台8位微处理器问世,该处理器是由Intel公司研发的,命名为Intel 8008。它的产生促使众多厂商相继开始研发相应产品,微处理器得到了蓬勃发展,后来又接连出现了Intel 8080、Motorola 6800、ZILOG Z-80等产品。1975年1月,美国MITS公司成功研制了首台通用型Altair 8800计算机,它采用了Intel 8080微处理器,是世界上第一台8位微型计算机,如图1.23所示。
图1.23 Altair 8800计算机
1978年,Intel公司率先推出了16位微处理器Intel 8086,如图1.24所示。计算机的发展进入了一个新高峰,随后产生的比较有代表性的处理器包括ZILOG公司研制的Z-8000和Motorola公司研制的MC68000。该阶段具有代表性的微型计算机是苹果公司的Macintosh和IBM公司的AT286。
图1.24 Intel 8086
1985年,Intel公司成功研制出了32位微处理器Intel 80386DX(简称Intel 80386),如图1.25所示,标志着计算机从16位时代进入32位时代。386、486是微型计算机的初期产品。由于32位微处理器的强大运算能力,微型计算机被应用到商业办公、工程设计、数据处理、个人娱乐等多个领域。Intel 80386使32位CPU成为微型计算机的工业标准。
图1.25 Intel 80386