历史上的计算机
现代数字计算机出现以来,人们已经设计制造出几百种不同类型的计算机。出于对不同时代的计算机是如何运作又长什么样子的好奇,我查阅了一些资料将其中具有代表性的机器记录下来。
第零代:机械计算机(1642-1945)
建造出第一台能工作的计算机器的人是法国科学家 Blaise Pascal (1623-1662),于 1642 年完成,当时他只有19岁,整台机器是纯机械设备,使用齿轮传动,用手柄驱动,只能做加法和减法。30 年后,德国数学家 Leibniz (1646-1716) 制造出还能做乘法和除法的另一台机械计算机。
bilibili - 国产手摇机械计算机,拆开看看50年前它巧妙的工业设计和机械原理
上面这台机器就是通过手柄驱动的具有加减乘除功能的机械计算机,并且是 1972 年国产的,Leibniz 首次制造出的这种计算机的 300 年后还在我国量产使用。
bilibili - 【3D仿真动画】手摇机械计算器原理完全讲解
上面这种手摇机械计算机名为 Curta,它是 1948 年由奥地利工程师 Curt Herzstark 发明的,他当时的价格相等于 111 克黄金,目前作为收藏品的价格更是相当于一台最顶配的 MacBook 笔记本电脑。它巧妙的设计使尺寸大大减小,其中减法与现代计算机一样通过补码将减法转换成加法来运算,比如 1 - 1 就可以转换成 1 + 9 来实现,因为齿轮只有 0~9 十个刻度,所以运算超过 9 之后即变为了 0。
虽然这两种机械计算机都有着精妙的机械结构设计,并为当时的使用者提供了很大的便利,但是它们的功能其实只相当于现代一台 4 功能的袖珍电子计算器,而且因为需要手摇手柄驱动,计算速度还远远不及电子计算器。
Leibniz 之后的 150 年计算机没有大的发展,直到剑桥大学的数学教授 Charles Babbage (1792-1871) 设计和制造出了差分机,只能运行一个算法,即用多项式计算有限差分,主要为海军导航计算数据表。
但是 Babbage 对这种只能运行一种算法的机器并不满足,他花费了大量家财以及时间去设计和制作一种通用计算机——分析机,它由四部分组成:存储部分(存储器)、计算部分(计算部件)、输入部分(读卡器)和输出部分(打孔输出)。
分析机最大的进步就在于他是通用的,它可以从穿孔卡片上读取指令,然后执行指令。它的部分指令用来指示机器从存储部分读出两个数,将他们送入计算部分,对他们进行计算,再将结果送回到存储部分,另外一部分指令可以检测一个数为正数还是负数,根据检测结果进行分支转移。不同的穿孔卡片可以运行不同的算法。
把穿孔卡片想象成现代的软件程序,分析机的构思就是现代很多计算机的雏形,Babbage 也曾雇佣了一位名叫 Augusta Ada Lovelace 的年轻妇女来编制分析机的软件。这样 Ada Lovelace 可称得上是世界上第一个程序员。
不幸的是,Babbage 没有将硬件的错误完全解决,根本原因是他需要成千上万个各种高精度的齿轮,而以十九世纪的技术提供不了这些零件,他的思想远远地超过了他所处的时代,Babbage 也被称为现代数字计算机之父。
计算机发展史上的下一个进步发生在 20 世纪 30 年代后期,一个学工程的德国学生 Konrad Zuse 用电磁继电器制造了一系列自动计算机。Zuse 不知道 Babbage 的工作,而且他的机器也在 1944 年盟军轰炸柏林时被损坏,因此他的工作对后来的机器没有太大的影响,但仍要说他是计算机领域的先锋之一。
上图是现代常见的电磁继电器,电磁继电器是利用输入电路内电流在电磁铁铁芯与衔铁间产生的吸力作用而工作的一种电气继电器。这时候制作出来的计算机开始通电,不再是以往手摇手柄驱动了,由齿轮的转动转化成电路是否连通来表示信号,这也就意味着计算机获得了自动计算的能力和更快的计算速度。
此后不久,在美国也有两个人设计出电磁继电器计算机,一位是爱荷华州立大学 John Atanasoff,他的机器也超越了他所处的时代,使用二进制算术,用电容作存储器,定时刷新以保持电容的电量不变,他把这个过程称为反复启动存储器,与现代的动态存储器(DRAM)芯片的原理完全一样,不幸的是他的机器最终也没有真正运行起来,与 Babbage 一样被他们所处时代的技术缺陷击垮。另一位是贝尔实验室的 George Stibitz,他的机器虽然比 Atanasoff 的更原始一些,但却能真正运行起来。
下图是一个由约 500 个继电器组成的计算机,下面的视频链接中演示用这台计算机和编制的程序计算某一天是星期几。它在 2001 年至 2006 年 10 月期间开发和制造(用时 5 年)。
bilibili - R500/7T 继电器计算机 R500/7T Relay Computer
youtube - R500/7T Relay Computer
同时期,Howard Aiken 在图书馆中发现了 Babbage 的工作,决定用继电器完成 Babbage 用齿轮没有造出来的通用计算机,他的第一台计算机 Mark I 于 1944 年在哈弗完成,有 72 个字,每个字有 23 个十进制位,指令周期为 6 秒,76 万 5 千个组件,300 万个连接点,约 805 公里的导线,主要用于为曼哈顿计划即美国陆军部研制原子弹计划跑模拟。等到 Aiken 完成后续机型 Mark II 时继电器时代过时了,电子计算机的时代开始了。
bilibili - 1944 计算机历史: IBM ASCC "马克一号" 世界最大自动按序控制计算器
第一代:电子管计算机(1945-1955)
继电器中的机械臂是有质量的,因此无法快速开关,1940 年代一个好的继电器一秒钟可以翻转 50 次,看起来已经很快了,但是还不够快, 不足以解决更为复杂的问题,除了速度不够之外,任何机械都会随时间磨损,变得不可靠,并且随着继电器数目的增加故障概率也会增加。上文提到的 Mark II 计算机,它巨大温暖的机箱也会吸引昆虫,1947 年有操作员从故障的继电器中拔出了一只虫子,自那之后计算机出现故障会说它出现了 bug。因为这些缺陷,引出了计算机的下一个发展阶段。
1904 年,世界上第一只电子二极管在英国物理学家 Fleming 的手下诞生了。想象两个电极即两块金属板被封装在一个真空空间当中,其中一个电极可以被加热从而形成电子的加速运动,以至能够摆脱金属板本身对它们的吸引而逃逸到金属表面以外的空间。另一个带正电荷的电极吸引这些电子,流经电源而形成回路电流。若另一电极带负电荷或者中性电荷,则电子就没有办法越过真空区域,从而形成电流。这种电流只能单向流动的电子部件就叫做二极管。
1906 年,美国发明家 Lee de Forest 发明了三极管,他在 Fleming 设计的两个电极之间加入了第三个控制电极,向第三个控制电极施加正电荷,它会允许电流流动,施加负电流则会阻止电流流动。
因此通过三极管的控制线路,可以控制电路开启或者关闭,和继电器的功能一样,但是电子管内没有开闭的机械装置,减少了磨损,关键的是电子管每秒可以开闭数千次。虽然电子管像灯泡一样容易被烧坏,还很脆弱,但是比起机械继电器是一次巨大的进步。1940年代电子管的成本和可靠性得到有效控制,逐渐应用到计算机当中,标志着计算机从机电转向电子。
第一个大规模使用真空管的是被称为 COLOSSUS 的计算机,用于破解纳粹通信,由著名的英国数学家 Alan Turing 帮助设计,于 1943 年开始运行。它被认为是世界上第一台可编程的计算机,编程方法是把几百根电线插入插座,虽然可编程但是还需要一些必不可少的配置。
1943 年,John Mauchley 和他的研究生 J. Presper Eckert 开始了研制 ENIAC (电子数字综合器和计算机,Electronic Numerical Integrator And Computer)的工作,ENIAC 由 18000个电子管和 1500 个继电器组成,重 30 吨,耗电 140 千瓦。ENIAC 通过设置分布各处的 6000 个多向开关和连接森林般插头及插座来编程。虽然编程过程繁琐复杂枯燥无味,但是 ENIAC 是世界上第一台真正的通用、可编程电子计算机。
ENIAC 项目组的一名研究人员 John von Neumann 提出程序可以用数字形式和数据一起在计算机内存中表示,相比 ENIAC 硬接线的编程方式,程序用更简单的软件实现代替了复杂的硬件实现。他也提出用 Atanasoff 几年前就已经使用的二进制数表示来代替十进制数表示。
由 von Neumann 第一次描述的这些基本设计,现在被命名为冯·诺依曼机,并在世界上第一台存储程序的计算机 EDSAC(Electronic Discrete Variable Automatic Computer) 中采用,直到现在依然是几乎所有数字计算机的基础。
冯·诺依曼机有五个基本部分,即存储器、运算器(算术逻辑部件 ALU)、控制器和输入、输出设备组成。算术逻辑部件和控制器一起组成了计算机的“大脑”。现代计算机中,这两个部件被组合到一个芯片上,成为 CPU(中央处理器 Central Processing Unit)。
此时,存储器也得到了发展,1948 年,华裔王安发明了脉冲传输控制装置(Pulse transfer controlling device),实现了对磁芯存储器的写后读(Write-after-Read),1949 年申请了专利,并以 50 万美元的价格卖给了IBM。 磁芯存储器原理是磁芯根据磁化时电流的方向可以产生两个相反方向的磁化,这就可以作为 0 和 1 的状态来记录数据。Jay Forrester 完善了磁芯存储技术,推出第一个可靠的计算机高速随机存取存储器。磁芯存储器在 20 世纪 70 年代被广泛用作计算机的主存储器。
上图为 IBM 推出的最后一个电子管计算机产品 709。
第二代:晶体管计算机(1955-1965)
1948 年,贝尔实验室的 John Bardeen、Walter Brattain 和 William Shockley 发明了晶体管,他们也因此获得 1956 年的诺贝尔物理奖。10 年中,晶体管为计算机带来了一场革命,到 20 世纪 50 年代后期,电子管计算机就已经过时了。
晶体管就像上文提到的继电器和电子管一样,它也是一个开关,可以用控制线路来控制开或关,每秒可以开关上百万次,比起易碎(玻璃制作)、耗能(加热金属板)的电子管,晶体管是固态的,体积比电子管小非常多,比电子管节能,为进一步设计和制造更小体积更便宜的计算机打下了基础。
晶体管的主要材料是硅(Si),一个硅原子有 4 个最外层电子,这使它与四个相邻的硅原子形成 4 个共价键,因为电子都存在于共价键中,很少有电子会得到足够脱离化学键从而可以在晶体中自由流动的能量,因此硅中只有少量可自由移动的电子,所以纯硅是半导体,它的导电性介于导体与绝缘体之间。
但是硅的这种性质可以通过一种掺杂的方式去改变,即在硅中加入一些杂质,如果我们加入 5 个最外层电子的杂质,那么硅原子将有总共 9 个最外层电子,当我们把它接上电源时其内部的电子就会像导电材料一样移动,这种合金被称为 N(Negative) 型半导体,因为它有多余的电子。
如果我们加入 3 个最外层电子的杂质,那么硅原子将有总共 7 个最外层电子,也就是说在硅原子间会有一个间隙允许电子通过,这种合金被称为 P(Positive) 型半导体,因为它呈电正性。
如果我们将两种合金连接在一起,连通电源并将电源正极连接到 N 型半导体,那么 N 型半导体中的电荷将会从相反方向移动从而阻止电流流通。如果将电源正极连接到 P 型半导体,那么 N 型半导体中的电荷将向 P 型半导体移动从而使电流流通,这就实现了和上文中提到的电子二极管一样的效果。
但是为了实现类似上文中继电器和三级电子管的开关控制器效果,我们还需要作进一步的改进,将之前二极管的基础上增加一个 N 型半导体,两个 N 型半导体将 P 型半导体夹在中间,并缩小 P 型半导体的厚度。现在无论如何改变电源的方向,电流都无法通过电路,因为左右两边分别构成一个二极管。
现在我们只需要在 P 型半导体上增加一个正电压,如果需要控制电路开启,那么连通这个正电压,相反则关闭这个正电压,这样就实现了如同上文提到的电子三极管一样的效果。今天的晶体管已经可以做到只有 4 纳米,但是 P 型半导体的厚度如果非常小,那么电子将直接从一边的 N 型半导体通过另一边 N 型半导体,晶体管将失去作用,正因为如此,晶体管的厚度将会面临一个极限值。
第一台晶体管计算机 TX-0 (晶体管化实验计算机 0,Transistorized eXperimental computer 0)制作完成于1956年,由麻省理工的林肯实验室和 Whirlwind I 同时研制。
Kenneth Olsen 创办的数字设备公司(Digital Equipment Corporation,DEC)1961 年推出 PDP-1 小型计算机,它只有 4K 内存,麻省理工的学生用它的可视化显示(在 512 * 512 的屏幕上定位一个点的能力)编出了《太空战争》——世界上第一个视频游戏,当时世界上最快的计算机是 IBM 的 7090 机。PDP-1 的价格是 12 万美元,IBM 7090 的价格则是几百万美元。
几年后,DEC 推出的 PDP-8 使用了 Omnibus 单总线。总线是用来连接计算机部件的平行导线。这个体系结构此后几乎被所有小型机所采用。
在 IBM 7094 成为科学计算领域的主要推动力的同时,它通过销售几台面向商业的 1410 机也取得了不小的成功,该机能读写磁带、读卡和打卡,输出速度能和 7094 媲美,价格却是几百万美元 7094 的几分之一。
1964 年,一个不知名的小公司——控制数据公司(Control Data Corporation,CDC)推出 6600,它比巨型机 IBM 7094 还快了将近一个量级,是当时速度最快的计算机。它比 IBM 7094 快了许多的秘密是它的 CPU 的高度并行,有几个功能部件做加法,另外几个做乘法,还有一个做除法,而且它们都能并行运行。虽然只有细心编程才能达到较高的性能,但理论上它能做到同时执行 10 条指令。
同时 CDC 6600 内部还有几个小的计算机在帮助它,这样 CPU 可以全时处理数据,而把细节问题如作业管理和输入/输出交给小计算机去完成。现代计算机的许多关键技术都可以直接追溯到它的身上。它的设计者为 Semour Cray。下图为 CDC 6600 的一部分。
这一时代还出现了很多计算机,还有一台特别值得一提,这就是 Burroughs 的 B5000。PDP-1、IBM 7094和 CDC 6600 这些计算机的设计者首先都是全神贯注于硬件,使硬件更快更便宜,软件完全成了细枝末节。B5000 的设计者完全采取了不同的设计方针,他们研制的计算机是特别为了满足用 Algol 60 语言(C 语言和 Java 语言的前驱)编程需要的,并在硬件上应用了很多特性来简化编译器的任务,设计计算机的同时考虑软件需要的设计思想就是从这里产生的。
第三代:集成电路计算机(1965-1980)
Jack Kilby 与 Robert Noyce (分别独立工作)于1958 年发明的硅集成电路使得在单个芯片上可集成几十个晶体管。对晶体管的这种封装使研制比晶体管计算机更小、更快、更便宜的计算机成为可能。
IBM 基于集成电路推出了新的产品 System/360,来同时满足科学计算与商务处理两方面的要求。System/360 包含多项革新,最重要的是它是由 5、6 种具有相同汇编语言但规模和处理能力递增的系列机组成。这样保持产品向后兼容的同时,也使为一台机器所写的软件也能运行在另外一台机器上,只不过为小型号写的软件放到大型号机器上运行会有内存不够的问题。同时 360 机还可以仿真运行旧机型的程序。System/360 系列是世界上首个指令可兼容的计算机。
DEC 公司推出的 16 位的 PDP-11 系列接替 PDP-8 系列,性价比非常地吸引人,获得巨大成功,尤其是在大学里。小型机向前迈进了一大步。
下图为 DEC PDP-11/03 卸下盖子之后暴露出来的 CPU 板。
在这个时代,主存储器也得到了巨大发展。1966 年 IBM Thomas J. Watson 研究中心的 Robert H. Dennard 发明了DRAM(Dynamic Random Access Memory,动态随机存取存储器),1968年申请了专利。1969年,Advanced Memory System 公司生产了第一款 DRAM 芯片,容量仅为 1KB。
1970 年,Intel 公司推出 Intel 1103,这是第一个商用 DRAM 芯片,DRAM 取代磁芯存储器成为个人电脑的标准存储芯片。至今,DRAM 仍是最常用的随机存取存储器来作为计算机中的主存储器。其原理我们早在 Atanasoff 设计电磁继电器计算机的时候提到过,读者可以返回第零代最后那一部分去查看,可见 Atanasoff 的思想有多么超前。
第四代:超大规模集成电路计算机(1980年至今)
到 20 世纪 80 年代,超大规模集成电路(Very Large Scale Intergration,VLSI)的出现,使得在一个芯片上集成几万、几十万、甚至上百万的晶体管成为可能。超大规模集成电路的发展使计算机更加小型化,速度更快。在 DEC PDP-1 出现之前,计算机是如此庞大和昂贵,小型机问世后,小单位小部门也能拥有自己的计算机。到 1980 年,计算机的价格降低到个人也能承受的地步,个人计算机(PC)时代开始了。
bilibili - 用显微镜放大 CPU 后我看到了一座“城市”|ZOOMING TO SEE THE TRANSISTORS IN CPU!
有一种早期个人计算机是 Apple,众所周知是 Steve Jobs 和 Steve Wozniak 在车库里设计的。它在家庭和学校用户中非常受欢迎,几乎一夜之间,Apple 就成为个人机市场中重要的参与者。
IBM 这个计算机行业的巨人也开始进军个人计算机市场,它选择了 Intel 8088 作 CPU,全部采用市场上的组件研制出 IBM PC。IBM PC 在 1981 年推出,马上成为历史上最畅销的计算机,在其影响下大多 PC 品牌都消失了,只有少数几个能在市场夹缝中存活下来。
1984 年推出的 Apple Macintosh 就是这些存活下来的 PC 之一,Apple Lisa 是第一台使用图形用户界面的(Graphical User Interface,GUI)的计算机,但因为价格昂贵失败了,作为 Apple Lisa 代替品的 Apple Macintosh 价格低廉在市场上大获成功。
刚开始 IBM PC 安装了由当时还是一家小公司的微软公司提供的 MS-DOS 操作系统。随着 Intel 的芯片性能增强,IBM 和微软也开发出了带有类似 Apple Macintosh 的图形用户接口 OS/2。此时,微软已经开发出自己的磁盘操作系统 Windows,IBM 和微软闹翻后,微软推出 Windows 大获成功。
Intel 8088 CPU 成功之后,Intel 继续制造出更大更好的 CPU,1985 年推出 80386,在其之后有 80486,再然后就是 Pentium 和 Core,大多数现代 PC 都采用了这些芯片,人们用 x86 来称呼这一系列芯片的体系结构。AMD 公司生产的与之兼容的芯片也被称为 x86。
还是在 20 世纪 80 年代中期,Ross Freeman 和他在 Xilinx 公司的同事们开发了一种新型计算机芯片,名为现场可编程阵列逻辑(Field-Programmable Gate Array,FPGA),里面是大量的通用逻辑门电路,它在硅片上预先设计实现的具有可编程特性的集成电路,能够按照设计人员的需求配置为指定的电路结构。它灵活性更强,可以为企业缩短产品上市时间,成本较低。
2001 年,IBM 推出了 POWER4 双核体系结构,这是主流 CPU 第一次将两个处理器放置在同一芯片上,到今天,大多数桌面计算机和服务器的处理器都已经在一个芯片上放置了多个处理器核。
低功耗和无处不在的计算机
1989 年,Grid Systems 推出了第一台名为 GridPad 的平板电脑,它配有一个小屏幕,用户可以通过特制的笔在屏幕上写来控制计算机。类似 GridPad 这样的系统表明,人不需要坐在书桌前或者是机房里去使用计算机,而仅需要放在背包里拿出来就可以用。之后就是 IBM 推出的第一台智能手机 Simon,为用户提供了电话、游戏机、邮箱等功能。再然后就是 Apple iPhone 和 Google Android 平台手机的遍地流行。
其实更重要的是计算机被嵌入到家用电器、手表、银行卡及数不清的电子设备中,这些处理器功能丰富,价格低廉,用途广泛,无所不在。
总结
当计算机小型化之后,一个房间那么大的大型计算机还是存在的,它们慢慢发展为超级计算机,主要用于解决科学和工程中计算强度非常大的问题,比如模拟银河系的碰撞。比个人计算机档次更高一点的就是网络服务器,它们可能会更快一点,存储大一点,近年来工程师开始将他们连接起来组成集群,各种请求可以分配给不同的服务器进行并行处理。
文中主要讲述计算机计算能力的发展,少部分提到了内部结构设计与主存储器的发展,其实在辅助存储器(硬盘、软盘等)、输入/输出设备(鼠标、键盘、屏幕等)、操作系统、软件(包括游戏)、交互、设计等等这些方面,在计算能力不断增强的同时也发展出非常多有意思的技术,感兴趣的读者可以查阅相关资料。
参考链接:
1.计算机组成:结构化方法
2.晶体管的工作原理