机电时期(19世纪末~20世纪40年代)
我们难以理解计算机,也许主要并不由于它复杂的机理,而是根本想不明白,为什么一通上电,这坨铁疙瘩就突然能飞速运转,它安安静静地到底在干些啥。
经过前几篇的探索,我们已经了解机械计算机(准确地说,我们把它们称为机械式桌面计算器)的工作方式,本质上是通过旋钮或把手带动齿轮旋转,这一过程全靠手动,肉眼就能看得一清二楚,甚至用现在的乐高积木都能实现。麻烦就麻烦在电的引入,电这样看不见摸不着的神物(当然你可以摸摸试试),正是让计算机从笨重走向传奇、从简单明了走向令人费解的关键。
技术准备
19世纪,电在计算机中的应用主要有两大方面:一是提供动力,靠电动机(俗称马达)代替人工驱动机器运行;二是提供控制,靠一些电动器件实现计算逻辑。
我们把这样的计算机称为机电计算机。
电动机
汉斯·克里斯钦·奥斯特(Hans Christian Ørsted 1777-1851),丹麦物理学家、化学家。迈克尔·法拉第(Michael Faraday 1791-1867),英国物理学家、化学家。1820年4月,奥斯特在实验中发现通电导线会造成附近磁针的偏转,证明了电流的磁效应。第二年,法拉第想到,既然通电导线能带动磁针,反过来,如果固定磁铁,旋转的将是导线,于是解放人力的伟大发明——电动机便诞生了。
电动机其实是件很不稀奇、很笨的发明,它只会一个劲不停地转圈,而机械式桌面计数器的运转本质上就是齿轮的转圈,两者简直是天造地设的一双。有了电动机,计算员不再需要吭哧吭哧地手摇,做数学也终于少了点体力劳动的模样。
电磁继电器
约瑟夫·亨利(Joseph Henry 1797-1878),美国科学家。爱德华·戴维(Edward Davy 1806-1885),英国物理学家、科学家、发明家。电磁学的价值在于摸清了电能和动能之间的转换,而从静到动的能量转换,正是让机器自动运行的关键。而19世纪30年代由亨利和戴维所分别发明的继电器,就是电磁学的重要应用之一,分别在电报和电话领域发挥了重要作用。
电磁继电器(原图来自维基「Relay」词条)其结构和原理十分简单:当线圈通电,产生磁场,铁质的电枢就被吸引,与下侧触片接触;当线圈断电,电枢就在弹簧的作用下上扬,与上侧触片接触。
在机电设备中,继电器主要发挥两方面的作用:一是通过弱电控制强电,使得控制电路可以控制工作电路的通断,这一点放张原理图就能一目了然;二是将电能转换为动能,利用电枢在磁场和弹簧作用下的往返运动,驱动特定的纯机械结构以完成计算任务。
继电器弱电控制强电原理图(原图来自网络)制表机(tabulator/tabulating machine/unit record equipment/electric accounting machine)
从1790年开始,美国的人口普查基本每十年进行一次,随着人口繁衍和移民的增多,人口数量那是一个爆炸。
前十次的人口普查结果(图片截自维基「United States Census」词条) 我做了个折线图,可以更直观地感受这洪水猛兽般的增长之势。不像现在这个的互联网时代,人一出生,各种信息就已经电子化、登记好了,甚至还能数据挖掘,你无法想象,在那个计算设备简陋得基本只能靠手摇进行四则运算的19世纪,千万级的人口统计就已经是当时美国政府所不能承受之重。1880年开始的第十次人口普查,历时8年才最终完成,也就是说,他们休息上两年之后就要开始第十一次普查了,而这一次普查,需要的时间恐怕要超过10年。本来就是十年统计一次,如果每次耗时都在10年以上,还统计个鬼啊!
当时的人口调查办公室(1903年才正式成立美国人口调查局)方了,赶紧征集能减轻手工劳动的发明,就此,霍尔瑞斯带着他的制表机完虐竞争对手,在方案招标中脱颖而出。
赫尔曼·霍尔瑞斯(Herman Hollerith 1860-1929),美国发明家、商人。霍尔瑞斯的制表机首次将穿孔技术应用到了数据存储上,一张卡片记录一个居民的各项信息,就像身份证一样一一对应。聪明如你一定能联想到,通过在卡片对应位置打洞(或不打洞)记录信息的方式,与现代计算机中用0和1表示数据的做法简直一毛一样。确实这可以看作是将二进制应用到计算机中的思想萌芽,但那时的设计还不够成熟,并未能如今这般巧妙而充分地利用宝贵的存储空间。举个例子,我们现在一般用一位数据就可以表示性别,比如1表示男性,0表示女性,而霍尔瑞斯在卡片上用了两个位置,表示男性就在标M的地方打孔,女性就在标F的地方打孔。其实性别还凑合,表示日期时浪费得就多了,12个月需要12个孔位,而真正的二进制编码只需要4位。当然,这样的局限与制表机中简单的电路实现有关。
1890年用于人口普查的穿孔卡片,右下缺角是为了避免不小心放反。(图片来自《Hollerith 1890 Census Tabulator》) 有专门的打孔员使用穿孔机将居民信息戳到卡片上,操作面板放大了孔距,方便打孔。(原图来自《Hollerith 1890 Census Tabulator》) 细心如你有没有发现操作面板居然是弯的(图片来自《Hollerith 1890 Census Tabulator》)有没有一点熟悉的赶脚?
没错,简直就是现在的人体工程学键盘啊!(图片来自网络)这的确是当时的人体工程学设计,目的是让打孔员每天能多打点卡片,为了节省时间他们也是蛮拼的……
在制表机前,穿孔卡片/纸带在各类机器上的作用主要是存储指令,比较有代表性的,一是贾卡的提花机,用穿孔卡片控制经线提沉(详见《现代计算机真正的鼻祖》),二是自动钢琴(player piano/pianola),用穿孔纸带控制琴键压放。
贾卡提花机 之前很火的美剧《西部世界》中,每次循环开始都会给一个自动钢琴的特写,弹奏起看似宁静安逸、实则诡异违和的背景乐。 为了彰显霍尔瑞斯的开创性应用,人们直接把这种存储数据的卡片叫做「Hollerith card」。(截图来自百度翻译)打好了孔,下一步就是将卡片上的信息统计起来。
读卡装置(原图来自专利US395781)制表机通过电路通断识别卡上信息。读卡装置底座中内嵌着与卡片孔位一一对应的管状容器,容器里盛有水银,水银与导线相连。底座上方的压板中嵌着同样与孔位一一对应的金属针,针抵着弹簧,可以伸缩,压板的上下面由导电材料制成。这样,当把卡片放在底座上,按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。
读卡原理示意图,图中标p的针都穿过了卡片,标a的针被挡住。(图片来自《Hollerith 1890 Census Tabulator》)如何将电路通断对应到所需要的统计信息?霍尔瑞斯在专利中给出了一个简单的例子。
涉及性别、国籍、人种三项信息的统计电路图,虚线为控制电路,实线为工作电路。(图片来自专利US395781,下同。) 实现这一功能的电路可以有多种,巧妙的接线可以节省继电器数目。这里我们只分析上头最基础的接法。图中有7根金属针,从左至右标的分别是:G(类似于总开关)、Female(女)、Male(男)、Foreign(外国籍)、Native(本国籍)、Colored(有色人种)、White(白种人)。好了,你终于能看懂霍尔瑞斯龙飞凤舞的字迹了。
这个电路用于统计以下6项组合信息(分别与图中标M的6组电磁铁对应):
① native white males(本国的白种男)
② native white females(本国的白种女)
③ foreign white males(外国的白种男)
④ foreign white females(外国的白种女)
⑤ colored males(非白种男)
⑥ colored females(非白种女)
以第一项为例,如果表示「Native」、「White」和「Male」的针同时与水银接触,接通的控制电路如下:
描死我了……这一示例首先展示了针G的作用,它把控着所有控制电路的通断,目的有二:
1、在卡片上留出一个专供G通过的孔,以防止卡片没有放正(照样可以有部分针穿过错误的孔)而统计到错误的信息。
2、令G比其他针短,或者G下的水银比其他容器里少,从而确保其他针都已经接触到水银之后,G才最终将整个电路接通。我们知道,电路通断的瞬间容易产生火花,这样的设计可以将此类元器件的损耗集中在G身上,便于后期维护。
不得不感慨,这些发明家做设计真的特别实用、细致。
上图中,橘黄色箭头标识出3个相应的继电器将闭合,闭合之后接通的工作电路如下:
上标为1的M电磁铁完成计数工作通电的M将产生磁场, 牵引特定的杠杆,拨动齿轮完成计数。霍尔瑞斯的专利中没有给出这一计数装置的具体结构,可以想象,从十七世纪开始,机械计算机中的齿轮传动技术已经发展到很成熟的水平,霍尔瑞斯无需重新设计,完全可以使用现成的装置——用他在专利中的话说:「any suitable mechanical counter」(任何合适的机械计数器都OK)。
M不单控制着计数装置,还控制着分类箱盖子的开合。
分类箱侧视图,简单明了。将分类箱上的电磁铁接入工作电路,每次完成计数的同时,对应格子的盖子会在电磁铁的作用下自动打开,统计员瞟都不用瞟一眼,就可以左手右手一个快动作将卡片投到正确的格子里。由此完成卡片的快速分类,以便后续进行其他方面的统计。
跟着我右手一个快动作(图片来自《Hollerith 1890 Census Tabulator》,下同。) 每天工作的最后一步,就是将示数盘上的结果抄下来,置零,第二天继续。1896年,霍尔瑞斯创立了制表机公司(The Tabulating Machine Company),1911年与另外三家公司合并成立Computing-Tabulating-Recording Company(CTR),1924年更名为International Business Machines Corporation(国际商业机器公司),就是现在大名鼎鼎的IBM。IBM也因此在上个世纪风风火火地做着它拿手的制表机和计算机产品,成为一代霸主。
制表机在当时成为与机械计算机并存的两大主流计算设备,但前者通常专用于大型统计工作,后者则往往只能做四则运算,无一具有通用计算的能力,更大的变革将在二十世纪三四十年代掀起。
祖思机
康拉德·祖思(Konrad Zuse 1910~1995),德国土木工程师、发明家。
有些天才注定成为大师,祖思便是其一。读大学时,他就不安分,专业换来换去都觉得无聊,工作之后,在亨舍尔公司参与研究风对机翼的影响,对繁复的计算更是忍无可忍。
一天到晚就是在摇计算器,中间结果还要手抄,简直要疯。(截图来自《Computer History》)祖思一面抓狂,一面相信还有好多人跟他一样抓狂,他看到了商机,觉得这个世界迫切需要一种可以自动计算的机器。于是一不做二不休,在亨舍尔才呆了几个月就潇洒辞职,搬到父母家里啃老,一门心思搞起了发明。他对巴贝奇一无所知,凭一己之力做出了世界上第一台可编程计算机——Z1。
Z1
祖思从1934年开始了Z1的设计与实验,于1938年完成建造,在1943年的一场空袭中炸毁——Z1享年5岁。
我们早已无法见到Z1的原貌,零星的一些照片显得弥足珍贵。(图片来自http://history-computer.com/ModernComputer/Relays/Zuse.html)从照片上可以发现,Z1是一坨庞大的机械,除了靠电动马达驱动,没有任何与电相关的部件。别看它原始,里头可有好几项甚至沿用至今的开创性理念:
■ 将机器严格划分为处理器和内存两大部分,这正是如今冯·诺依曼体系结构的做法。
■ 不再同前人一样用齿轮计数,而是采用二进制,用穿过钢板的钉子/小杆的来回移动表示0和1。
■ 引入浮点数,相比之下,后文将提到的一些同时期的计算机所用都是定点数。祖思还发明了浮点数的二进制规格化表示,优雅至极,后来被纳入IEEE标准。
■ 靠机械零件实现与、或、非等基础的逻辑门,靠巧妙的数学方法用这些门搭建出加减乘除的功能,最出彩的要数加法中的并行进位——一步完成所有位上的进位。
与制表机一样,Z1也用到了穿孔技术,不过不是穿孔卡,而是穿孔带,用废弃的35毫米电影胶卷制成。和巴贝奇所见略同,祖思也在穿孔带上存储指令,有输入输出、数据存取、四则运算共8种。
简化得不能再简化的Z1架构示意图每读一条指令,Z1内部都会牵动一大串部件完成一系列复杂的机械运动。具体如何运动,祖思没有留下完整的描述。有幸的是,一位德国的计算机专家——Raul Rojas对有关Z1的图纸和手稿进行了大量的研究和分析,给出了较为完善的阐述,主要见其论文《The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer》,而我一时抽风把它翻译了一遍——《Z1:第一台祖思机的架构与算法》。如果你读过几篇Rojas教授的论文就会发现,他的研究工作可谓壮观,当之无愧是世界上最了解祖思机的人。他成立了一个网站——Konrad Zuse Internet Archive,专门搜集整理祖思机的资料。他带的某个学生还编写了Z1加法器的仿真软件,让我们来直观感受一下Z1的精巧设计:
从转动三维模型可见,光一个基本的加法单元就已经非常复杂。(截图来自《Architecture and Simulation of the Z1 Computer》,下同。) 此例演示二进制10+2的处理过程,板带动杆,杆再带动其他板,杆处于不同的位置决定着板、杆之间是否可以联动。平移限定在前后左右四个方向(祖思称为东南西北),机器中的所有钢板转完一圈就是一个时钟周期。 上面的一堆零件看起来可能仍然比较混乱,我找到了另外一个基本单元的演示动画。(图片来自《talentraspel simulator für mechanische schaltglieder zuse》)幸运的是,退休之后,祖思在1984~1989年间凭着自己的记忆重绘Z1的设计图纸,并完成了Z1复制品的建造,现藏于德国技术博物馆。尽管它跟原本的Z1并不完全一样——多少会与事实存在出入的记忆、后续设计经验可能带来的思维进步、半个世纪之后材料的发展,都是影响因素——但其大框架基本与原Z1一致,是后人研究Z1的宝贵财富,也让吃瓜的游客们得以一睹纯机械计算机的风采。
在Rojas教授搭建的网站(Konrad Zuse Internet Archive)上,提供着Z1复制品360°的高清展示。当然,这台复制品和原Z1一样不靠谱,做不到长时间无人值守的自动运行,甚至在揭幕仪式上就挂了,祖思花了几个月才修好。1995年祖思去世后,它就没再运行,成了一具钢铁尸体。
Z1的不可靠,很大程度上归咎于机械材料的局限性。用现今的眼光看,计算机内部是无比复杂的,简单的机械运动一方面速度不快,另一方面无法灵活、可靠地传动。祖思早有采用电磁继电器的想法,无奈那时的继电器不但价格不低,体积还大。到了Z2,祖思灵机一动,最占零件的不过是机器的存储部分,何不继续使用机械式内存,而改用继电器来实现处理器呢?
Z2是紧跟着Z1的第二年诞生的,其设计资料一样难逃被炸毁的命运(不由感慨那个动乱的年代啊)。Z2的资料不多,大体可以认为是Z1到Z3的过渡品,它的一大价值是验证了继电器和机械件在实现处理器方面的等效性,也相当于验证了Z3的可行性,二大价值是为祖思赢得了建造Z3的一些赞助。
Z3
Z3的寿命比Z1还短,从1941年建造完成,到1943年被炸毁(是的,又被炸毁了),就活了两年。好在战后到了60年代,祖思的公司做出了完美的复制品,比Z1的复制品靠谱得多,藏于德意志博物馆,至今还能运行。
德意志博物馆展出的Z3复制品,内存和CPU两个大柜子里装满了继电器,操作面板俨如今天的键盘和显示器。(原图来自维基「Z3 (computer)」词条)由于祖思一脉相承的设计,Z3和Z1有着一毛一样的体系结构,只不过它改用了电磁继电器,内部逻辑不再需要靠复杂的机械运动来实现,只要接接电线就可以了。我搜了一大圈,没有找到Z3的电路设计资料——因着祖思是德国人,研究祖思的Rojas教授也是德国人,更多详尽的资料均为德文,语言不通成了我们接触知识的壁垒——就让我们简单点,用一个YouTube上的演示视频一睹Z3芳容。
以12+17=19这一算式为例,用二进制表示即:1100+10001=11101。
先通过面板上的按键输入被加数12,继电器们萌萌哒一阵摆动,记录下二进制值1100。(截图来自《Die Z3 von Konrad Zuse im Deutschen Museum》,下同。) 继电器闭合为1,断开为0。 以同样的方式输入加数17,记录二进制值10001。 按下+号键,继电器们又是一阵萌萌哒摆动,计算出了结果。 在原本存储被加数的地方,得到了结果11101。当然这只是机器内部的表示,如果要用户在继电器上查看结果,分分钟都成老花眼。
最终,机器将以十进制的形式在面板上显示结果。除了四则运算,Z3比Z1还新增了开平方的功能,操作起来都相当方便,除了速度稍微慢点,完全顶得上现在最简单的那种电子计算器。
(图片来自网络)值得一提的是,继电器的触点在开闭的瞬间容易引起火花(这跟我们现在插插头时会出现火花一样),频繁通断将严重缩短使用寿命,这也是继电器失效的主要原因。祖思统一将所有线路接到一个旋转鼓,鼓表面交替覆盖着金属和绝缘材料,用一个碳刷与其接触,鼓旋转时即产生电路通断的效果。每一周期,确保需闭合的继电器在鼓的金属面与碳刷接触之前闭合,火花便只会在旋转鼓上产生。旋转鼓比继电器耐用得多,也容易更换。如果你还记得,不难发现这一做法与霍尔瑞斯制表机中G针的安排如出一辙,不得不感叹这些发明家真是英雄所见略同。
除了上述这种「随输入随计算」的用法,Z3当然还支持运行预先编好的程序,不然也无法在历史上享有「第一台可编程计算机器」的名誉了。
Z3提供了在胶卷上打孔的设备 输入输出、内存读写、算术运算——Z3共识别9类指令。其中内存读写指令用6位标识存储地址,即寻址空间为64字,和Z1一样。(截图来自《Konrad Zuse's legacy: the architecture of the Z1 and Z3》) 由穿孔带读取器读出指令1997~1998年间,Rojas教授将Z3证明为通用图灵机(UTM),但Z3本身没有提供条件分支的能力,要实现循环,得粗暴地将穿孔带的两头接起来形成环。到了Z4,终于有了条件分支,它使用两条穿孔带,分别作为主程序和子程序。Z4连上了打字机,能将结果打印出来。还扩充了指令集,支持正弦、最大值、最小值等丰富的求值功能。甚而至于,开创性地应用了堆栈的概念。但它回归到了机械式存储,因为祖思希望扩大内存,继电器还是体积大、成本高的老问题。
总而言之,Z系列是一代更比一代强,除了这里介绍的1~4,祖思在1941年成立的公司还陆续生产了Z5、Z11、Z22、Z23、Z25、Z31、Z64等等等等产品(当然后面的系列开始采用电子管),共251台,一路高歌,如火如荼,直到1967年被西门子吞并,成为这一国际巨头体内的一股灵魂之血。
贝尔Model系列
同一时期,另一家不容忽视的、研制机电计算机的机构,便是上个世纪叱咤风云的贝尔实验室。众所周知,贝尔实验室及其所属公司是做电话起家、以通信为主要业务的,虽然也做基础研究,但为什么会涉足计算机领域呢?其实跟他们的老本行不无关系——最早的电话系统是靠模拟量传输信号的,信号随距离衰减,长距离通话需要用到滤波器和放大器以保证信号的纯度和强度,设计这两样设备时需要处理信号的振幅和相位,工程师们用复数表示它们——两个信号的叠加是两者振幅和相位的分别叠加,复数的运算法则正好与之相符。这就是一切的起因,贝尔实验室面临着大量的复数运算,全是简单的加减乘除,这哪是脑力活,分明是体力劳动啊,他们为此甚至专门雇佣过5~10名妇女(当时的廉价劳力)全职来做这事。
从结果来看,贝尔实验室发明计算机,一方面是源于自身需求,另一方面也从自身技术上得到了启发。电话的拨号系统由继电器电路实现,通过一组继电器的开闭决定谁与谁进行通话。当时实验室研究数学的人对继电器并不熟悉,而继电器工程师又对复数运算不尽了解,将两者联系到一起的,是一名叫乔治·斯蒂比兹的研究员。
乔治·斯蒂比兹(George Stibitz 1904-1995),贝尔实验室研究员。Model K
1937年,斯蒂比兹察觉到继电器的开闭状态与二进制之间的联系。他做了个实验,用两节电池、两个继电器、两个指示灯,以及从易拉罐上剪下来的触片组成一个简单的加法电路。
(图片来自http://www.vcfed.org/forum/showthread.php?5273-Model-K) 按下右侧触片,相当于0+1=1。(截图来自《AT&T Archives: Invention of the First Electric Computer》,下同。) 按下左侧触片,相当于1+0=1。 同时按下两个触片,相当于1+1=2。有简友问到具体是怎么实现的,我没有查到相关资料,但经过与同事的探讨,确认了一种可行的电路:
开关S1、S2分别控制着继电器R1、R2的开闭,出于简化,这里没有画出开关对继电器的控制线路。继电器可以视为单刀双掷的开关,R1默认与上触点接触,R2默认与下触点接触。单独S1闭合则R1在电磁作用下与下触点接触,接通回路,A灯亮;单独S2闭合则R2与上触点接触,A灯亮;S1、S2同时闭合,则A灯灭,B灯亮。诚然这是一种粗糙的方案,仅仅在表面上实现了最终效果,没有体现出二进制的加法过程,有理由相信,大师的原设计可能精妙得多。
因为是在厨房(kitchen)里搭建的模型,斯蒂比兹的妻子称之为Model K。Model K为1939年建造的Model I——复数计算机(Complex Number Computer)做好了铺垫。
Model I
Model I的运算部件(图片来自《Relay computers of George Stibitz》,实在没找到机器的全身照。)这里不深究Model I的具体实现,其原理简单,可线路复杂得要命。让我们把重点放到其对数字的编码上。
Model I只用于实现复数的乘除运算,甚至连加减都没有考虑,因为贝尔实验室认为加减法口算就够了。(当然后来他们发现,只要不清空寄存器,就可以通过与复数±1相乘来实现加减法。)当时的电话系统中,有一种拥有10个状态的继电器,可以表示数字0~9,鉴于复数计算机的专用性,其实没有引入二进制的必要,直接利用这种继电器即可。但斯蒂比兹实在舍不得,便引入了二进制和十进制的杂种——BCD编码(Binary-Coded Decimal,二-十进制码),用四位二进制表示一位十进制:
为了直观一点,我作了个图。0 → 0000
1 → 0001
2 → 0010
3 → 0011
……
9 → 1001
10 → 00010000(本来10的二进制表示是1010)
BCD码既拥有二进制的简洁表示,又保留了十进制的运算模式。但作为一名出色的设计师,斯蒂比兹仍不满足,稍做调整,给每个数的编码加了3:
为了直观,我继续作图嗯。0 → 0011 (0 + 3 = 3)
1 → 0100 (1 + 3 = 4)
2 → 0101 (2 + 3 = 5)
3 → 0110 (3 + 3 = 6)
……
9 → 1100 (9 + 3 =12)
是为余3码(Excess-3),或称斯蒂比兹码。为什么要加3?因为四位二进制原本可以表示0~15,有6个编码是多余的,斯蒂比兹选择使用中间10个。
这么做当然不是因为强迫症,余3码的智慧有二:其一在于进位,观察1+9,即0100+1100=0000,观察2+8,即0101+1011=0000,以此类推,用0000这一特殊的编码表示进位;其二在于减法,减去一个数相当于加上此数的反码再加1,0(0011)的反码即9(1100),1(0100)的反码为8(1011),以此类推,每个数的反码恰是对其每一位取反。
不管你看没看懂这段话,总之,余3码大大简化了线路设计。
套用现在的术语来说,Model I采用C/S(客户端/服务端)架构,配备了3台操作终端,用户在任意一台终端上键入要算的式子,服务端将收到相应信号并在解算之后传回结果,由集成在终端上的电传打字机打印输出。只是这3台终端并不能同时使用,像电话一样,只要有一台「占线」,另两台就会收到忙音提示。
Model I的操作台(客户端)(图片来自《Relay computers of George Stibitz》) 操作台上的键盘示意图,左侧开关用于连接服务端,连接之后即表示该终端「占线」。(图片来自《Number, Please-Computers at Bell Labs》) 键入一个式子的按键顺序,看看就好。(图片来自《Number, Please-Computers at Bell Labs》) 计算一次复数乘除法平均耗时半分钟,速度是使用机械式桌面计算器的3倍。Model I不但是第一台多终端的计算机,还是第一台可以远程操控的计算机。这里的远程,说白了就是贝尔实验室利用自身的技术优势,于1940年9月9日,在达特茅斯学院(Dartmouth College)和纽约的本部之间搭起线路,斯蒂比兹带着小小的终端机到学院演示,不一会就从纽约传回结果,在与会的数学家中引起了巨大轰动,其中就有日后大名鼎鼎的冯·诺依曼,个中启迪不言而喻。
我用谷歌地图估了一下,这条线路全长267英里,约430公里,足够纵贯江苏,从苏州火车站连到连云港花果山。 从苏州站开车至花果山430余公里(截图来自百度地图)斯蒂比兹由此成为远程计算第一人。
然而,Model I只能做复数的四则运算,不可编程,当贝尔的工程师们想将它的功能扩展到多项式计算时,才发现其线路被设计死了,根本改动不得。它更像是台巨型的计算器,准确地说,仍是calculator,而不是computer。
Model II
二战期间,美国要研制高射炮自动瞄准装置,便又有了研制计算机的需求,继续由斯蒂比兹负责,便是于1943年完成的Model II——Relay Interpolator(继电器插值器)。
Model II开始使用穿孔带进行编程,共设计有31条指令,最值得一提的还是编码——二-五编码。
把继电器分成两组,一组五位,用来表示0~4,另一组两位,用来表示是否要加上一个5——算盘既视感。(截图来自《计算机技术发展史(一)》)你会发现,二-五编码比上述的任一种编码都要浪费位数,但它有它的强大之处,便是自校验。每一组继电器中,有且仅有一个继电器为1,一旦出现多个1,或者全是0,机器就能立马发现问题,由此大大提高了可靠性。
Model II之后,一直到1950年,贝尔实验室还陆续推出了Model III、Model IV、Model V、Model VI,在计算机发展史上盘踞一席之地。除了战后的VI返璞归真用于复数计算,其余都是军事用途,可见战争确实是技术革新的催化剂。
Harvard Mark系列
稍晚些时候,踏足机电计算领域的还有哈佛大学。当时,有一名正在哈佛攻读物理PhD的学生——艾肯,和当年的祖思一样,被手头繁复的计算困扰着,一心想建台计算机,于是从1937年开始,抱着方案四处寻找合作。第一家被拒,第二家被拒,第三家终于伸出了橄榄枝,便是IBM。
霍华德·艾肯(Howard Hathaway Aiken 1900-1973),美国物理学家、计算机科学先驱。1939年3月31日,IBM和哈佛草签了最后的协议:
1、IBM为哈佛建造一台自动计算机器,用于解决科学计算问题;
2、哈佛免费提供建造所需的基础设施;
3、哈佛指定一些人员与IBM合作,完成机器的设计和测试;
4、全体哈佛人员签订保密协议,保护IBM的技术和发明权利;
5、IBM既不接受补偿,也不提供额外经费,所建计算机为哈佛的财产。
乍一看,砸了40~50万美元,IBM似乎捞不到任何好处,事实上人家大公司才不在意这点小钱,主要是想借此彰显自己的实力,提高公司声誉。然而世事难料,在机器建好之后的庆典上,哈佛新闻办公室与艾肯私自准备的新闻稿中,对IBM的功劳没有给予足够的认可,把IBM的总裁沃森气得与艾肯老死不相往来。
事实上,哈佛这边由艾肯主设计,IBM这边由莱克(Clair D. Lake)、汉密尔顿(Francis E. Hamilton)、德菲(Benjamin Durfee)三名工程师主建造,按理,双方单位的贡献是对半的。
1944年8月,(从左至右)汉密尔顿、莱克、艾肯、德菲站在Mark I前合影。(图片来自http://www-03.ibm.com/ibm/history/exhibits/markI/markI_album.html)于1944年完成了这台Harvard Mark I, 在娘家叫做IBM自动顺序控制计算机(IBM Automatic Sequence Controlled Calculator),ASCC。
Mark I长约15.5米,高约2.4米,重约5吨,撑满了整个实验室的墙面。(图片来自《A Manual of Operation for the Automatic Sequence Controlled Calculator》,下同。)同祖思机一样,Mark I也通过穿孔带获得指令。穿孔带每行有24个空位,前8位标识用于存放结果的寄存器地址,中间8位标识操作数的寄存器地址,后8位标识所要进行的操作——结构已经非常类似后来的汇编语言。
Mark I的穿孔带读取器以及织布机一样的穿孔带支架 给穿孔带来个彩色特写(图片来自维基「Harvard Mark I」词条) 这样小心翼翼地架好(截图来自CS101《Harvard Mark I》,下同。) 场面之壮观,犹如挂面制作现场,这就是70年前的APP啊。至于数据,Mark I内有72个累加寄存器,对外不可见。可见的是另外60个24位的常数寄存器,通过开关旋钮置数,于是就有了这样蔚为壮观的60×24旋钮阵列:
别数了,这是两面30×24的旋钮墙无误。 在如今哈佛大学科学中心陈列的Mark I上,你只能看到一半旋钮墙,那是因为这不是一台完整的Mark I,其余部分保存在IBM及史密森尼博物院。(截图来自CS50《Harvard Mark I》)同时,Mark I还可以通过穿孔卡片读入数据。最终的计算结果由一台打孔器和两台自动打字机输出。
用于输出结果的自动打字机(截图来自CS101《Harvard Mark I》) po张哈佛馆藏在科学中心的真品(截图来自CS50《Harvard Mark I》)下面让我们来大致瞅瞅它里头是怎么运作的。
这是一副简化了的Mark I驱动机构,左下角的马达带动着一行行、一列列纵横啮合的齿轮不停转动,最终靠左上角标注为J的齿轮去带动计数齿轮。(原图来自《A Manual of Operation for the Automatic Sequence Controlled Calculator》,下同。)当然Mark I不是用齿轮来表示最终结果的,齿轮的旋转是为了接通表示不同数字的线路。
我们来看看这一机构的塑料外壳,其内部是,一个由齿轮带动的电刷可分别与0~9十个位置上的导线接通。齿轮和电刷是可离合的,若它们不接触,任齿轮不停旋转,电刷是不动的。艾肯将300毫秒的机器周期细分为16个时间段,在一个周期的某一时间段,靠磁力吸附使齿轮和电刷发生关系齿轮通过轴带动电刷旋转。吸附之前的时间是空转,从吸附开始,周期内的剩余时间便用来进行实质的旋转计数和进位工作。
其余复杂的电路逻辑,则理所当然是靠继电器来完成。
艾肯设计的计算机并不局限于一种材料实现,在找到IBM之前,他还向一家制造传统机械式桌面计算器的公司提出过合作请求,如果这家公司同意合作了,那么Mark I最终极可能是纯机械的。后来,1947年完成的Mark II也证明了这一点,它大体上仅是用继电器实现了Mark I中的机械式存储部分,是Mark I的纯继电器版本。1949年和1952年,又分别诞生了半电子(二极管继电器混合)的Mark III和纯电子的Mark IV。
末了,关于这一系列值得一提的,是日后常拿来与冯·诺依曼结构做对比的哈佛结构,与冯·诺依曼结构统一存储的做法不同,它把指令和数据分开存储,以获得更高的执行效率,相对的,付出了设计复杂的代价。
两种存储结构的直观对比(图片来自《ARMv4指令集嵌入式微处理器设计》)就这样趟过历史,渐渐地,这些遥远的东西也变得与我们亲近起来,历史与现在从来没有脱节,脱节的是我们局限的认知。往事并非与现今毫无关系,我们所熟知的伟大创造都是从历史一次又一次的更迭中脱胎而出的,这些前人的智慧串联着,汇聚成流向我们、流向未来的璀璨银河,我掀开它的惊鸿一瞥,陌生而熟悉,心里头热乎乎地涌起一阵难以言表的惊艳与欣喜,这便是研究历史的乐趣。
参考文献
胡守仁. 计算机技术发展史(一)[M]. 长沙: 国防科技大学出版社, 2004.
Wikipedia. Hans Christian Ørsted[EB/OL]. https://en.wikipedia.org/wiki/Hans_Christian_%C3%98rsted, 2016-12-10.
Wikipedia. Michael Faraday[EB/OL]. https://en.wikipedia.org/wiki/Michael_Faraday, 2016-11-27.
Wikipedia. Relay[EB/OL]. https://en.wikipedia.org/wiki/Relay#cite_note-adb-6, 2016-12-20.
Wikipedia. Joseph Henry[EB/OL]. https://en.wikipedia.org/wiki/Joseph_Henry, 2016-12-03.
Wikipedia. Edward Davy[EB/OL]. https://en.wikipedia.org/wiki/Edward_Davy, 2016-11-04.
Wikipedia. Unit record equipment[EB/OL]. https://en.wikipedia.org/wiki/Unit_record_equipment, 2016-12-29.
陈厚云, 王行刚. 计算机发展简史[M]. 北京: 科学出版社, 1985.
吴为平, 严万宗. 从算盘到电脑[M]. 长沙: 湖南教育出版社, 1986.
Wikipedia. United States Census[EB/OL]. https://en.wikipedia.org/wiki/United_States_Census, 2017-01-15.
Wikipedia. United States Census Bureau[EB/OL]. https://en.wikipedia.org/wiki/United_States_Census_Bureau, 2017-01-20.
Wikipedia. Herman Hollerith[EB/OL]. https://en.wikipedia.org/wiki/Herman_Hollerith, 2017-01-08.
Herman Hollerith. Art of Compiling Statistics[P]. 美国专利: 395781, 1889-01-08.
Frank da Cruz. Hollerith 1890 Census Tabulator[EB/OL]. http://www.columbia.edu/cu/computinghistory/census-tabulator.html, 2011-03-28.
Wikipedia. Player piano[EB/OL]. https://en.wikipedia.org/wiki/Player_piano, 2017-01-20.
Wikipedia. Konrad Zuse[EB/OL]. https://en.wikipedia.org/wiki/Konrad_Zuse, 2017-01-30.
Largest Dams. Computer History[EB/OL]. https://www.youtube.com/watch?v=HEmFqohbQCI, 2013-12-23.
Wikipedia. Z1 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z1_(computer), 2017-04-27.
Rojas R. The Z1: Architecture and Algorithms of Konrad Zuse's First Computer[J]. Eprint Arxiv, 2014.
逸之. Z1:第一台祖思机的架构与算法[EB/OL]. http://www.jianshu.com/p/cb2ed00dd04f, 2017-04-07.
柏林自由大学. Architecture and Simulation of the Z1 Computer[EB/OL]. http://zuse-z1.zib.de/.
talentraspel. talentraspel simulator für mechanische schaltglieder zuse[EB/OL]. https://www.youtube.com/watch?v=4Xojcw3FVgo, 2013-11-12.
Wikipedia. Z2 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z2_(computer), 2017-02-23.
Wikipedia. Z3 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z3_(computer), 2017-04-14.
Rojas R. Konrad Zuse's legacy: the architecture of the Z1 and Z3[J]. Annals of the History of Computing IEEE, 1997, 19(2):5-16.
Rojas R. How to make Zuse's Z3 a universal computer[J]. IEEE Annals of the History of Computing, 1998, 20(3):51-54.
DeutschesMuseum. Die Z3 von Konrad Zuse im Deutschen Museum[EB/OL]. https://www.youtube.com/watch?v=aUXnhVrT4CI, 2013-10-23.
Wikipedia. Z4 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z4_(computer), 2017-05-10.
Wikipedia. George Stibitz[EB/OL]. https://en.wikipedia.org/wiki/George_Stibitz, 2017-04-24.
Paul E. Ceruzzi. Number, Please-Computers at Bell Labs[EB/OL]. http://ed-thelen.org/comp-hist/Reckoners-ch-4.html.
AT&T Tech Channel. AT&T Archives: Invention of the First Electric Computer[EB/OL]. https://www.youtube.com/watch?v=a4bhZYoY3lo, 2011-10-19.
history-computer.com. Relay computers of George Stibitz[EB/OL]. http://history-computer.com/ModernComputer/Relays/Stibitz.html.
Wikipedia. Howard H. Aiken[EB/OL]. https://en.wikipedia.org/wiki/Howard_H._Aiken, 2017-07-21.
Wikipedia. Harvard Mark I[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_I, 2017-07-04.
Comrie L J. A Manual of Operation for the Automatic Sequence Controlled Calculator[J]. Nature, 1946, 158:567-568.
CS101. Harvard Mark I[EB/OL]. https://www.youtube.com/watch?v=SaFQAoYV1Nw, 2014-09-13.
CS50. Harvard Mark I[EB/OL]. https://www.youtube.com/watch?v=4ObouwCHk8w, 2014-02-21.
Wikipedia. Harvard Mark II[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_II, 2017-08-03.
Wikipedia. Harvard Mark III[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_III, 2017-08-03.
Wikipedia. Harvard Mark IV[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_IV, 2017-08-03.
陈明敏, 易清明, 石敏. ARMv4指令集嵌入式微处理器设计[J]. 电子技术应用, 2014, 40(12):23-26.
下一篇:敬请期待
相关阅读
网友评论