SSEC:第一台具有存储程序特点的计算机
第一台涉足存储程序的计算机是由IBM独立于ENIAC和EDVAC完成的。还记得那台让IBM与哈佛结下梁子的Harvard Mark I吗?就在建成它的同一年,没能如愿提高公司形象的IBM立马豪掷100万美元,启动了自己的独立项目SSEC——顺序可选电子计算器(Selective Sequence Electronic Calculator)。
SSEC在1947年8月建成,并于1948年1月27日公开亮相。它是半电子、半机电的,由12500个电子管和21400个继电器组成,两者的速度差异注定着它没有太高的实用价值。世界已经步入电子计算时代,SSEC的出现显得有些不合时宜,一不小心成了机电计算的谢幕者。它更像是IBM为了赌气和为了目的不惜代价的产物。
IBM在纽约市热闹的麦迪逊大道上选了一栋楼,把SSEC装在一楼,并特地在墙上开了一扇巨大的窗户,好让路过的行人都能看到。它全长36.58米,体积巨大,和ENIAC一样铺满了整个房间的墙壁。启动后,此起彼伏的嗒嗒声响和忽明忽暗的指示灯给围观的行人留下了深刻印象,一时间,每当人们提到计算机,脑海中浮现出的就是这台SSEC。IBM终于如愿了。
1949年的专利显示,SSEC的架构允许程序存在于任意物理位置,比如电子管、继电器和穿孔介质,因此它在理论上具有存储程序的特点。但在实现时,SSEC的程序仍主要存在于穿孔带,每秒50条指令的访问速度使它的历史地位备受争议。
ARC2:第一台存储程序计算机
第一台真正的存储程序计算机,也是第一台冯·诺依曼结构的计算机却出现在大西洋彼岸的英国。
1947年,伦敦大学伯贝克学院一位名为安德鲁·唐纳德·布思(Andrew Donald Booth)正在研制一台用于X射线研究的机电计算机——自动继电器计算器(Automatic Relay Calculator),简称ARC。布思在一次赴美的学术访问中接触到了冯·诺依曼,经过一番交流,他豁然开朗,回国后旋即将ARC改成了冯·诺依曼结构,称ARC2。
ARC2于1948年5月12日投入使用,它主要由继电器构成,只包含少量的电子管,其存储器是表面覆盖着金属镍的滚筒状磁鼓。访美期间,布思发现美国人使用的录音机是在一种表面覆盖着磁性氧化物的圆形纸片上记录声音的,由于磁性物质具有南北两极,可以表示二进制数据,布思决定把它引进到计算机中。但是圆形纸片太软了,在高速旋转时难以保持平坦,布思便改用了不会变形的磁鼓,与软盘的发明失之交臂。
ARC2的磁鼓可以存储256个字长为21位的字,磁鼓表面被均匀地划分为5376块小区域,每块小区域存储一个二进制位。靠近磁鼓表面的地方有个导电的读写头,当读写头中有电流经过,由磁效应产生的磁场会将正对读写头的小区域磁化,即小区域中的金属镍整齐地将南极(或北极)指向同一个方向,电流的方向相反,磁化的方向也就相反,两个方向分别表示0和1。反之,利用电磁感应原理,当磁鼓旋转时,磁化方向各异的区域依次掠过读写头,读写头中就会产生方向不断变化的电流,便读到了二进制数据。
ARC2成功后,布思创办了一家公司,专门生产磁鼓和其他计算机部件。磁鼓存储器一直风靡至60年代,直到被后来速度更快的磁芯存储器赶下舞台。
曼彻斯特小型机:第一台存储程序电子计算机
另一种和磁鼓同期出现的存储器十分另类,它的核心元件竟然是大头电视机里的那种阴极射线管。阴极射线管的本质是大一号的真空电子管,所不同的是,阴极多了一把能将电子聚焦成束的电子枪,阳极则涂有荧光物质,以显示图像。
但是,主要用于显像的阴极射线管和数据存储能沾上什么边呢?还别说,当时已经有不少人开始往这个方向考虑了。麻省理工学院尝试用阴极射线管存储雷达信号,而正在构思EDVAC的埃克特也设想过阴极射线管存储器,只不过都处在实验乃至论证阶段,甚至还不确定其到底可不可行。这就又给了英国人赶超的机会。
1945~1946年间,英国电信研究所一位名为弗雷德里克·卡兰·威廉斯(Frederic Calland Williams)的电气专家两次到访美国,接触到了使用阴极射线管制作存储器的新思路。回国后,他和助手汤姆·基尔本(Tom Kilburn)一起潜心钻研,成功发明了最早的阴极射线管存储器——威廉斯管(或威廉斯-基尔本管)。
威廉斯管中,电子束所能打到荧屏的所有位置构成一个32×32的点阵。一个亮点代表一个二进制位,共可存储32个字长为32位的字。但是威廉斯管的存储原理,与这些点的亮暗没有关系。
当荧屏上的某个点位被电子束轰击,荧屏自身的电子会被撞飞出去,但很快又被吸回,散落在该点位四周。可以想象一下,当我们在一张绷紧的薄膜上均匀地铺满米粒,然后用手指在薄膜下方猛地一弹,弹击点上的米粒就会飞起,然后在重力作用下落到四周,形成一个中间没有米粒但四周的米粒被堆积起来的“环形山”。此时荧屏上电子的分布也与此类似,这座由电子组成的“环形山”就代表1。如果某个点位没有被电子束轰击,上面的电子分布仍然平坦,就代表0。
那么这个0和1如何读取呢?威廉斯和基尔本在荧屏的外侧放置一块金属片,与荧屏构成电容。仍然用电子束轰击需要读取的点位,如果该点位是0,那么此次轰击就会形成“环形山”,期间电子的运动会形成局部电流,从而在金属片上引发电压;如果该点位是1,那么这里已经有“环形山”存在了,并且“环形山”的中间已经没有电子,轰击不会产生局部电流,金属片上也便不会出现电压。由此,与金属片相连的读取电路就能区分荧屏上的二进制信息了。
麻烦的是,不论点位是0是1,读取之后其状态都会被轰击成1,因此每读一次数据,就要紧跟着将它重写一遍。此外,其实“环形山”的自持时间非常短,山上的电子很快会滑下坡去,填平中间的坑,这一过程只需要0.2秒,因此每秒钟至少要对整块荧屏刷新5次。
威廉斯管之前,不论在穿孔介质还是磁鼓上读写数据都有一个按序查找的过程,以磁鼓为例,当读写头没有正好处在所要操作的数位上时,就需要旋转磁鼓,直到遇到它为止,最糟糕的情况是磁鼓得旋转整整一圈。而威廉斯管可以通过改变偏转电场(或磁场),将电子束直接导向任意点位,从而拥有更快的读写速度。威廉斯管因而也是最早的随机存取存储器。
1946年12月,威廉斯被曼彻斯特大学聘为电气工程系的主任,基尔本和电信研究所的另一位同事杰夫·图特尔(Geoff Tootill)也紧随而去。为了验证威廉斯管的可行性,三人决定建造一台简易的原型计算机——小型试验机(Small-Scale Experimental Machine),简称SSEM,俗称曼彻斯特小型机(Manchester Baby)。
曼彻斯特小型机包含550个电子管,于1948年6月建成,成为第一台存储程序的电子计算机,也是第一台冯·诺依曼结构的电子计算机。它的体型不大,约长5.2米、宽2.24米、重1吨。曼彻斯特小型机使用了3个威廉斯管,除了32字的存储器,另外2个分别用来临时存放中间结果和当前指令。读写一个字仅需360微秒,执行一条指令耗时1440微秒。由于主要是为了测试威廉斯管,曼彻斯特小型机在运算上只实现了减法和取反,不过其他运算可以通过编程的方式间接实现。
第一个测试程序出自基尔本之手,由17条指令组成,求解26244(218)的最大真因数,具体步骤是从26243开始递减,一个个数试除,第一个能除尽的就是结果。这个程序运行了52分钟,共执行350万次操作,威廉斯管成功通过了考验。
小型机之后,曼彻斯特大学旋即在1949年4月建成了它的大型版本——曼彻斯特自动数字计算机(Manchester Automatic Digital Machine),简称MADM,俗称曼彻斯特1号(Manchester Mark 1)。曼彻斯特1号使用2个威廉斯管作为存储器,单个威廉斯管的容量被扩大到64字,字长则被增加到40位。为了进一步扩大容量,曼彻斯特1号还加装了一个能存储1024字的磁鼓。控制器和运算器直接访问威廉斯管,并在需要时,将磁鼓中的数据以32个字为一组与威廉斯管进行置换。这种分级存储结构充分发挥了不同存储器各自在速度和容量上的优势,至今仍在使用,并始终是影响计算机性能的关键。
曼彻斯特1号的成功促成了曼彻斯特大学和费兰蒂公司的合作,1951年2月,费兰蒂1号(Ferranti Mark 1)问世,它是第一型商用的通用电子计算机。
EDSAC:第二台存储程序电子计算机
除了磁鼓和威廉斯管,当时还有一种令人称奇的存储器,它是基于声学的,名叫水银延迟线(或汞延迟线)。
二战期间,雷达在军事上得到了广泛应用。它的工作原理与蝙蝠类似,通过天线发射电磁波,电磁波遇到物体会反射回来,根据这一来一回的时间差就可以推算物体的距离,如果物体在移动,根据多普勒效应就可以推算它的移动速度。移动的物体是雷达关注的重点,但事实上它扫过的区域大部分物体都是静止的,如果不做过滤,代表它们的一大堆亮点会全部显示到屏幕上,干扰使用者对移动点的观察。
为了过滤这些被静止物体反射回来的无用信号,人们将接收天线持续收到的信号分成A和B两路,A路信号直朝显示屏奔去,而B路信号则必须要通过一个“路障”才能到达显示屏。这个“路障”的作用是减缓B的行进,使它比A延迟一段时间。我们知道,信号在电路中的传递是极快的,要拖慢它,可以将它转换成其他形式。人们首先想到的是声音,让B在途中以声音的形式传递一段距离。想象一下,两名难分伯仲的运动员进行百米赛跑,其中一名的跑道中间有一段泳池,他不得不以游泳的形式越过它,自然就比对手慢了许多。这个让B以声音的形式“游泳”的“路障”就是水银延迟线。
当B到达延迟线的入口,一种名为压电传感器的电声转换器件就会将它转换为声波,待声波传播到延迟线的出口,压电传感器再将它转换回电信号。通过精心调整延迟线的长度,可以让B正好比A慢半拍(n+0.5个信号周期),这意味着,它们的波形相互颠倒。当信号来自静止的物体,其频率始终不变,A和延迟后的B汇合后自动抵消;而来自移动物体的信号会不断变化,A和延迟后的B汇合后无法完全抵消,就顺利达到了显示屏。
那么,用作信号“路障”的延迟线和数据存储能搭上什么关系呢?其实最早将两者联系到一起的正是正在为EDVAC设计存储系统的埃克特,他在战时本身就是制作雷达延迟线的专家。
在一个电回路中,任一时刻都只能存在一位二进制信号,当下一位产生时,前一位也就消失了。而有了延迟线,当前一位信号还在水银中“游泳”,下一位信号就可以产生并紧跟着进入水银,它们可以同时存在于这个回路中。就这样,一连串信号排着长队在回路中有序地循环着,任一时刻只有其中一位以电流的形式存在于延迟线之外。每一位信号都从延迟线左端进入,从右端流出,经过放大、整形抵消声电转换过程中的损耗后,重新进入延迟线,如此循环,无休止也。
水银有很多缺点,不但重,而且贵,还有毒,并且水银中的声速受温度影响较大,延迟线需要在40℃的恒温环境下才能正常工作。那么为什么还要选择水银呢?主要因为它和石英材质的压电传感器有着相近的声阻抗,可以减少能量损耗和回声的产生。对此,图灵曾提出可以使用金酒(一种原产于荷兰的烈酒)代替水银,可谓无所不用其极。
第一台使用水银延迟线存储器的计算机,是英国剑桥大学在1949年5月研制成功的电子延迟存储自动计算器(Electronic delay storage automatic calculator),简称EDSAC。这台在缩写上与EDVAC仅相差一个字母的机器,是史上第二台具有冯·诺依曼结构的存储程序计算机,它使用了16条水银延迟线,每条可存储32个字,每字18位。由于每个字的最后一位用作两个字之间的间隔符,单字实际可用17位。当字长不够,需要两个字组合使用时,双字实际可用35位。
而EDVAC本身则到了1949年8月才交付,而且还存在问题,直到1951年才能正常使用,早已被众多习得其思想的计算机所赶超。它使用了128条58cm长的水银延迟线,每条可存储8个字,每字44位。
参考文献
- Wikipedia. IBM SSEC[EB/OL].
- Johnson R. School of Computer Science & Information Systems: A Short History[M]. London: Birkbeck College, 2008.
- Lavington S. Alan Turing and his Contemporaries: Building the World's First Computers[M]. Swindon: BCS, 2012.
- Wikipedia. Manchester Baby[EB/OL].
- Wikipedia. Williams tube[EB/OL].
- Wikipedia. Delay line memory[EB/OL].
- Wikipedia. EDSAC[EB/OL].
- Wikipedia. EDVAC[EB/OL].