第一部分
硬件
“我向上帝祈愿,希望计算能利用蒸汽进行。”
——查尔斯·巴贝奇,1821年。
选自哈里·威尔莫特·巴克斯顿的《查尔斯·巴贝奇晚年生活和工作回忆录》,1872年
硬件是计算中固态的、可见的部分:你可以看到并用手接触的设备和器材。计算设备的历史很有趣,但我这里只提一小部分。不过,有些趋势值得注意,特别是以一定的成本,在给定的空间中可以集成的电路和设备数量随时间推移而呈指数级增长的趋势。随着数字设备变得越来越便宜、功能越来越强大,迥然不同的机械系统已被更加统一的电子系统所取代。
计算机器有着悠久的历史,然而早期的计算设备都是专用的,通常用于预测天文事件和位置。例如,一种假说认为巨石阵是一个天文观测台,虽然这个假说未经证实。大约公元前100年出现的安提凯希拉装置(Antikythera mechanism)就是一种有着极其精密的机械构造的天文计算机。算盘之类的算术工具已经有上千年的使用历史,尤其是在亚洲地区。在约翰·纳皮耶(John Napier)描述了对数之后不久,计算尺就于17世纪早期被发明出来。我在20世纪60年代学习本科的工程知识时曾使用过计算尺,但现在计算尺已经变得难得一见,它们被计算器和计算机取代,我当时辛辛苦苦获得的学习经验也变得毫无意义。
和现代计算机最接近的先驱是雅卡尔提花织机,在1800年左右由法国的约瑟夫·马里·雅卡尔(Joseph Marie Jacquard)发明。雅卡尔提花织机通过多行打孔的矩形卡片来确定特定的编织图案。因此,这种提花织机是“可编程的”,可以通过打孔卡片提供的指令来控制编织的图案。这种可节省人力的纺织机械的发明,导致很多编织工人失去了工作,并因此引发了社会混乱。1811~1816年在英国发生的卢德运动就是一场针对机械化的暴力抗议。现代计算机技术也曾造成类似的混乱。
现代意义上的计算始于19世纪中期的英国,源于查尔斯·巴贝奇(Charles Babbage)的工作。巴贝奇是一位对航海和天文学感兴趣的科学家,这两门学科都需要用数值表来计算位置。巴贝奇一生中的大部分时间都在尝试制造计算设备,以便将创建表格甚至打印表格所需的烦琐且容易出错的手工计算机械化。通过前面的引言,你可以感觉出他对于计算的烦恼。由于各种各样的原因,包括疏远了他的财务支持者,他没能成功实现自己的雄心,但他的设计是合理的。在伦敦科学博物馆和加州山景城的计算机历史博物馆,可以看到他的一些机器的现代实现,这些机器是用他那个时代的工具和材料建造的(见图I.1)。
图I.1 查尔斯·巴贝奇(Charles Babbage)的差分机的现代还原版
在巴贝奇的激励下,一位名叫奥古斯塔·艾达·拜伦(Augusta Ada Byron)的年轻女子对数学和他的计算设备产生了兴趣,她是诗人乔治·拜伦(George Byron)的女儿,后来的洛芙莱斯伯爵夫人(Countess of Lovelace)。洛夫莱斯详细描述了如何使用巴贝奇的分析机(他所设计的最先进设备)进行科学计算,并预言机器也可以进行非数值计算,比如作曲。“例如,假设和声科学和音乐作曲中音调的基本关系可以被这样表达和改编,机器就可以创作出任何复杂程度或范围的精致而科学的音乐作品。”艾达·洛芙莱斯通常被认为是世界上第一个程序员,Ada编程语言也以她的名字命名(见图I.2)。
赫尔曼·霍尔瑞斯(Herman Hollerith)于19世纪末与美国人口普查局(US Census Bureau)合作,设计并制造了能够比手工更快地将人口普查信息制成表格的机器。借助雅卡尔织布机的创意,霍尔瑞斯在硬纸卡片上打孔,将人口普查数据编码成他的机器可以处理的格式。广为人知的是,1880年的人口普查用了8年的时间才全部制成表格,但由于有了霍尔瑞斯的打孔卡和制表机,1890年的人口普查只花了1年,而不是预计的10年或更长时间。霍尔瑞斯创立了一家公司,通过多次合并和收购,1924年这家公司成为国际商业机器公司,也就是我们今天所知的IBM。
图I.2 艾达·洛芙莱斯。细节来自玛格丽特·莎拉·卡彭特于1836年绘制的肖像
巴贝奇的机器是由齿轮、车轮、杠杆和拉杆构成的复杂机械组合。20世纪电器的发展使不依赖于机械组件的计算机成为可能。第一个完全由电器组成的计算机是ENIAC(Electronic Numerical Integrator and Computer,电子数字积分计算机)。ENIAC于20世纪40年代由普瑞斯柏·埃克特(Presper Eckert)和约翰·莫克利(John Mauchly)于位于费城的宾夕法尼亚大学建造,它占据了一个很大的房间,并且需要大量的电力支持。它每秒钟可以做5000次加法。ENIAC计划用于弹道计算等领域,但是直到1946年才建造出来。ENIAC的一些部件目前在宾夕法尼亚大学的摩尔工程学院展出。
巴贝奇清楚地看到,计算设备可以将操作指令和数据以相同的方式存储,但是ENIAC并没有将指令和数据都保存在内存里。相反,它通过利用开关设置连接和重新布线进行编程。第一台真正将程序和数据存储在一起的计算机是在英国建造的,最著名的是EDSAC(Electronic Delay Storage Automatic Calculator),即电子延迟存储自动计算器,于1949年在剑桥建成。
早期的电子计算机用真空管作为计算元件。真空管是大小、形状和圆柱形电灯泡类似的电子设备(见图1.7)。它们不仅贵,而且脆弱、笨重,能耗也很高。随着1947年晶体管的发明,以及1958年集成电路的发明,现代计算机时代才真正开始。这些技术使电子系统逐渐变得更小,更便宜,并且更快。
接下来的3章将介绍计算机硬件,重点关注计算系统的逻辑体系结构而非物理细节。计算机的体系结构几十年来都大体不变,而硬件则以一种令人吃惊速度发生着改变。第1章是对计算机结构和组件的概述,第2章将展示计算机如何用比特、字节和二进制数字表示信息,第3章将阐述计算机是如何实际进行计算的,即如何处理比特和字节以完成一切。