机电时期(19世纪末~20世纪40年代)
我们难以理解计算机,也许主要并不由于它复杂的机理,而是根本想不明白,为什么一通上电,这坨铁疙瘩就突然能飞速运转,它安安静静地到底在干些啥。
经过前几篇的探索,我们已经了解机械计算机(准确地说,我们把它们称为机械式桌面计算器)的工作方式,本质上是通过旋钮或把手带动齿轮旋转,这一过程全靠手动,肉眼就能看得一清二楚,甚至用现在的乐高积木都能实现。麻烦就麻烦在电的引入,电这样看不见摸不着的神物(当然你可以摸摸试试),正是让计算机从笨重走向传奇、从简单明了走向令人费解的关键。
技术准备
19世纪,电在计算机中的应用主要有两大方面:一是提供动力,靠电动机(俗称马达)代替人工驱动机器运行;二是提供控制,靠一些电动器件实现计算逻辑。
我们把这样的计算机称为机电计算机。
电动机
![30022-d83f8489b5ddf2fa.png](https://i-blog.csdnimg.cn/blog_migrate/6e83dff5b3e85a26c76b66276515eb94.png)
1820年4月,奥斯特在实验中发现通电导线会造成附近磁针的偏转,证明了电流的磁效应。第二年,法拉第想到,既然通电导线能带动磁针,反过来,如果固定磁铁,旋转的将是导线,于是解放人力的伟大发明——电动机便诞生了。
电动机其实是件很不稀奇、很笨的发明,它只会一个劲不停地转圈,而机械式桌面计数器的运转本质上就是齿轮的转圈,两者简直是天造地设的一双。有了电动机,计算员不再需要吭哧吭哧地手摇,做数学也终于少了点体力劳动的模样。
电磁继电器
![30022-d64592079f6d2d29.jpg](https://i-blog.csdnimg.cn/blog_migrate/95c8ff3d5ef989d3b701c8c64a9b1ed7.jpeg)
电磁学的价值在于摸清了电能和动能之间的转换,而从静到动的能量转换,正是让机器自动运行的关键。而19世纪30年代由亨利和戴维所分别发明的继电器,就是电磁学的重要应用之一,分别在电报和电话领域发挥了重要作用。
![30022-5de041e9cbae632d.png](https://i-blog.csdnimg.cn/blog_migrate/6191787a0d3884cb5e1786ee74275020.png)
其结构和原理十分简单:当线圈通电,产生磁场,铁质的电枢就被吸引,与下侧触片接触;当线圈断电,电枢就在弹簧的作用下上扬,与上侧触片接触。
在机电设备中,继电器主要发挥两方面的作用:一是通过弱电控制强电,使得控制电路可以控制工作电路的通断,这一点放张原理图就能一目了然;二是将电能转换为动能,利用电枢在磁场和弹簧作用下的往返运动,驱动特定的纯机械结构以完成计算任务。
![30022-71501e2570b60555.png](https://i-blog.csdnimg.cn/blog_migrate/6a2e29023fe8168b9cb6674d7a9e6396.png)
制表机(tabulator/tabulating machine/unit record equipment/electric accounting machine)
从1790年开始,美国的人口普查基本每十年进行一次,随着人口繁衍和移民的增多,人口数量那是一个爆炸。
![30022-900fcc106e17ff11.png](https://i-blog.csdnimg.cn/blog_migrate/5b5b81a813be769e9d99a3f0c276e485.png)
![30022-3ed6c3c07b9b78c7.png](https://i-blog.csdnimg.cn/blog_migrate/be5d9efbd8094e7d838455e932e614eb.png)
不像现在这个的互联网时代,人一出生,各种信息就已经电子化、登记好了,甚至还能数据挖掘,你无法想象,在那个计算设备简陋得基本只能靠手摇进行四则运算的19世纪,千万级的人口统计就已经是当时美国政府所不能承受之重。1880年开始的第十次人口普查,历时8年才最终完成,也就是说,他们休息上两年之后就要开始第十一次普查了,而这一次普查,需要的时间恐怕要超过10年。本来就是十年统计一次,如果每次耗时都在10年以上,还统计个鬼啊!
当时的人口调查办公室(1903年才正式成立美国人口调查局)方了,赶紧征集能减轻手工劳动的发明,就此,霍尔瑞斯带着他的制表机完虐竞争对手,在方案招标中脱颖而出。
![30022-7132c306997c34d2.jpg](https://i-blog.csdnimg.cn/blog_migrate/28529b92f45db054bf7df92c3eb72270.jpeg)
霍尔瑞斯的制表机首次将穿孔技术应用到了数据存储上,一张卡片记录一个居民的各项信息,就像身份证一样一一对应。聪明如你一定能联想到,通过在卡片对应位置打洞(或不打洞)记录信息的方式,与现代计算机中用0和1表示数据的做法简直一毛一样。确实这可以看作是将二进制应用到计算机中的思想萌芽,但那时的设计还不够成熟,并未能如今这般巧妙而充分地利用宝贵的存储空间。举个例子,我们现在一般用一位数据就可以表示性别,比如1表示男性,0表示女性,而霍尔瑞斯在卡片上用了两个位置,表示男性就在标M的地方打孔,女性就在标F的地方打孔。其实性别还凑合,表示日期时浪费得就多了,12个月需要12个孔位,而真正的二进制编码只需要4位。当然,这样的局限与制表机中简单的电路实现有关。
![30022-690017c6138b6d05.gif](https://i-blog.csdnimg.cn/blog_migrate/971e9b024fe2cb87581583124558cdd1.gif)
![30022-865acb03e6a7cea3.jpg](https://i-blog.csdnimg.cn/blog_migrate/34e7087c3ecaa27332d90f4368860e32.jpeg)
![30022-f886ba84c9bb7143.jpg](https://i-blog.csdnimg.cn/blog_migrate/6a210eca3bc168ac832414d479ada26d.jpeg)
有没有一点熟悉的赶脚?
![30022-47bf143a02b0d8ad.jpg](https://i-blog.csdnimg.cn/blog_migrate/b0db2db7014528f3842b3fd9c251c0fd.jpeg)
这的确是当时的人体工程学设计,目的是让打孔员每天能多打点卡片,为了节省时间他们也是蛮拼的……
在制表机前,穿孔卡片/纸带在各类机器上的作用主要是存储指令,比较有代表性的,一是贾卡的提花机,用穿孔卡片控制经线提沉(详见《现代计算机真正的鼻祖》),二是自动钢琴(player piano/pianola),用穿孔纸带控制琴键压放。
![30022-7e1377b84207b438.jpg](https://i-blog.csdnimg.cn/blog_migrate/d0ed26918c158c6abfa802e16048c9ad.jpeg)
![30022-cec3621aa3a1ebfb.gif](https://i-blog.csdnimg.cn/blog_migrate/a627e548b4f3fc3de163ef988ac9ef2f.gif)
![30022-4ca5f9b670657437.png](https://i-blog.csdnimg.cn/blog_migrate/3f1cb5a0f69ac8f87021f0fa1d0ffcbf.png)
打好了孔,下一步就是将卡片上的信息统计起来。
![30022-3cdd1c2d99663a56.png](https://i-blog.csdnimg.cn/blog_migrate/530eac85504d6922421fcf77836ba3e3.png)
制表机通过电路通断识别卡上信息。读卡装置底座中内嵌着与卡片孔位一一对应的管状容器,容器里盛有水银,水银与导线相连。底座上方的压板中嵌着同样与孔位一一对应的金属针,针抵着弹簧,可以伸缩,压板的上下面由导电材料制成。这样,当把卡片放在底座上,按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。
![30022-59fcad1e3740ac46.png](https://i-blog.csdnimg.cn/blog_migrate/32ccb5670eefa2dc39fbcde9a878ff99.png)
如何将电路通断对应到所需要的统计信息?霍尔瑞斯在专利中给出了一个简单的例子。
![30022-29fcad399c8eec9d.png](https://i-blog.csdnimg.cn/blog_migrate/af96cf0e1540031a3ad0246cb6107945.png)
![30022-74bcd544c7e226c7.png](https://i-blog.csdnimg.cn/blog_migrate/1b1f713f8cbdd2ef13abb23f2659d606.png)
图中有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」的针同时与水银接触,接通的控制电路如下:
![30022-50838da40af3089f.png](https://i-blog.csdnimg.cn/blog_migrate/02e94cbc412cd9df1dfc82d60181712f.png)
这一示例首先展示了针G的作用,它把控着所有控制电路的通断,目的有二:
1、在卡片上留出一个专供G通过的孔,以防止卡片没有放正(照样可以有部分针穿过错误的孔)而统计到错误的信息。
2、令G比其他针短,或者G下的水银比其他容器里少,从而确保其他针都已经接触到水银之后,G才最终将整个电路接通。我们知道,电路通断的瞬间容易产生火花,这样的设计可以将此类元器件的损耗集中在G身上,便于后期维护。
不得不感慨,这些发明家做设计真的特别实用、细致。
上图中,橘黄色箭头标识出3个相应的继电器将闭合,闭合之后接通的工作电路如下:
![30022-090d39c77e5bee4b.png](https://i-blog.csdnimg.cn/blog_migrate/8b4afb019b9be456056f9957e8775aaa.png)
通电的M将产生磁场, 牵引特定的杠杆,拨动齿轮完成计数。霍尔瑞斯的专利中没有给出这一计数装置的具体结构,可以想象,从十七世纪开始,机械计算机中的齿轮传动技术已经发展到很成熟的水平,霍尔瑞斯无需重新设计,完全可以使用现成的装置——用他在专利中的话说:「any suitable mechanical counter」(任何合适的机械计数器都OK)。
M不单控制着计数装置,还控制着分类箱盖子的开合。
![30022-e3e75621341f6e92.png](https://i-blog.csdnimg.cn/blog_migrate/1fdd0946d26f92f3e317633e87208072.png)
将分类箱上的电磁铁接入工作电路,每次完成计数的同时,对应格子的盖子会在电磁铁的作用下自动打开,统计员瞟都不用瞟一眼,就可以左手右手一个快动作将卡片投到正确的格子里。由此完成卡片的快速分类,以便后续进行其他方面的统计。
![30022-5a9ae02a5772ba6d.png](https://i-blog.csdnimg.cn/blog_migrate/0ef394656523ed817b5eafe79090c2cd.png)
![30022-b2f941cf50520bab.png](https://i-blog.csdnimg.cn/blog_migrate/d7da737cef86c4529e4ca623428318fa.png)
1896年,霍尔瑞斯创立了制表机公司(The Tabulating Machine Company),1911年与另外三家公司合并成立Computing-Tabulating-Recording Company(CTR),1924年更名为International Business Machines Corporation(国际商业机器公司),就是现在大名鼎鼎的IBM。IBM也因此在上个世纪风风火火地做着它拿手的制表机和计算机产品,成为一代霸主。
制表机在当时成为与机械计算机并存的两大主流计算设备,但前者通常专用于大型统计工作,后者则往往只能做四则运算,无一具有通用计算的能力,更大的变革将在二十世纪三四十年代掀起。
祖思机
![30022-06da88e2744efe81.jpg](https://i-blog.csdnimg.cn/blog_migrate/a8fc4a8f34e5fb5097a77df4632204c2.jpeg)
有些天才注定成为大师,祖思便是其一。读大学时,他就不安分,专业换来换去都觉得无聊,工作之后,在亨舍尔公司参与研究风对机翼的影响,对繁复的计算更是忍无可忍。
![30022-4e948257de3edc4f.gif](https://i-blog.csdnimg.cn/blog_migrate/e51e416f6f12a17ebc8a0a65786b50b5.gif)
祖思一面抓狂,一面相信还有好多人跟他一样抓狂,他看到了商机,觉得这个世界迫切需要一种可以自动计算的机器。于是一不做二不休,在亨舍尔才呆了几个月就潇洒辞职,搬到父母家里
啃老
,一门心思搞起了发明。他对巴贝奇一无所知,凭一己之力做出了世界上第一台可编程计算机——Z1。
Z1
祖思从1934年开始了Z1的设计与实验,于1938年完成建造,在1943年的一场空袭中炸毁——Z1享年5岁。
![30022-eb9145bd14f88972.jpg](https://i-blog.csdnimg.cn/blog_migrate/78814380b370a346ec90b520dcb2519e.jpeg)
从照片上可以发现,Z1是一坨庞大的机械,除了靠电动马达驱动,没有任何与电相关的部件。别看它原始,里头可有好几项甚至沿用至今的开创性理念:
■ 将机器严格划分为处理器和内存两大部分,这正是如今冯·诺依曼体系结构的做法。
■ 不再同前人一样用齿轮计数,而是采用二进制,用穿过钢板的钉子/小杆的来回移动表示0和1。
■ 引入浮点数,相比之下,后文将提到的一些同时期的计算机所用都是定点数。祖思还发明了浮点数的二进制规格化表示,优雅至极,后来被纳入IEEE标准。
■ 靠机械零件实现与、或、非等基础的逻辑门,靠巧妙的数学方法用这些门搭建出加减乘除的功能,最出彩的要数加法中的并行进位——一步完成所有位上的进位。
与制表机一样,Z1也用到了穿孔技术,不过不是穿孔卡,而是穿孔带,用废弃的35毫米电影胶卷制成。和巴贝奇所见略同,祖思也在穿孔带上存储指令,有输入输出、数据存取、四则运算共8种。
![30022-c3874976a9a239d6.png](https://i-blog.csdnimg.cn/blog_migrate/6e5ce9a2991e55cf5f20c85fb58ca5de.png)
每读一条指令,Z1内部都会牵动一大串部件完成一系列复杂的机械运动。具体如何运动,祖思没有留下完整的描述。有幸的是,一位德国的计算机专家——Raul Rojas对有关Z1的图纸和手稿进行了大量的研究和分析,给出了较为完善的阐述,主要见其论文《The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer》,而我一时抽风把它翻译了一遍——《Z1:第一台祖思机的架构与算法》。如果你读过几篇Rojas教授的论文就会发现,他的研究工作可谓壮观,当之无愧是世界上最了解祖思机的人。他成立了一个网站——Konrad Zuse Internet Archive,专门搜集整理祖思机的资料。他带的某个学生还编写了Z1加法器的仿真软件,让我们来直观感受一下Z1的精巧设计:
![30022-5edc9244f9a8d803.gif](https://i-blog.csdnimg.cn/blog_migrate/62cf9998c0cdf95e77ae87938a4aae54.gif)
![30022-dc681fa8305a5fd6.gif](https://i-blog.csdnimg.cn/blog_migrate/408f118bf21a5ff976d29741edceed59.gif)
![30022-719ad1b65833f8b5.gif](https://i-blog.csdnimg.cn/blog_migrate/8485f4da9652b27843a8fd6ee21482e3.gif)
幸运的是,退休之后,祖思在1984~1989年间凭着自己的记忆重绘Z1的设计图纸,并完成了Z1复制品的建造,现藏于德国技术博物馆。尽管它跟原本的Z1并不完全一样——多少会与事实存在出入的记忆、后续设计经验可能带来的思维进步、半个世纪之后材料的发展,都是影响因素——但其大框架基本与原Z1一致,是后人研究Z1的宝贵财富,也让吃瓜的游客们得以一睹纯机械计算机的风采。
![30022-963bb5e46181e04f.png](https://i-blog.csdnimg.cn/blog_migrate/9abafd2258f003d7c4a55073c04c4244.png)
当然,这台复制品和原Z1一样不靠谱,做不到长时间无人值守的自动运行,甚至在揭幕仪式上就挂了,祖思花了几个月才修好。1995年祖思去世后,它就没再运行,成了一具钢铁尸体。
Z1的不可靠,很大程度上归咎于机械材料的局限性。用现今的眼光看,计算机内部是无比复杂的,简单的机械运动一方面速度不快,另一方面无法灵活、可靠地传动。祖思早有采用电磁继电器的想法,无奈那时的继电器不但价格不低,体积还大。到了Z2,祖思灵机一动,最占零件的不过是机器的存储部分,何不继续使用机械式内存,而改用继电器来实现处理器呢?
Z2是紧跟着Z1的第二年诞生的,其设计资料一样难逃被炸毁的命运(不由感慨那个动乱的年代啊)。Z2的资料不多,大体可以认为是Z1到Z3的过渡品,它的一大价值是验证了继电器和机械件在实现处理器方面的等效性,也相当于验证了Z3的可行性,二大价值是为祖思赢得了建造Z3的一些赞助。
Z3
Z3的寿命比Z1还短,从1941年建造完成,到1943年被炸毁(是的,又被炸毁了),就活了两年。好在战后到了60年代,祖思的公司做出了完美的复制品,比Z1的复制品靠谱得多,藏于德意志博物馆,至今还能运行。
![30022-1a5a11b5d22f05f0.jpg](https://i-blog.csdnimg.cn/blog_migrate/e723acd1ede2d26a1b4908eef86f0aac.jpeg)
由于祖思一脉相承的设计,Z3和Z1有着一毛一样的体系结构,只不过它改用了电磁继电器,内部逻辑不再需要靠复杂的机械运动来实现,只要接接电线就可以了。我搜了一大圈,没有找到Z3的电路设计资料——因着祖思是德国人,研究祖思的Rojas教授也是德国人,更多详尽的资料均为德文,语言不通成了我们接触知识的壁垒——就让我们简单点,用一个YouTube上的演示视频一睹Z3芳容。
以12+17=19这一算式为例,用二进制表示即:1100+10001=11101。
![30022-442f011dc1ec393e.gif](https://i-blog.csdnimg.cn/blog_migrate/8cae75d8fc41541a82f90427f930741b.gif)
![30022-209a540a8b414570.jpg](https://i-blog.csdnimg.cn/blog_migrate/b9fe98cbba0f136daafd2ac1be612429.jpeg)
![30022-4a7955e2f5201980.jpg](https://i-blog.csdnimg.cn/blog_migrate/1d32a13616085e63ebd3da6740c415e1.jpeg)
![30022-39890c4ab9606b66.gif](https://i-blog.csdnimg.cn/blog_migrate/1ed5257b7d8e18e454981837b0f1235d.gif)
![30022-1166ade0d37441d8.jpg](https://i-blog.csdnimg.cn/blog_migrate/4f7c58729d1236db3afc19273af9ba2e.jpeg)
当然这只是机器内部的表示,如果要用户在继电器上查看结果,分分钟都成老花眼。
![30022-a917f078f3806cbb.jpg](https://i-blog.csdnimg.cn/blog_migrate/ef5ecdbdf100a63df6ff13208cbf18d0.jpeg)
除了四则运算,Z3比Z1还新增了开平方的功能,操作起来都相当方便,除了速度稍微慢点,完全顶得上现在最简单的那种电子计算器。
![30022-f9d4bc5b73d6e1ee.jpg](https://i-blog.csdnimg.cn/blog_migrate/761d70157bbd4c378262f4ad3c713bee.jpeg)
值得一提的是,继电器的触点在开闭的瞬间容易引起火花(这跟我们现在插插头时会出现火花一样),频繁通断将严重缩短使用寿命,这也是继电器失效的主要原因。祖思统一将所有线路接到一个旋转鼓,鼓表面交替覆盖着金属和绝缘材料,用一个碳刷与其接触,鼓旋转时即产生电路通断的效果。每一周期,确保需闭合的继电器在鼓的金属面与碳刷接触之前闭合,火花便只会在旋转鼓上产生。旋转鼓比继电器耐用得多,也容易更换。如果你还记得,不难发现这一做法与霍尔瑞斯制表机中G针的安排如出一辙,不得不感叹这些发明家真是英雄所见略同。
除了上述这种「随输入随计算」的用法,Z3当然还支持运行预先编好的程序,不然也无法在历史上享有「第一台可编程计算机器」的名誉了。
![30022-16a60c77a4be098a.gif](https://i-blog.csdnimg.cn/blog_migrate/158c8da4616f49f117990a970a4977a5.gif)
![30022-32471bfb2c72c875.png](https://i-blog.csdnimg.cn/blog_migrate/53e1828599636e94cba3368c3435b183.png)
![30022-de6e9a0f0d735d82.gif](https://i-blog.csdnimg.cn/blog_migrate/ac9ba9710e998144f3bf08b9f8078ed1.gif)
1997~1998年间,Rojas教授将Z3证明为通用图灵机(UTM),但Z3本身没有提供条件分支的能力,要实现循环,得粗暴地将穿孔带的两头接起来形成环。到了Z4,终于有了条件分支,它使用两条穿孔带,分别作为主程序和子程序。Z4连上了打字机,能将结果打印出来。还扩充了指令集,支持正弦、最大值、最小值等丰富的求值功能。甚而至于,开创性地应用了堆栈的概念。但它回归到了机械式存储,因为祖思希望扩大内存,继电器还是体积大、成本高的老问题。
总而言之,Z系列是一代更比一代强,除了这里介绍的1~4,祖思在1941年成立的公司还陆续生产了Z5、Z11、Z22、Z23、Z25、Z31、Z64等等等等产品(当然后面的系列开始采用电子管),共251台,一路高歌,如火如荼,直到1967年被西门子吞并,成为这一国际巨头体内的一股灵魂之血。
贝尔Model系列
同一时期,另一家不容忽视的、研制机电计算机的机构,便是上个世纪叱咤风云的贝尔实验室。众所周知,贝尔实验室及其所属公司是做电话起家、以通信为主要业务的,虽然也做基础研究,但为什么会涉足计算机领域呢?其实跟他们的老本行不无关系——最早的电话系统是靠模拟量传输信号的,信号随距离衰减,长距离通话需要用到滤波器和放大器以保证信号的纯度和强度,设计这两样设备时需要处理信号的振幅和相位,工程师们用复数表示它们——两个信号的叠加是两者振幅和相位的分别叠加,复数的运算法则正好与之相符。这就是一切的起因,贝尔实验室面临着大量的复数运算,全是简单的加减乘除,这哪是脑力活,分明是体力劳动啊,他们为此甚至专门雇佣过5~10名妇女(当时的廉价劳力)全职来做这事。
从结果来看,贝尔实验室发明计算机,一方面是源于自身需求,另一方面也从自身技术上得到了启发。电话的拨号系统由继电器电路实现,通过一组继电器的开闭决定谁与谁进行通话。当时实验室研究数学的人对继电器并不熟悉,而继电器工程师又对复数运算不尽了解,将两者联系到一起的,是一名叫乔治·斯蒂比兹的研究员。
![30022-ceac441a7655cb4a.jpg](https://i-blog.csdnimg.cn/blog_migrate/0a21f8673cff22711350286ed24f06b4.jpeg)
Model K
1937年,斯蒂比兹察觉到继电器的开闭状态与二进制之间的联系。他做了个实验,用两节电池、两个继电器、两个指示灯,以及从易拉罐上剪下来的触片组成一个简单的加法电路。
![30022-e2890a307449b718.jpg](https://i-blog.csdnimg.cn/blog_migrate/5a4acd77201faa1914f11bd11c815d5e.jpeg)
![30022-7f9b5937ddf8a624.PNG](https://i-blog.csdnimg.cn/blog_migrate/22d8e8f351ea5dec802e6513ef5a8b3b.png)
![30022-044c8bd9d40eabc8.PNG](https://i-blog.csdnimg.cn/blog_migrate/857de07f13d84e77d479f0d7ec7a62e2.png)
![30022-7927eff0b2c88fc2.PNG](https://i-blog.csdnimg.cn/blog_migrate/655ac3de865cd22d2c764cca88631b8b.png)
有简友问到具体是怎么实现的,我没有查到相关资料,但经过与同事的探讨,确认了一种可行的电路:
![30022-b7c18708a41c023a.png](https://i-blog.csdnimg.cn/blog_migrate/d9e99b3a116784c2ce01b61b0bb71d01.png)
开关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
![30022-f57b20b9869ee9c7.jpg](https://i-blog.csdnimg.cn/blog_migrate/d4a8a3385c9fdb649181d32634f52e41.jpeg)
这里不深究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)
![30022-7bc76c0b41cf4f17.png](https://i-blog.csdnimg.cn/blog_migrate/25ec643bd415bac680410e6501ab082c.png)
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)
![30022-4f97d34d7fb99967.png](https://i-blog.csdnimg.cn/blog_migrate/da8501a51e172ae20ca36e009e10d87b.png)
是为余3码(Excess-3),或称斯蒂比兹码。为什么要加3?因为四位二进制原本可以表示0~15,有6个编码是多余的,斯蒂比兹选择使用中间10个。
![30022-3ba8b35b52fdf959.png](https://i-blog.csdnimg.cn/blog_migrate/abce197ab06add67ac2bc6865cfee6dd.png)
这么做当然不是因为强迫症,余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台终端并不能同时使用,像电话一样,只要有一台「占线」,另两台就会收到忙音提示。
![30022-6b4b1cd3660412c6.jpg](https://i-blog.csdnimg.cn/blog_migrate/6f355109aa7befdc26433133e83605a4.jpeg)
![30022-6b8b7682c2de8c80.gif](https://i-blog.csdnimg.cn/blog_migrate/2953e81dd4b9f1984d1da8a9931596c4.gif)
![30022-5876624dc56bd2c5.gif](https://i-blog.csdnimg.cn/blog_migrate/da64035db648e7ea23cd15bfdc2da91a.gif)
![30022-433ff969f79ed501.jpg](https://i-blog.csdnimg.cn/blog_migrate/b1b1f5f2cd485cf03ce0f2d151020b87.jpeg)
Model I不但是第一台多终端的计算机,还是第一台可以远程操控的计算机。这里的远程,说白了就是贝尔实验室利用自身的技术优势,于1940年9月9日,在达特茅斯学院(Dartmouth College)和纽约的本部之间搭起线路,斯蒂比兹带着小小的终端机到学院演示,不一会就从纽约传回结果,在与会的数学家中引起了巨大轰动,其中就有日后大名鼎鼎的冯·诺依曼,个中启迪不言而喻。
![30022-aec773701538e436.png](https://i-blog.csdnimg.cn/blog_migrate/85303338ba4c5ba511a9ac468a6c91c1.png)
![30022-d15974f9ff005729.png](https://i-blog.csdnimg.cn/blog_migrate/8f5020c99aefc6fa790a27b3740378c9.png)
斯蒂比兹由此成为远程计算第一人。
然而,Model I只能做复数的四则运算,不可编程,当贝尔的工程师们想将它的功能扩展到多项式计算时,才发现其线路被设计死了,根本改动不得。它更像是台巨型的计算器,准确地说,仍是calculator,而不是computer。
Model II
二战期间,美国要研制高射炮自动瞄准装置,便又有了研制计算机的需求,继续由斯蒂比兹负责,便是于1943年完成的Model II——Relay Interpolator(继电器插值器)。
Model II开始使用穿孔带进行编程,共设计有31条指令,最值得一提的还是编码——二-五编码。
![30022-bc7ea3b460f0da51.png](https://i-blog.csdnimg.cn/blog_migrate/d756899bc568e7e88f37a9248e85e71f.png)
你会发现,二-五编码比上述的任一种编码都要浪费位数,但它有它的强大之处,便是自校验。每一组继电器中,有且仅有一个继电器为1,一旦出现多个1,或者全是0,机器就能立马发现问题,由此大大提高了可靠性。
Model II之后,一直到1950年,贝尔实验室还陆续推出了Model III、Model IV、Model V、Model VI,在计算机发展史上盘踞一席之地。除了战后的VI返璞归真用于复数计算,其余都是军事用途,可见战争确实是技术革新的催化剂。
Harvard Mark系列
稍晚些时候,踏足机电计算领域的还有哈佛大学。当时,有一名正在哈佛攻读物理PhD的学生——艾肯,和当年的祖思一样,被手头繁复的计算困扰着,一心想建台计算机,于是从1937年开始,抱着方案四处寻找合作。第一家被拒,第二家被拒,第三家终于伸出了橄榄枝,便是IBM。
![30022-0c206d469a58915f.jpeg](https://i-blog.csdnimg.cn/blog_migrate/945c2ba34878facecaa2e92f618f983e.jpeg)
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)三名工程师主建造,按理,双方单位的贡献是对半的。
![30022-027230f9eda876b9.jpg](https://i-blog.csdnimg.cn/blog_migrate/19443a2b467cffb25aec17dc87121ab1.jpeg)
于1944年完成了这台Harvard Mark I, 在娘家叫做IBM自动顺序控制计算机(IBM Automatic Sequence Controlled Calculator),ASCC。
![30022-24279c1d0806bf18.png](https://i-blog.csdnimg.cn/blog_migrate/58f2dd1b6b7b441dcf4f41674a8547c1.png)
同祖思机一样,Mark I也通过穿孔带获得指令。穿孔带每行有24个空位,前8位标识用于存放结果的寄存器地址,中间8位标识操作数的寄存器地址,后8位标识所要进行的操作——结构已经非常类似后来的汇编语言。
![30022-f7e968c7209c5b04.png](https://i-blog.csdnimg.cn/blog_migrate/472670e3bfb0a34294930f20c6d91b9c.png)
![30022-29e0a9a3ba88886a.jpg](https://i-blog.csdnimg.cn/blog_migrate/c2be5db6acac1dd03f4f668176ad2f35.jpeg)
![30022-5cc54c51fd5ba03b.gif](https://i-blog.csdnimg.cn/blog_migrate/da366a8fb301150b94153b8cec9c20e2.gif)
![30022-366f6a8cc4f8ce6e.gif](https://i-blog.csdnimg.cn/blog_migrate/5a3e7b987ca1763c438d4c14e2cbd678.gif)
至于数据,Mark I内有72个累加寄存器,对外不可见。可见的是另外60个24位的常数寄存器,通过开关旋钮置数,于是就有了这样蔚为壮观的60×24旋钮阵列:
![30022-771f574cfb760c7e.gif](https://i-blog.csdnimg.cn/blog_migrate/d75bed860f8fea3e768ba1e7461c85e4.gif)
![30022-19ba372931336444.PNG](https://i-blog.csdnimg.cn/blog_migrate/c39a4c280fa8bbbd709b452e0ae032bd.png)
同时,Mark I还可以通过穿孔卡片读入数据。最终的计算结果由一台打孔器和两台自动打字机输出。
![30022-623b702152479823.gif](https://i-blog.csdnimg.cn/blog_migrate/60d255cd97dcdbaaccffc66b9aa50c69.gif)
![30022-829865971d0f516c.PNG](https://i-blog.csdnimg.cn/blog_migrate/70708a964d67ea1b477741ba09a581ba.png)
下面让我们来大致瞅瞅它里头是怎么运作的。
![30022-9d8ef47480d09ebe.png](https://i-blog.csdnimg.cn/blog_migrate/230b601d8588bc89a08aa436d7bbaf8e.png)
当然Mark I不是用齿轮来表示最终结果的,齿轮的旋转是为了接通表示不同数字的线路。
![30022-fbb8e5c18ee4ae1d.png](https://i-blog.csdnimg.cn/blog_migrate/51c0562a39904f60abb8b41e6b3ae0c8.png)
齿轮和电刷是可离合的,若它们不接触,任齿轮不停旋转,电刷是不动的。艾肯将300毫秒的机器周期细分为16个时间段,在一个周期的某一时间段,靠磁力吸附使齿轮和电刷发生关系齿轮通过轴带动电刷旋转。吸附之前的时间是空转,从吸附开始,周期内的剩余时间便用来进行实质的旋转计数和进位工作。
其余复杂的电路逻辑,则理所当然是靠继电器来完成。
艾肯设计的计算机并不局限于一种材料实现,在找到IBM之前,他还向一家制造传统机械式桌面计算器的公司提出过合作请求,如果这家公司同意合作了,那么Mark I最终极可能是纯机械的。后来,1947年完成的Mark II也证明了这一点,它大体上仅是用继电器实现了Mark I中的机械式存储部分,是Mark I的纯继电器版本。1949年和1952年,又分别诞生了半电子(二极管继电器混合)的Mark III和纯电子的Mark IV。
末了,关于这一系列值得一提的,是日后常拿来与冯·诺依曼结构做对比的哈佛结构,与冯·诺依曼结构统一存储的做法不同,它把指令和数据分开存储,以获得更高的执行效率,相对的,付出了设计复杂的代价。
![30022-8e8b432f12f4eec3.png](https://i-blog.csdnimg.cn/blog_migrate/c38f41bdacf9fc9e7b95ff66e896194f.png)
就这样趟过历史,渐渐地,这些遥远的东西也变得与我们亲近起来,历史与现在从来没有脱节,脱节的是我们局限的认知。往事并非与现今毫无关系,我们所熟知的伟大创造都是从历史一次又一次的更迭中脱胎而出的,这些前人的智慧串联着,汇聚成流向我们、流向未来的璀璨银河,我掀开它的惊鸿一瞥,陌生而熟悉,心里头热乎乎地涌起一阵难以言表的惊艳与欣喜,这便是研究历史的乐趣。
参考文献
胡守仁. 计算机技术发展史(一)[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.
相关阅读