# 机械计算和电子计算

虽然我无意尝试撰写一部计算机史，甚至不打算写一部操作系统史，但我有必要在这里描绘出一些内容，因为我不想让非专业人士迷失。

要理解现代计算机的起源，必须跟踪三条不同的线索：

* 机械计算
* 制表与排序
* 差分机与解析机

当这几条线索在第一次世界大战结束前后（即 1918 年左右）交织在一起时，技术也经历了从机械到机电（艾肯），再到电子（埃克特和莫克利），到晶体管化（IBM 7090），再到板上微电子计算机（Altair 8008），直到今天的芯片级计算机的发展历程。

机械计算方法由来已久。算盘可能是最为古老的计算工具。中国和埃及人早在四千多年前就已经有了这种装置。西班牙人到来时，玛雅人也拥有这种工具。拿破仑发现对数（1614 年）及其“纳皮尔骨”（标记着乘法用的象牙棒）后不久，滑尺被发明出来（伦敦维多利亚与阿尔伯特博物馆里藏有一套属于查尔斯·巴贝奇的纳皮尔骨）。

1642 年，年仅 18 岁的布莱兹·帕斯卡发明了一台能进行加法和“进位”的计算器，以帮助他的父亲——一名税务员。近 30 年后，1671 年，莱布尼茨在帕斯卡的机器基础上更进一步，制造出了使用一种巧妙装置“阶梯轮”的乘法原型机，这种装置直到 20 世纪 40 年代末的最后一批机械计算器中仍在使用。1676 年，莱布尼茨向伦敦皇家学会展示了他的计算器。第一台商业上成功的计算器由查尔斯·泽维尔·托马斯于 1820 年发明。到了 1878 年，惊人地售出了 1500 台——平均每年近 30 台。第一次世界大战后，这种计算器仍由巴黎的达拉斯公司制造。布伦斯维加加法机基于弗兰克·斯蒂芬·鲍德温 1875 年的专利，它用带有可变齿数的轮替代了莱布尼茨的阶梯轮，在 1892 年至 1912 年间销售了 2 万台——平均每年 1000 台。

第一台键盘驱动的计算器由 D.D.帕尔马利于 1850 年申请专利，而多尔·尤金·费尔特的康普托米特——首台成功的键控多阶计算机——于 1887 年获得专利。

1812 年，查尔斯·巴贝奇提出了一种不同类型计算器的构想，称为差分机。他于 1823 年获得了英国政府的支持。项目于 1833 年停止，1842 年因成本过高被政府放弃。但从 1833 年起，巴贝奇开始专注于另一种机器——解析机，这种机器能够自动计算所有数学公式。解析机的各种操作由打孔卡控制，这些打孔卡是仿照贾卡织机使用的卡片制作的。虽然仅完成了部分构造，但巴贝奇的笔记、图纸和部分机器现藏于伦敦的维多利亚与阿尔伯特博物馆。

贾卡织机，是通过自动化来提高生产效率的一次成功尝试，它本身也是建立在多项先前创新的基础上的：1725 年，布雄用带孔的无尽纸带替代了成束的环状绳索；1728 年，法尔康用带孔卡片替代了纸带，但卡片仍附着在绳索上；1748 年，雅克·德·沃康松将带孔纸带和卡片结合起来。卡片上的图案由专用机器用模板绘制的设计进行打孔。由此，程序化机器诞生了。

一百多年后，哥伦比亚学院毕业生赫尔曼·霍勒里斯回忆起了那些带孔卡片的存在。霍勒里斯刚开始在人口普查局工作，年薪丰厚，为 600 美元。他被安排参与一项关于制造业中使用的动力和机械的调查工作。但他也结识了负责“重要统计数据”的约翰·肖·比林斯。一天晚餐时，比林斯抱怨查尔斯·西顿最近发明的制表设备不够完善，该设备曾用于 1870 年的人口普查。比林斯认为，鉴于人口增长，1880 年的人口普查可能需要七八年才能完成，而 1890 年的人口普查到了 1900 年仍未完成。“应该有一台机器来完成纯机械的制表工作，比如人口统计和类似数据的处理，”比林斯说。霍勒里斯在 30 年后回忆道：“我们谈过这事，我记得……他想到了用卡片上的缺口来表示个人的描述。”霍勒里斯考虑制造一台能记录和读取这些信息的装置，并邀请比林斯与他合作。比林斯为人谨慎，拒绝了邀请。

1882 年，霍勒里斯以机械工程讲师身份去了麻省理工学院（当时他 22 岁）。在麻省理工学院的教学工作让他有时间继续研发这台机器。他最初考虑将信息记录在长条纸带上，但这被证明不切实际。1883 年夏天，霍勒里斯乘火车西行。在火车上，他看到了一种“打孔照片”的技术，即列车员通过打孔方式将乘客的描述记录在车票上，以便核实同一人是否一直使用该车票（如性别、发色、眼睛颜色等信息）。

霍勒里斯于 1884 年申请了他的第一台机器专利，1886 年又申请了改进设计的专利，并在巴尔的摩人口普查中进行了试验。根据试验报告，新泽西和纽约订购了机器（用于统计死亡率）。霍勒里斯和一些商业伙伴竞标并赢得了 1890 年人口普查的合同。奥地利政府于 1890 年订购了机器，加拿大次年订购了五台，随后意大利和挪威也跟进，之后是俄罗斯。这些机器取得了显著成功。霍勒里斯于 1896 年将他的霍勒里斯电动制表系统注册为制表机公司，并于 1905 年重新注册成立。

近 80 年过去了，计算机行业才超越了霍勒里斯的一些重要见解。首先，为了让操作员不会弄错卡片方向，他在卡片的右上角剪去了一个角。第二，他以合理的价格出租机器（1890 年人口普查的租赁费用为 75 万美元，而 1880 年的人力成本为 500 万美元），但出售专利卡片（1890 到 1895 年间售出超过 1 亿张）。第三，他将人口普查计数方法改编为铁路的货运和客运数据统计。实际上，霍勒里斯发明了“可重复使用性”。

1907 年和 1908 年，霍勒里斯将他的部分机器租给电力公司用于计费：他每月向他们销售 100 万张卡片。这些卡片尺寸为标准尺寸：3.250 × 7.375 英寸（与“旧”美元钞票尺寸相同），有 45 行和 10 列圆孔。

与此同时，一位名叫查尔斯·弗林特的企业家于 1900 年在纽约恩迪科特创立了国际时间记录公司，制造打卡钟。次年，他成立了美国计算秤公司，生产可以“读取”费用和重量的秤，从而免去了店员计算的需要。1910 年——具体何时不详——弗林特遇到了资金短缺的霍勒里斯。两家公司合并后，成立了计算 - 制表 - 记录（CTR）公司。不到 30 个月后，刚被 NCR 解雇的托马斯·沃森接受了弗林特及其听话的董事会的面试。1914 年 5 月，沃森以丰厚的 2.5 万美元年薪、股票期权和利润分成，接任 CTR 的总经理。

尽管第一次世界大战带来了对 CTR 和沃森有利的业务，但真正使沃森五年前的研发投资得到回报的是 1919 年：CTR 成功推出了一款打印机 - 列表机，可以打印出从霍勒里斯的制表机和分拣机收集的信息。1924 年 2 月，CTR 更名为国际商业机器公司（International Business Machines Company，简称 IBM），托马斯·J·沃森同时担任首席执行官和首席运营官。

1928 年，IBM 推出了 Type IV 制表机和新的 80 列、12 行的打孔卡片。

从 1941 年到 1945 年，美国国防部资助了许多推动现代计算机诞生的项目。托马斯·沃森的公司资助了其中的大部分。

尽管沃森在 1945 年曾说过：“我认为全球大约只需要五台计算机”，但他资助的第一台计算机已经完成。哈佛大学的霍华德·艾肯和一个小团队从 1939 年开始组装一台机器，利用了巴贝奇的原理。该机器于 1944 年完成，包含一个 51 英尺乘 8 英尺的面板，上面安装了纸带读取器、继电器和旋转开关。哈佛马克 I 计算器的许多操作由机械开关控制，驱动动力为四马力电机。它能够处理 23 位有效数字的十进制数，运行在以每分钟 200 步速移动的 24 孔打孔纸带上。加法的基本操作时间为 0.3 秒。该机器一直使用到 1953 年，部分马克 I 目前展出于哈佛大学剑桥的艾肯计算实验室，另一部分在华盛顿特区的史密森学会展出。

1944 年 10 月，美国陆军向宾夕法尼亚大学提供合同，建造电子离散变量计算机（EDVAC）。原始团队包括赫尔曼·H·戈尔丁、约翰·冯·诺伊曼和约翰·莫克利。其设计完全体现了冯·诺伊曼的思想。

首台全电子计算机是电子数值积分计算机（ENIAC）。由宾夕法尼亚大学的 J.W. 莫克利和 J.P. 埃克特于 1945 年末完成，并于 1946 年安装，由阿伯丁（马里兰）试验场的弹道研究实验室（BRL）委托建造。它是至今最大的计算机，由 18000 个电子管（真空管）和 1500 个继电器组成。ENIAC 是马克 I 的电子版本，速度快了数百倍（Mike Muuss 告诉我，ENIAC 的部分零件目前展出于 BRL）。

埃克特和莫克利在 1947 年成立了自己的计算机公司，开始制造他们的通用自动计算机（UNIVAC）。由于资金耗尽，他们成功获得了美国 Totalizator 公司的 50 万美元投资（Totalizator 公司提供赛马博彩机，这在某种程度上是计算机与博彩的最早联系，他们认为计算机可能对信息处理有用）。美国 Totalizator 公司控制了埃克特 - 莫克利公司，但在第一台机器完成之前资金再次耗尽，Totalizator 的 Mun 兄弟将埃克特 - 莫克利卖给了雷明顿兰德的詹姆斯·兰德。初始的 UNIVAC 于 1951 年交付（晚了一年），另外还有六台机器在订购中。

ENIAC 在英国也有后代。莫里斯·V·威尔克斯和他的团队在 1946 年底开始规划电子延迟存储自动计算机（EDSAC），这是威尔克斯从宾夕法尼亚回来后开始的工作，并于新年初在剑桥大学数学实验室开始建造。它的体积仅有 ENIAC 的五分之一，基于冯·诺伊曼在一篇论文中提出的思想。1949 年 5 月，它执行了首次完全自动计算，成为第一台投入使用的具有高速存储器和输入/输出设备的电子计算机。威尔克斯称，几年内，EDSAC 的子程序库已超过 150 个。

几乎同时，在曼彻斯特，M.H.А. 纽曼领导的团队开始制造一台体现 EDVAC 概念的机器。F.C. 威廉姆斯发明了阴极射线管存储，I.J. 古德曾与艾伦·图灵合作研发了破译机器 Colossus，图灵本人也加入了团队。曼彻斯特自动数字机（MADM）原型于 1948 年建成，正式机器于 1949 年 6 月运行了第一个程序。MADM 引入了索引寄存器和分页机制到计算机领域。

与此同时，IBM 开始研发选择序列电子计算机（Selective-Sequence Electronic Calculator，简称 SSEC）。需要注意的是，虽然 EDSAC 是第一台电子计算机，但 SSEC 是第一台计算机——它将计算与存储程序结合在一起。该机器于 1948 年初在 IBM 位于曼哈顿的总部投入使用，巧妙地放置在街道平层的玻璃窗后，路人可以看到它在运行。它是一台大型机器，拥有 13,000 根电子管和 23,000 只继电器。所有算术计算均由电子管完成，其速度比 Mark I 快 100 多倍。它还拥有三种不同类型的存储器：高速电子管存储器、容量更大的继电器存储器，以及容量极大的 80 列纸带存储。指令和输入通过穿孔纸带输入，机器配备 66 个读头，控制能自动从一个读头转移到另一个。B.W. Bowden 在 1953 年写道：“它很可能是第一台具备条件控制转移指令的机器，这正是巴贝奇和（阿达）洛芙莱斯夫人所推荐的。”SSEC 曾为美国原子能委员会等机构工作，直到 1952 年 8 月被拆除。

同年 6 月，约翰·冯·诺依曼及其同事在普林斯顿高等研究院完成了 MANIAC 计算机。该机采用了 F.C. 威廉姆斯和 T. Kilburn 发明的静电存储器，这种存储器只需一台阴极射线管，而不需要专用存储管。

接下来硬件上的进展来自麻省理工学院的 Whirlwind 项目，该项目由杰伊·福雷斯特于 1944 年启动。Whirlwind 在每秒对 16 位数字的单地址操作达到 20,000 次，采用了一种新型的静电存储器，其中 16 个电子管各包含 256 个二进制位。（字是计算机存储中的基本数据单位。单位由预定数量的位组成。一个 8 位字可以表示范围为 -27 到 +27 -1 \[即数字 -128 到 +127]）Whirlwind 是首次真正尝试实时计算，持续计算飞机的运动，用以解决稳定性和高速飞行的问题。道格·麦克伊罗伊告诉我，在 1954 年他使用 Whirlwind 时，“它配备了磁芯存储器，每秒能执行 40,000 条指令。”福雷斯特在 Whirlwind 项目中的一位“聪明学生”是肯尼斯·H·奥尔森，他在几年后创办了数字设备公司（Digital Equipment Company，DEC）。奥尔森当时正在试验用于存储器设备的磁性开关磁芯矩阵，但在一篇学生论文中，他建议使用晶体管代替电子管。这篇论文被 SSEC 的电路设计师拉尔夫·L·帕尔默看到，帕尔默在 1955 年初劝说埃里希·布洛赫在 IBM 704 的存储器中使用晶体管。但由于当时没有足够功率驱动铁氧体磁芯存储器的晶体管，这一尝试失败了。

IBM 704，最初名为 701A，于 1954 年发布，是 IBM 701（1952、1953 年）的逻辑继任者。701 发展成 704 的项目由吉恩·阿姆达尔领导。701 由一个由纳撒尼尔·罗切斯特和杰里尔·哈达德领导的 35 人团队建造。罗切斯特曾在西尔维尼亚为 Whirlwind 构建算术单元；哈达德则是设计 IBM 604 电子计算器团队的一员。最终，700 系列既包含科学计算机（701、704、709、7040、7044、7090 和 7094），也包含商业计算机（707、705 和 7080）。（顺便提一下，IBM 7030 具有 64 位字和 8 位字节）701 在 1953 年的租金为每月 1.5 万美元；704 的增量成本很小。即使租金如此之高，IBM 也出货了 18 台 701，后来售出了 140 台 704。在商业领域，175 台 IBM 705 以平均 160 万美元的价格售出。7080 是完全晶体管化版本，售价为 220 万美元：计算机依然属于数百万美元的高价区间。

福雷斯特与 IBM 合作，获得了国防部合同，开发 Whirlwind II——一款防空计算机。随着 IBM 参与度的提高，1952 年该项目更名为 SAGE（半自动地面环境）。肯·奥尔森和他的团队在 MIT 林肯实验室仅用九个月设计并建造了内存测试计算机。当福雷斯特和他的副手诺曼·泰勒在 1953 年初意识到需要一位常驻 IBM 的全职联络员时，泰勒说服了奥尔森。奥尔森去了 IBM，但很快就厌恶了 IBM 的态度。1953 年晚些时候在波基普西的一个晚上，他对泰勒说：“诺姆，我能用他们自己的游戏规则打败这些家伙。”这标志着数字设备公司（DEC）的开端。

三年半后，奥尔森向 American Research & Development 提交了一份商业计划，并获得了他和哈兰·安德森创办公司所需的 7 万美元资金。一年后，他们开始从马萨诸塞州梅纳德发货逻辑模块。1959 年 12 月，在波士顿斯泰特勒酒店举行的东部联合计算机会议上，DEC 展示了 PDP（程序化数据处理器）1 的原型机。它的售价为 12 万美元，交付始于 1960 年 11 月。

PDP-1 是一台 18 位机器，内存容量介于 4096 到 32768 字之间。PDP-1 的内存周期为 5 微秒，计算速度为每秒 10 万次计算。该项目由本杰明·格尔利领导，机器由 3500 个晶体管和 4300 个二极管组成。它配备了编辑器、宏汇编器和 DECAL（一种 ALGOL 编译器）。输入采用纸带读取器，输出使用 IBM 打字机。PDP-1 拥有其那一代实时计算机中最佳的性价比，也是首台配备图形显示屏的商业计算机。DEC 共售出 53 台，第一台交付给了 Bolt、Beranek 和 Newman，第二台交付给 Itek（诺姆·泰勒创办的排版公司）。其他用户包括劳伦斯利弗莫尔实验室和加拿大原子能公司（AEC）。1962 年 1 月，奥尔森向 MIT 捐赠了一台 PDP-1，学生们用它编写程序玩计数游戏 mancala。

PDP-2 原计划为一台 24 位机器；PDP-3 则计划为 36 位，但两者均未制造出来。PDP-4 是另一台 18 位机器，由戈登·贝尔设计，但失败了。它的内存周期为 8 微秒（而 PDP-1 是 5 微秒），功耗仅为 PDP-1 的一半（1125 瓦对比 2160 瓦）；它运行汇编器、编辑器和 FORTRAN，售价仅为 6.5 万美元，相较 PDP-1 的 12 万美元便宜不少。但戈登·贝尔的判断错了：62.5% 的性能和 54% 的价格并非市场需求。最终只卖出 45 台。

PDP-5 是戈登·贝尔的又一作品，由埃德森·德卡斯特罗设计，作为安装在安大略乔克里弗的 AEC 站点中使用的 PDP-4 的前端。它是一台小型通用 12 位机器。DEC 本计划制造 10 台以回收工程费用，但 PDP-5 售价 2.7 万美元，市场反响热烈，最终销售近 1000 台。

PDP-6 是一台大型 36 位机器，售价 30 万美元，发布后不久便被终止，共出货 23 台，其中一台交给了 MIT 的人工智能实验室。

PDP-7、PDP-9 和 PDP-15 是 PDP-4 的 18 位后续机型。PDP-8 是贝尔和德卡斯特罗设计的另一台 12 位计算机。它于 1965 年以仅 1.8 万美元的价格推出，引发了迷你计算机革命。最终销售超过 5 万台。PDP-10 是 PDP-6 的大型 36 位继任者。

但正是 PDP-11，使 DEC 成为领先的迷你计算机制造商。PDP-11 由戈登·贝尔在卡内基·梅隆大学休假期间构思，安迪·诺尔斯担任项目负责人，于 1970 年发布。它是一台 16 位机器，拥有各种配置和型号，最终销售了 25 万台。

戈登·贝尔的设计和 DEC 进入低成本计算领域是 UNIX 发展和成功的关键，因为 PDP-11 是首台大学和研究机构负担得起的部门级计算机。此外，虽然 Richie 和 Thompson 无法获得大型计算机的资金，PDP-11 的起价为 1.08 万美元，正好符合贝尔电话实验室的预算。PDP-11 的 16 位字长也非常重要，因为 16 位字比 8 位字能容纳更多的比特。
