计算机简史第三章 机电时代之机电式计算机
电、电路形成了机电式计算机
制表机:穿孔时代的到来
从 1790 年开始,美国每十年进行一次人口普查。百年间,随着人口繁衍和移民的增多,从 1790 年的 400 万不到,到 1880 年的 5000 多万,人口总数呈爆炸式地增长。
1880 年开始的第 10 次人口普查,历时 8 年才最终完成,也就是说,他们在休息两年之后就要开始第 11 次普查了,而这一次普查,需要的时间恐怕要超过 10 年。那第 12 次、13 次呢?本来就是 10 年一次的统计,如果每次耗时都在 10 年以上,这件事情就变得没有意义了。因此,政府向全社会招标,寻找解决办法。
赫尔曼·霍尔瑞斯,发明了制表机(tabulator/tabulating machine),顾名思义,就是专门用来制作数据统计表的机器。制表机主要由示数装置、穿孔机、读卡装置和分类箱组成:
制表机(原图来自维基百科)
制表机的工作是围绕穿孔卡片展开的:
- 操作员先使用穿孔机制作穿孔卡片
- 再使用读卡装置识别卡片上的信息
- 机器自动完成统计并在示数表盘上实时显示结果
- 最后,将卡片投入分类箱的某一格中,进行分类存放,以供下次统计使用。
这就是用在 1890 年人口普查中的穿孔卡片,一张卡片记录一个居民的信息。卡片设计长约 18.73cm,宽约 8.26cm,正好是当时一张美元纸币的尺寸,因为霍尔瑞斯直接用财政部装钱的盒子来装卡片:
霍尔瑞斯的穿孔卡片(图片来自维基百科)
卡片设有 300 多个孔位,与雅卡尔和巴贝奇的做法一样,靠每个孔位打孔与否来表示信息。
统计的原理:当穿孔了,按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。然后电路就可以统计对应孔位的数据:
在制表机的高效运转下,1890 年的人口普查只花了 6 年时间。随着机器的改进,历史迎来了繁荣的数据处理时代。制表机也不再局限于人口普查,逐渐扩展到会计、库存管理等一些同样需要跟大数据打交道的领域。读卡速度也从每分钟 100 张逐步提高至每分钟 2000 张。随着识别精度的提高,卡片的孔距也越来越小,具有 80~90 列孔位的卡片成为主流,有些卡片的孔位甚至多达 130 列。机器的功能也逐渐强大,不再只是简单地统计穿孔数目,减法、乘法等运算能力陆续登场。
小历史:
1911 年,制表机公司与另外 3 家公司合并成立 CTR 公司(Computing-Tabulating-Recording Company),制表机公司作为其子公司继续运营到 1933 年。1924 年,CTR 更名为国际商业机器公司(International Business Machines Corporation),就是现在大名鼎鼎的 IBM 公司。
可见,在如今众多年轻的 IT 公司中,拥有百年历史的 IBM 是位当之无愧的前辈,它完整地参与和见证了整个现代计算机的发展史。IBM 保持了制表机公司在单元记录市场的龙头地位,到 1955 年,其每天生产的穿孔卡片多达 7250 万张。
2020 年 12 月份,我国开始了第七次人口普查;2021 年 5 月 11 日,第七次全国人口普查结果公布,仅仅用了 5 个月。
祖思机:第一台二进制可编程计算机
祖思出生于柏林,长大后在一家交通行业公司工作。在负责飞机在飞行过程中的受力分析,要解各种各样的微分方程。这份在外人眼中的高智商工作,在祖思看来却无异于体力劳动,他被大量的重复运算损耗着精力,无暇顾及更有价值的创造性设计。
1936 年,祖思便辞职回家,决定建造一台更便捷的计算机器,后来称为祖思机。祖思一生中几乎是独立完成了计算机的建造,并逐步改进。
这是第一代祖思机 Z1,这是一台纯机械的机器,由成千上万的金属片和金属杆组成,靠电动马达驱动运转:
原图来自 http://zuse-z1.zib.de/zuse-z1-pano/intermediate-view
Z1 是二进制的,在组成上已初具现代计算机的特点,主要包括控制器、存储器、运算器、输入设备(穿孔带读取器和十进制输入面板)和输出设备(十进制输出面板)五大部分。
Z1 是世界上第一台二进制可编程计算机,其设计是极富开创性的,其中许多理念都被现代计算机所沿用:
- 将数据存储和指令处理分开,正是现代计算机的做法
- 奠定了二进制计算的基调,引入了实现二进制计算的基本要素——逻辑门
- 二进制数的规格化表示简洁而优雅,如今已被纳入 IEEE 标准
- 有了明确的机器周期概念,马达每转 1 圈,负责驱动金属片在 4 个方向上平移 1 圈,最终回到原位。
- 加法运算最为简单,耗时 1 个机器周期;乘法运算最为复杂,耗时 20 个周期。以完成加法的 1 个机器周期为例,4 次平移分别完成读数、计算部分和、计算进位和计算最终结果。
- 原 Z1 的工作频率为 4Hz,即每秒完成 4 个机器周期(马达每秒运转 4 圈);复制品的工作频率仅有 1Hz,完成一次乘法运算需要 20 秒
在后来几代祖思机中,祖思开始用电磁继电器逐步改进,大大减轻了机器的重量,工作频率也提高了,在后来还打算用真空管,只可惜因成本原因没有继续。
第 4 代祖思机,Z4 以 40Hz 的频率工作,一次加法仅需 0.4 秒,平均每小时可完成约 1000 次浮点运算。
哈佛机:纸带上的编程
踏足机电计算领域的还有哈佛大学。当时,一名在校的物理学博士生——霍华德·艾肯(Howard Hathaway Aiken),和当年的祖思一样,被手头繁复的计算困扰着,一心想建台计算机,于是从 1937 年开始,抱着方案四处寻找愿意合作的公司,最终是 IBM 伸出了橄榄枝。
霍华德·哈瑟维·艾肯(Howard Hathaway Aiken),1900-1973,美国物理学家。(图片来自维基百科)
1944 年,Harvard Mark I(哈佛马克 1 号)完成建造,是当年的大型计算机:它由约 765000 个机电元件组成,内部电线总长达 800 公里。机器长约 15.5 米,高约 2.4 米,重达 5 吨,撑满了整个机房的墙面。
机器左侧的玻璃柜中,是 2 个 30 行 24 列的置数旋钮阵列(图中只出镜了一半),可输入 60 个 23 位十进制数(留出 1 位表示正负,0 表示正、9 表示负);中间部分是更为壮观的计算阵列,由 72 个计数器组成,每个计数器包括 24 个机电计数轮,共可存放 72 个 23 位十进制数;机器的右侧部分是若干台穿孔式输入输出装置,包括 2 台读卡器(用于输入相对固定的经验常数)、3 台穿孔带读取器(分别读取存有常数表、插值系数和控制指令的 3 种穿孔带)、1 台穿孔机和 2 台自动打字机。
图片来自《A Manual of Operation for the Automatic Sequence Controlled Calculator》
控制机器运行的穿孔带上每一行有 24 个孔位,使用时分成 3 组,每组 8 位,用于表示数据地址或操作指令:
艾肯继续在哈佛大学研制了 Mark II~Mark IV,它们延续了 Mark I 的架构,在材料上进行了升级。1947 年的 Mark II 是全继电器的,并使用了 BCD 编码;1949 年的 Mark III 用 5000 个真空管和 1500 个晶体二极管取代了部分继电器,并引入了磁鼓、磁带等存储介质;1952 年的 Mark IV 则已是纯电子计算机,并用性能更好的磁芯存储器替代了磁鼓。
继电器还有一个问题:这些巨大,黑色,温暖的机器也会吸引昆虫。1947 年 9 月,哈佛马克 2 型的操作员从故障继电器中,拨出一只死虫。
Grace Hopper 曾说“从那时起,每当电脑了问题,我们就说它出了 bug 虫子,这就是术语”bug”的来源。
与同时期其他“重复制造轮子”的先驱不同,艾肯“站在了巨人的肩膀上”,他深入研究了帕斯卡、莱布尼茨、巴贝奇、霍尔瑞斯等前人的工作,并对他们寄予了极高的评价。他充分参考了他们的成果,也将他们的失策引以为戒——正是有了巴贝奇的前车之鉴,艾肯选择直接利用 IBM 现成的制表机零件,而没有走自己生产元件的弯路。
也正得益于这份扎实的调研基础,艾肯对计算机科学有着更系统、更深刻的理解。1947 年,他在哈佛大学开设了计算机专业的硕士学位,成为世界上第一位计算机科学教授,培养出一众出色的计算机学家。而几近 10 年之后,其他大学才陆续开设这一专业,并模仿着艾肯的教学体系。
小结
显然,用电子管建造计算机在理论上是完全可行的。不过这样的想法在早期被多数人视为天方夜谭,因为那时的电子管不但体积大、能耗高、价格昂贵,可靠性还差,常以极少的数量应用在无线电设备中,用成千上万的电子管建造计算机几乎是不可能完成的任务。
然而,还是有一批不惧困难的极客在历史的关键时刻接下了这个任务,用一根根灯丝的微弱之光,点亮了电子计算的前途。
二进制在计算中的应用,既是布尔代数计算理论的探索成果,也是穿孔技术和开关电路在硬件上的“倒逼”使然。比起追逐可靠性的机械时期,恰逢现代化战争伊始的机电时期将计算速度视为更重要的指标,这一需求敦促着先驱者们不断尝试新的材料和技术,为电子时期的到来埋下了伏笔。