多谢Rojas教授的补助与救助,正是因为人类对于总括才能教导有方的追求

作者:必赢网站

上一篇:现代计算机真正的鼻祖——超越时代的伟大思想

引言

本文是对论文《The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer》的中文翻译,已征得原作者Raul Rojas的同意。感谢Rojas教授的支持与帮助,感谢在美留学的好友——锁在英语方面的指导。本人英文和专业水平有限,不妥之处还请批评指正。


任何事物的创造发明都来源于需求和欲望

This is a translation of "The Z1: Architecture and Algorithms of Konrad Zuse's First Computer" with the permission of its author Raul Rojas. Many thanks for the kind support and help from Prof. Rojas. And thanks to my friend Suo, who's currently in the US, for helping me with my English. The translation is completed to the best of my knowledge and ability. Any comments or suggestions would be greatly appreciated.

机电时期(19世纪末~20世纪40年代)

我们难以理解计算机,也许主要并不由于它复杂的机理,而是根本想不明白,为什么一通上电,这坨铁疙瘩就突然能飞速运转,它安安静静地到底在干些啥。

经过前几篇的探索,我们已经了解机械计算机(准确地说,我们把它们称为机械式桌面计算器)的工作方式,本质上是通过旋钮或把手带动齿轮旋转,这一过程全靠手动,肉眼就能看得一清二楚,甚至用现在的乐高积木都能实现。麻烦就麻烦在电的引入,电这样看不见摸不着的神物(当然你可以摸摸试试),正是让计算机从笨重走向传奇、从简单明了走向令人费解的关键。

而科学技术的发展则推动实现了目标


技术准备

19世纪,电在计算机中的应用主要有两大方面:一是提供动力,靠电动机(俗称马达)代替人工驱动机器运行;二是提供控制,靠一些电动器件实现计算逻辑。

我们把这样的计算机称为机电计算机

正是因为人类对于计算能力孜孜不倦的追求,才创造了如今规模的计算机.

摘要

本文首次给出了对Z1的综合介绍,它是由德国发明家康拉德·祖思(Konrad Zuse)1936~1938年期间在柏林建造的机械式计算机。文中对该计算机的主要结构零件、高层架构,及其组件之间的数据交互进行了描述。Z1能用浮点数进行四则运算。从穿孔带读入指令。一段程序由一系列算术运算、内存读写、输入输出的指令构成。使用机械式内存存储数据。其指令集没有实现条件分支。

虽然,Z1的架构与祖思在1941年实现的继电器计算机Z3十分相似,它们之间仍然存在着明显的差异。Z1和Z3都通过一系列的微指令实现各类操作,但前者用的不是旋转式开关。Z1用的是数字增量器(digital incrementer)和一套状态位,它们可以转换成作用于指数和尾数单元以及内存块的微指令。计算机里的二进制零件有着立体的机械结构,微指令每次要在12个层片(layer)中指定一个使用。在浮点数规格化方面,没有考虑尾数为零的异常处理,直到Z3才弥补了这一点。

文中的知识源自对祖思为Z1复制品(位于柏林德国技术博物馆)所画的设计图、一些信件、笔记本中草图的仔细研究。尽管这台计算机从1989年展出至今(停运状态),始终没有关于其体系结构详细的、高层面的阐述可寻。本文填补了这一空白。

电动机

汉斯·克里斯钦·奥斯特(Hans Christian Ørsted 1777-1851),丹麦物理学家、化学家。迈克尔·法拉第(Michael Faraday 1791-1867),英国物理学家、化学家。

1820年4月,奥斯特在实验中发现通电导线会造成附近磁针的偏转,证明了电流的磁效应。第二年,法拉第想到,既然通电导线能带动磁针,反过来,如果固定磁铁,旋转的将是导线,于是解放人力的伟大发明——电动机便诞生了。

电动机其实是件很不稀奇、很笨的发明,它只会一个劲不停地转圈,而机械式桌面计数器的运转本质上就是齿轮的转圈,两者简直是天造地设的一双。有了电动机,计算员不再需要吭哧吭哧地手摇,做数学也终于少了点体力劳动的模样。

计算机,字如其名,用于计算的机器.这就是最初计算机的发展动力.

1 康拉德·祖思与Z1

德国发明家康拉德·祖思在19361938年期间建造了他的第一台计算机<sup>注1</sup>(19341935年期间做过一些小型机械线路的实验)。在德国,祖思被视为计算机之父,尽管他在第二次世界大战期间建造的计算机在毁于火灾之后才为人所知。祖思的专业是夏洛腾堡工学院(Technische Hochschule Charlottenburg)(现今的柏林工业大学)的土木工程。他的第一份工作在亨舍尔公司(Henschel Flugzeugwerke),这家公司恰巧从1933年开始建造军用飞机[1]。这位25岁的小年轻,负责完成生产飞机部件所需的一大串结构计算。而他在学生时代,就早已开始考虑机械化计算的可能性[2]。所以他在亨舍尔才干了几个月就辞职,建造机械计算机去了,还开了自己的公司,事实也正是世界上第一家计算机公司。

注1:康拉德·祖思建造计算机的精确年表,来自于他从1946年3月起手记的小本子。本子里记载着,V1建造于1936~1938年间。

在1936~1945年期间,祖思根本停不下来,哪怕被两次短期地召去前线。每一次都最终被召回柏林,继续从事在亨舍尔和自己公司的工作。在这九年间,他建造了如今我们所知的6台计算机,分别是Z1、Z2、Z3、Z4,以及专业领域的S1和S2。后四台建造于第二次世界大战开始之后。Z4是在世界大战结束前的几个月里建好的。祖思一开始给它们的简称是V1、V2、V3、V4(取自实验模型或者说原型(Versuchsmodell)的首字母)。战争结束之后,他把V改成了Z,原因很明显译者注。V1(也就是后来的Z1)是项迷人的黑科技:它是台全机械的计算机,却没有用齿轮表示十进制(前个世纪的巴贝奇这么干,正在做霍尔瑞斯制表机的IBM也这么干),祖思要建的是一台全二进制计算机。机器基于的部件里用小杆或金属板的直线移动表示1,不移动表示0(或者相反,因部件而异)。祖思开发了新型的机械逻辑门,并在他父母家的客厅里做出第一台原型。他在自传里提到了发明Z1及后续计算机背后的故事[2]

译者注:祖思把V改成Z,是为了避免与韦纳·冯·布劳恩(Wernher von Braun)研制的火箭的型号名相混淆。

Z1身为机械,却竟也是台现代计算机:基于二进制,使用浮点型表示数据,并能进行四则运算。从穿孔带读入程序(虽然没有条件分支),计算结果可以写入(16字大小的)内存,也可以从内存读出。机器周期在4Hz左右。

Z1与1941年建成的Z3十分相像,Z3的体系结构在《Annals of the History of Computing》中已有描述[3]。然而,迄今仍没有对Z1高层架构细节上的阐述。最初那台原型机毁于1943年的一场空袭。只幸存了一些机械部件的草图和照片。二十世纪80年代,康拉德·祖思在退休多年之后,在西门子和其他一些德国赞助商的赞助之下,建造了一台完整的Z1复制品,今藏于柏林的技术博物馆(如图1所示)。有两名做工程的学生帮着他完成:那几年间,在德国欣费尔德的自家里,他备好全套图纸,精心绘制每一个(要从钢板上切割出来的)机械部件,并亲自监工。Z1复制品的第一套图纸在1984绘制。1986年4月,祖思画了张时间表,预期能在1987年12月完成机器的建造。1989年,机器移交给柏林博物馆的时候,做了不少次运行和算术运算的演示。然而,Z1复制品和之前的原型机一样,从来都不够可靠,无法在无人值守的情况下长时间运行。甚至在揭幕仪式上就挂了,祖思花了几个月才修好。1995年祖思去世之后,这台机器就再没有启动过。

图1:柏林Z1复制品一瞥(来自[Konrad Zuse Internet Archive](

尽管我们有了柏林的Z1复制品,命运却第二次同我们开了玩笑。除了绘制Z1复制品的图纸,祖思并没有正儿八经地把有关它从头至尾的详尽描述写出来(他本意想交给当地的大学来写)。这事儿本是相当必要的,因为拿复制品和1938年的Z1照片对比,前者明显地「现代化」了。80年代高精密的机械仪器使祖思得以在建造机器时,把钢板制成的层片排布得更加紧密。新Z1很明显比它的前身要小得多。而且有没有在逻辑和机械上与前身一一对应也不好说,祖思有可能吸收了Z3及其他后续机器的经验,对复制品做了改进。在19841989年间所画的那套机械图纸中,光加法单元就出现了至少6种不同的设计方案,散布于58个、最终乃至12个机械层片之间注2。祖思没有留下详细的书面记录,我们也就莫名其妙。更糟糕的是,祖思既然第二次建造了Z1,却还是没有留下关于它综合性的逻辑描述。他就像那些著名的钟表匠,只画出表的部件,不做过多阐释——一流的钟表匠确实也不需要过多的说明。他那两个学生只帮忙写了内存和穿孔带读取器的文档,已经是老天有眼[4]。柏林博物馆的参观者只能看着机器里头成千上万的部件惊叹。惊叹之余就是绝望,即使专业的计算机科学家,也难以设想这头机械怪物内部的工作机理。机器就在这儿,但很不幸,只是尸体。

注2:你可以在我们的网页「Konrad Zuse Internet Archive」上找到Z1复制品的所有图纸。

图2:Z1的机械层片。在右侧可以看见八片内存层片,左侧可以看见12片处理器层片。底下的一堆杆子,用来将时钟周期传递到机器的每个角落。

为写这篇论文,我们仔细研究了Z1的图纸和祖思记事本里零散的笔记,并在现场对机器做了大量的观察。这么多年来,Z1复制品都没有运行,因为里头的钢板被压弯了。我们查阅了超过1100张机器部件的放大图纸,以及15000页的笔记本内容(尽管里头只有一小点有关Z1的信息)。我只能看到一段计算机一部分运作的短视频(于几近20年前录制)。慕尼黑的德意志博物馆收藏了祖思论文里出现的1079张图纸,柏林的技术博物馆则收藏了314张。幸运的是,一些图纸里包含着Z1中部分微指令的定义和时序,以及一些祖思一位一位手写出来的例子。这些例子可能是祖思用以检验机器内部运算、发现bug的。这些信息犹如罗塞塔石碑,有了它们,我们得以将Z1的微指令和图纸联系起来,和我们充分理解的继电器计算机Z3(有全套线路信息[5])联系起来。Z3基于与Z1一样的高层架构,但仍存在一些重要差异。

本文由浅入深:首先,了解一下Z1的分块结构、机械部件的布局,以及祖思用到的一些机械门的例子。而后,进一步深入Z1的核心零件:时钟控制的指数和尾数加法单元、内存、算术运算的微序列器。介绍了机械零件之间如何相互作用,「三明治」式的钢板布局如何组织计算。研究了乘除法和输入输出的过程。最后简要总结了Z1的历史地位。

电磁继电器

约瑟夫·亨利(Joseph Henry 1797-1878),美国科学家。爱德华·戴维(Edward Davy 1806-1885),英国物理学家、科学家、发明家。

电磁学的价值在于摸清了电能和动能之间的转换,而从静到动的能量转换,正是让机器自动运行的关键。而19世纪30年代由亨利和戴维所分别发明的继电器,就是电磁学的重要应用之一,分别在电报和电话领域发挥了重要作用。

电磁继电器(原图来自维基「Relay」词条)

其结构和原理十分简单:当线圈通电,产生磁场,铁质的电枢就被吸引,与下侧触片接触;当线圈断电,电枢就在弹簧的作用下上扬,与上侧触片接触。

在机电设备中,继电器主要发挥两方面的作用:一是通过弱电控制强电,使得控制电路可以控制工作电路的通断,这一点放张原理图就能一目了然;二是将电能转换为动能,利用电枢在磁场和弹簧作用下的往返运动,驱动特定的纯机械结构以完成计算任务。

继电器弱电控制强电原理图(原图来自网络)

在漫长的历史长河中,随着社会的发展和科技的进步,人类始终有计算的需求

2 分块结构

Z1是一台时钟控制的机器。作为机械设备,其时钟被细分为4个子周期,以机械部件在4个相互垂直的方向上的移动来表示,如图3所示(左侧「Cycling unit」)。祖思将一次移动称为一次「衔接(engagement)」。他计划实现4Hz的时钟周期,但柏林的复制品始终连1Hz(4衔接/秒)都超不过。以这速度,一次乘法运算要耗时20秒左右。

图3:根据1989年的复制品,所得的Z1(1936~1938年)框图。原Z1的内存容量只有16字,而不是64字。穿孔带由35毫米电影胶卷制成。每一项指令以8比特位编码。

Z1的诸多特性被后来的Z3所采用。以现在的眼光来看,Z1(见图3)中最重要的革新如有:

  • 基于完全的二进制架构实现内存和处理器。

  • 内存与处理器分离。在复制品中,机器大约一半由内存和穿孔带读取器构成。另一半由处理器、I/O控制台和微控制单元构成。原Z1的内存容量是16字,复制品是64字。

  • 可编程:从穿孔带读入8比特长的指令(其中2位表示操作码译者注、6位表示内存地址,或者以3位表示四则运算和I/O操作的操作码)。因此指令只有8种:四则运算、内存读写、从十进制面板读入数据、将结果寄存器里的内容显示到十进制展板。

译者注:应是指内存读写的操作码。

  • 内存和处理器中的内部数据以浮点型表示。于是,处理器分为两个部分:一部分处理指数,另一部分处理尾数。位于二进制小数点后面的尾数占16个比特。(规格化的浮点数)小数点左边那位永远是1,不需要存。指数占7位,以2的补数形式表示(-64~+63)。用额外的1个比特来存储浮点数的符号位。所以,存储器中的字长为24位(16位尾数、7位指数、1位符号位)。

  • 参数或结果为0的特殊情况(规格化的尾数无法表示,它的第一位永远是1)由浮点型中特殊的指数值来处理。这一点到了Z3才实现,Z1及其复制品都没有实现。因此,Z1及其复制品都处理不了中间结果有0的情况。祖思知道这一短板,但他留到更易接线的继电器计算机上去解决。

  • CPU是微代码结构的:操作被分解成一系列微指令,一个机器周期一条微指令。微指令在算术逻辑单元(ALU)之间产生具体的数据流,ALU不停地运作,每个周期都将两个输入寄存器里的数加一遍。

  • 神奇的是,内存和处理器可以分别独立运行:只要穿孔带给出命令,内存就在通信接口写入或读取数据。处理器也将在执行存取操作时在通信接口写入或读取。可以关闭内存而只运行处理器,此时原本来自内存的数据将变为0。也可以关了处理器而只运行内存。祖思因而可以单独调试机器的两个部分。同时运作时,有一根连接两者周期单元的轴将它们同步起来。

Z1的其他革新与后来Z3中体现出来的想法相似。Z1的指令集与Z3几乎一样,但它算不了平方根。Z1利用废弃的35毫米电影胶卷作为穿孔带。

图3展示了Z1复制品的抽象图。注意机器的两个主要部分:上半部分是内存,下半部分是处理器。每部分都有其自己的周期单元,每个周期进一步分为4个方向上(由箭头标识)的机械移动。这些移动可以靠分布在计算部件下的杠杆带动机器的任何部分。一次读入一条穿孔带上的指令。指令的持续时间各不相同。存取操作耗时一个周期,其他操作则需要多个周期。内存地址位于8位操作码的低6位比特中,允许程序员寻址64个地址。

如图3所示译者注,内存和处理器通过彼此各单元之间的缓存进行通信。在CPU中,尾数的内部表示扩到了20位:二进制小数点前加两位(以表示二进制幂21和20),还有两位表示最低的二进制幂(2-17和2-18),旨在提高CPU中间结果的精度。处理器中20位的尾数可以表示21~2-18的二进制幂。

译者注:原文写的是图1,我觉得是作者笔误,应为图3。

解码器从穿孔带读取器获得指令,判断好操作之后开始按需控制内存单元和处理器。(根据加载指令)将数从内存读到CPU两个浮点数寄存器之一。再根据另一条加载指令将数从内存读到另一个CPU寄存器中。这两个寄存器在处理器里可以相加、相减、相乘或相除。这类操作既涉及尾数的相加,也涉及指数的加减(用2的补码加法器)。乘除结果的符号位由与解码器直接相连的「符号单元」处理。

穿孔带上的输入指令会使机器停止,以便操作人员通过拨动机械面板上的4个十进制位输入数据,同时通过一根小杆输入指数和符号。而后操作员可以重启机器。输出指令也会使机器停止,将结果寄存器中的内容显示到十进制机械面板上,待操作员按下某根小杆,机器重新运行。

图3中的微序列器和指数尾数加法单元共同组成了Z1计算能力的核心。每项算术或I/O操作都被细分为多个「阶段(phases)」。而后微序列器开始计数,并在加法单元的12层机械部件中选择相应层片上合适的微操作。

所以举例来说,穿孔带上最小的程序可以是这样的:1) 从地址1(即第1个CPU寄存器)加载数字;2) 从地址2(即第2个CPU寄存器)加载数字;3) 相加;4) 以十进制显示结果。这个程序因而允许操作员预先定义好一坨运算,把Z1当做简单的机械计算器来用。当然,这一系列运算可能长得多:时可以把内存当做存放常量和中间结果的仓库,编写自动化的系列运算(在后来的Z4计算机中,做数学计算的穿孔带能有两米长)。

Z1的体系结构可以用如下的现代术语来总结:这是一台可编程的通用浮点型冯·诺依曼机(处理器和内存分离),有着只读的外部程序,和24位、16字的存储空间。可以接收4位数的十进制数(以及指数和符号)作为输入,然后将转换为二进制。可以对数据进行四则运算。二进制浮点型结果可以转换回科学记数法表示的十进制数,方便用户读取。指令中不包含条件或无条件分支。也没有对结果为0的异常处理。每条指令拆解为机器里「硬接线」的微指令。微序列器规划着微指令的执行。在一个仅存的机器运行的视频中,它宛若一台织布机。但它编织的是数字。

制表机(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也因此在上个世纪风风火火地做着它拿手的制表机和计算机产品,成为一代霸主。

制表机在当时成为与机械计算机并存的两大主流计算设备,但前者通常专用于大型统计工作,后者则往往只能做四则运算,无一具有通用计算的能力,更大的变革将在二十世纪三四十年代掀起。

进行运算时所运用的工具,也经历了由简单到复杂,由低级向高级的发展变化。

3 机械部件的布局

柏林的Z1复制品布局非常清晰。所有机械部件似乎都以完美的方式布放。我们先前提过,对于处理器,祖思至少设计了6个版本。但是主要部件的相对位置一开始就确定了,大致能反映原Z1的机械布局。主要有两个部分:分别是的内存和处理器,由缝隙隔开(如图3所示)。事实上,它们分别安装在带滚轮的桌子上,可以扯开了进行调试。在水平方向上,可以进一步把机器细分为包含计算部件的上半部分和包含所有同步杠杆的下半部分。参观者只有弯腰往计算部件下头看才能看到Z1的「地下世界」。图4是设计图里的一张绘稿,展示了处理器中部分计算和同步的层片。请看那12层计算部件和下侧区域的3层杠杆。要理解那些绘稿是有多难,这张图纸就是个绝好的例子。上面尽管有不少关于各部件尺寸的细节,但几乎没有其功用方面的注解。

图4:Z1(指数单元)计算和同步层片的设计图

图5是祖思画的Z1复制品俯视图,展示了逻辑部件的分布,并标注了每个区域的逻辑功能(这幅草图在20世纪90年代公开)。在上半部分,我们可以看到3个存储仓。每个仓在一个层片上可以存储8个8比特长的字。一个仓有8个机械层片,所以总共能存64字。第一个存储仓(10a)用来存指数和符号,后两个(10b、10c)存低16位的尾数。用这样的比特分布存放指数和尾数,只需构建3个完全一样的8位存储仓,简化了机械结构。

内存和处理器之间有「缓存」,以与处理器(12abc)进行数据交互。不能在穿孔带上直接设常数。所有的数据,要么由用户从十进制输入面板(图右侧18)输入,要么是计算机自己算得的中间结果。

图中的所有单元都仅仅展示了最顶上的一层。切记Z1可是建得犹如一坨机械「三明治」。每一个计算层片都与其上下层片严格分离(每一层都有金属的地板和天花板)。层间的通信靠垂直的小杆实现,它们可以把移动传递到上层或下层去。画在表示计算层片的矩形之间的小圆圈就是这些小杆。矩形里那些稍大一点的圆圈代表逻辑操作。我们可以在每个圆圈里找见一个二进制门(纵贯层片,每个圆圈最多有12个门)。根据此图,我们可以估算出Z1中逻辑门的数量。不是所有单元都一样高,也不是所有层片都布满着机械部件。保守估计,共有6000个二进制零件组成的门。

图5:Z1示意图,展示了其机械构造的分区。

祖思在图5中给机器的不同模块标上号。各模块的作用如下:

内存区域

  • 11a:6位内存地址的解码器
  • 11b:穿孔带读取器和操作码解码器
  • 10a:7位指数和符号的存储仓
  • 10b、10b:尾数小数部分的存储仓
  • 12abc:加载或存储操作下与处理器交互的接口

处理器区域

  • 16:控制和符号单元
  • 13:指数部分中两个ALU寄存器的多路复用器
  • 14ab:ALU寄存器的多路复用器,乘除法的1比特双向移位器
  • 15a:指数的ALU
  • 15bc:规格化尾数的20位ALU(18位用于小数部分)
  • 17:微代码控制
  • 18:右侧是十进制输入面板,左侧是输出面板

不难想象这幅示意图中从上至下的计算流程:数据从内存出来,进入两个可寻址的寄存器(我们称为F和G)。这两个寄存器是沿着区域13和14ab分布的。再把它们传给ALU(15abc)。结果回传给寄存器F或G(作为结果寄存器),或回传到内存。可以使用「反译」(从二进制转换为十进制)指令将结果显示为十进制。

下面我们来看看各个模块更多的细节,集中讨论主要的计算部件。

祖思机

康拉德·祖思(Konrad Zuse 1910~1995),德国土木工程师、发明家。

有些天才注定成为大师,祖思便是其一。读大学时,他就不安分,专业换来换去都觉得无聊,工作之后,在亨舍尔公司参与研究风对机翼的影响,对繁复的计算更是忍无可忍。

一天到晚就是在摇计算器,中间结果还要手抄,简直要疯。(截图来自《Computer History》)

祖思一面抓狂,一面相信还有好多人跟他一样抓狂,他看到了商机,觉得这个世界迫切需要一种可以自动计算的机器。于是一不做二不休,在亨舍尔才呆了几个月就潇洒辞职,搬到父母家里啃老,一门心思搞起了发明。他对巴贝奇一无所知,凭一己之力做出了世界上第一台可编程计算机——Z1。

本文尽可能的仅仅描述逻辑本质,不去追究实现细节

4 机械门

理解Z1机械结构的最好办法,莫过于搞懂那几个祖思所用的二进制逻辑门的简单例子。表示十进制数的经典方式一向是旋钮表盘。把一个齿轮分为10个扇区——旋转齿轮可以从0数到9。而祖思早在1934年就决定使用二进制系统(他跟着莱布尼兹称之为「the dyadic system」)。在祖思的技术中,一块平板有两个位置(0或1)。可以通过线性移动从一个状态转移到另一个状态。逻辑门根据所要表示的比特值,将移动从一块板传递到另一块板。这一结构是立体的:由堆叠的平板组成,板间的移动通过垂直放置在平板直角处的圆柱形小杆或者说销钉实现。

我们来看看三种基本门的例子:合取、析取、否定。其主要思想可以有多种机械实现,而有创意如祖思总能画出适应机器立体结构的最佳方案。图6译者注展示了祖思口中的「基本门(elementary gate)」。「使动板(actor plate)」可以视作机器周期。这块板循环地从右向左再向后移动。上面一块板含着一个数据位,起着控制作用。它有1和0两个位置。贯穿板洞的小杆随着平板水平移动(自身保持垂直)。如果上面的板处于0位置,使动板的移动就无法传递给受动板(actuated plate)(见图6左)。如果数据位处于1位置,使动板的移动就可以传递给受动板。这就是康拉德·祖思所谓的「机械继电器」,就是一个可以闭合机械「电流」的开关。该基本门以此将数据位拷贝到受动板,这个数据位的移动方向转了90度。

译者注:原文「Fig. 5」应为笔误。

图6:基本门就是一个开关。如果数据位为1,使动板和受动板就建立连接。如果数据位为0,连接断开,使动板的移动就传递不了。

图7展示了这种平板布局的俯视图。可以看到使动板上的洞口。绿色的控制板可以将圆圈(小杆)拉上拉下。当小杆处于能被使动板扯动的位置时,受动板(红色)才可以左右移动。每一张机械俯视图右侧都画有等效的逻辑开关。数据位能开闭逻辑门,推拉使动板(如箭头所示)。祖思总是习惯把开关画在0位置,如图7所示。他习惯让受动板被使动板推动(图7右),而不是拉动(图7左)。至此,要构建一个非门就很简单了,只需数据位处于0时闭合、1时断开的开关(如图7底部两张图所示)译者注

译者注:相当于与图6的逻辑相反。

有了机械继电器,现在可以直接构建余下的逻辑操作了。图8用抽象符号展示了机器中的必备线路。等效的机械装置应该不难设想。

图7:几种基本门,祖思给出了机械继电器的抽象符号,把继电器画成了开关。习惯上,数据位始终画在0位置。箭头指示着移动方向。使动板可以往左拉(如图左)或往右推(如图右)。机械继电器的初始位置可以是闭合的(如图下两幅图所示)。这种情况下,输出与数据位相反,继电器就是非门。

图8:一些由机械继电器构建的逻辑门。图中,最底部的是一个XOR,它可由包含两块受动板的机械继电器实现。等效的机械结构不难设计。

现在谁都可以构建自己的祖思机械计算机了。基础零件就是机械继电器。可以设计更复杂的连接(比如包含两块受动板的继电器),只是相应的机械结构只能用平板和小杆构建。

构建一台完整的计算机的关键难题是把所有部件相互连接起来。注意数据位的移动方向总是与结果位的移动方向正交。每一次完整的逻辑操作都会将机械移动旋转90度。下一次逻辑操作又把移动旋转90度,以此类推。四门之后,回到最初的移动方向。这就是为什么祖思用东南西北作为周期单位。在一个机器周期内,可以运行4层逻辑计算。逻辑门既可简单如非门,也可复杂如包含两块受动板(如XOR)。Z1的时钟表现为,4次衔接内完成一次加法:衔接IV加载参数,衔接I和II计算部分和与进位,衔接III计算最终结果。

输入的数据位在某层上移动,而结果的数据位传到了别层上去。意即,小杆可以在机器的层片之间上下传递比特。我们将在加法线路中看到这一点。

至此,图5的内涵就更丰富了:各单元里的圆圈正是祖思抽象符号里的圆圈,并反映着逻辑门的状态。现在,我们可以从机械层面拔高,站在更逻辑的高度探讨Z1。

Z1的内存

内存是目前我们对Z1理解最透彻的部分。Schweier和Saupe曾于20世纪90年代对其有过介绍[4]。Z4——康拉德·祖思于1945年完成的继电器计算机——使用了一种非常类似的内存。Z4的处理器由电话继电器构建,但其内存仍是机械式的,与Z1相似。如今,Z4的机械式内存收藏于德意志博物馆。在一名学生的辅助下,我们在计算机中仿真出了它的运作。

Z1中数据存储的主要概念,就是用垂直的销钉的两个位置来表示比特。一个位置表示0,另一个位置表示1。下图展示了如何通过在两个位置之间来回移动销钉来设置比特值。

图9:内存中的一个机械比特。销钉放置于0或1的位置。可读取其位置。

图9(a)译者注展示了内存中的两个比特。在步骤9(b)中,纵向的控制板带着销钉上移。步骤9(c)中,两块横向的使动板中,下侧那块被销钉和控制板推动,上侧那块没被推动。步骤9(d)中,比特位移回到初始位置,而后控制板将它们移到9(a)的位置。从这样的内存中读取比特的过程具有破坏性。读取一位之后,必须靠9(d)的回移还原比特。

译者注:作者没有在图中标出abcd,左上为(a),右上为(b),左下为(c),右下为(d)。另,这组插图有点抽象,我也是盯了好久才看懂,它是俯视图,黑色的小正方形是销钉,纵向的长方形是控制板,销钉在控制板上的长方形洞里移动(两个位置表示0和1),横向的两块带尖齿的长方形是使动板。

通过解码6位地址,寻址字。3位标识8个层片,另外3位标识8个字。每一层的解码线路是一棵典型的三层继电器二进制树,这和Z3中一样(只是树的层数不同)。

我们不再深究机械式内存的结构。更多细节可参见文献[4]。

Z1的加法单元

战后,康拉德·祖思在一份文档里介绍过加法单元,但Z1复制品中的加法单元与之不同。那份文档[6]中,使用OR、AND和恒等(NOT-XOR)逻辑门处理二进制位。而Z1复制品中,加法单元使用两个XOR和一个AND。

前两步计算是:a) 待相加的两个寄存器按位XOR,保存结果;b) 待相加的两个寄存器按位AND,保存结果。第三步就是根据前两步计算进位。进位设好之后,最后一步就是对进位和第一步XOR的结果进行按位XOR运算。

下面的例子展示了如何用上述步骤完成两数的二进制相加。

康拉德·祖思发明的计算机都使用了「预进位」。比起在各二进制位之间串行地传递进位,所有位上的进位可以一步完成。上面的例子就说明了这一过程。第一次XOR产生不考虑进位情况下两个寄存器之和的中间结果。AND运算产生进位比特:进位要传到左边的比特上去,只要这个比特在前一步XOR运算结果是1,进位将继续向左传递。在示例中,AND运算产生的最低位上的进位造成了三次进位,最后和第一次XOR的结果进行XOR。XOR运算产生的一列连续的1犹如火车头,牵引着AND所产生的进位,直到1的链条断裂。

图10所示就是Z1复制品中的加法线路。图中展示了a杆和b杆这两个比特的相加(假设a是寄存器Aa中的第i个比特,b是寄存器Ab中的第i个比特)。使用二进制门1、2、3、4并行进行XOR和AND运算。AND运算作用于5,产生进位ui+1,与此同时,XOR运算用6闭合XOR的比特「链」,或让它保持断开。7是将XOR的结果传给上层的辅助门。8和9计算最后一步XOR,完成整个加法。

箭头标明了各部件的移动。4个方向都上阵了,意即,一次加法运算,从操作数的加载到结果的生成,需要一整个周期。结果传递到e杆——寄存器Ae的第i位。

加法线路位于加法区域的第1、2、3个层片(如后头的图13所示)。康拉德·祖思在没有正式受过二进制逻辑学培训的情况下,就整出了预进位,实在了不得。连第一台大型电子计算机ENIAC采用的都只是十进制累加器的串行进位。哈佛的Mark I用了预进位,但是十进制。

图10:Z3的加法单元。从左至右完成运算。首先按位AND和XOR(门1、2、3、4)。衔接II计算进位(门5和6)。衔接III的XOR收尾整个加法运算(门8和9)。

Z1

祖思从1934年开始了Z1的设计与实验,于1938年完成建造,在1943年的一场空袭中炸毁——Z1享年5岁。

我们早已无法见到Z1的原貌,零星的一些照片显得弥足珍贵。(图片来自

从照片上可以发现,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的一些赞助。

 

5 Z1的序列器

Z1中的每一项操作都可以分解为一系列微指令。其过程根据一种叫做「准则(criteria)」的表格实现,如图11所示,表格由成对放置的108块金属板组成(在此我们只能看到最顶上——即层片12——的一对板。剩下的位于这两块板下面,合共12层)。用10个比特编排表格中的条目(金属板本身):

  • 比特Op0、Op1和Op2是指令的二进制操作码
  • 比特S0和S1是条件位,由机器的其他部分设置。举个例子,当S0=1时,加法就转换成了减法。
  • 比特Ph0、Ph1、Ph2、Ph3、Ph4用于对一条指令中的微周期(或者说「阶段」)计数。比如,乘法运算消耗20个阶段,于是Ph0~Ph4这五个比特在运算过程中从0增长到19。

这10个比特意味着,理论上我们可以定义多达1024种不同的条件或者说情况。一条指令最多可占32个阶段。这10个比特(操作码、条件位、阶段)推动金属销(图11中涂灰者),这些金属销hold住微控制板以防它们弹到左边或右边(如图所示,每块板都连着弹簧)。微控制板上分布着各异的齿,这些齿决定着以当前10根控制销的位置,是否可以阻止板的弹动。每块控制板都有个「地址」。当这10位控制比特指定了某块板的地址,它便可以弹到右边(针对图11中上侧的板)或左边(针对图11中下侧的板)。

控制板弹到右侧会按到4个条件位(A、B、C、D)。金属板根据相应准则切割,从而按下A、B、C、D不同的组合。

由于这些板分布于机器的12个层片上, 激活一块控制板自然也意味着为下一步的操作选好了相应的层片。指数单元中的微操作可以和尾数单元的微操作并行开始,毕竟两块板可以同时弹动:一块向左,一块向右。其实也可以让两个不同层片上的板同时朝右弹(右侧对应尾数控制),但机械上的局限限制了这样的「并行」。

图11:控制板。板上的齿根据Op2~Ph0这10个比特所对应的金属销(灰色)的位置,hold住板。指定某块板的「地址」,它便在弹簧的作用下弹到右边(针对上侧的板)或左边(针对下侧的板)。从12层板中指定一块板的同时意味着选出了执行下一步操作的层片。齿状部分A、B、C或D可以裁剪,从而实现在按下微控制单元里的销钉后,只执行必要的操作。图中,上侧的板已经弹到了右侧,并按下了A、C、D三根销钉。

因此控制Z1,就相当于调整金属板上的齿,以使它们可以响应具体的10比特组合,去作用到左右侧的单元上。左侧控制着处理器的指数部分。右侧控制着尾数部分。选项A、B、C、D是互斥的,意即,微控制板只选其一(就是唯一不被按下的那个)。

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年被西门子吞并,成为这一国际巨头体内的一股灵魂之血。

计算(机|器)的发展与数学/电磁学/电路理论等自然科学的发展息息相关

6 处理器的数据通路

图12展示了Z1的浮点数处理器。处理器分别有一条处理指数(图左)和一条处理尾数(图右)的数据通路。浮点型寄存器F和G均由记录指数的7个比特和记录尾数的17个比特构成。指数-尾数对(Af,Bf)是浮点寄存器F,(Ag,Bg)是浮点寄存器G。参数的符号由外部的一个符号单元处理。乘除结果的符号在计算前得出。加减结果的符号在计算后得出。

我们可以从图12中看到寄存器F和G,以及它们与处理器其他部分的关系。ALU(算术逻辑单元)包含着两个浮点寄存器:(Aa,Ba)和(Ab,Bb)。它们直接就是ALU的输入,用于加载数值,还可以根据ALU的输出Ae和Be的总线反馈,保存迭代过程中的中间结果。

Z1中的数据总线使用「三态」模式,意即,诸多输入都可以推到同一根数据线(也是个机械部件)上。不需要「用电」把数据线和输入分离开来,因为根本也没有电。因着机械部件没有移动(没有推动)就代表输入0,移动(推动)了就代表输入1,部件之间不存在冲突。如果有两个部件同时往一根数据线上输入,唯一重要的是确保它们能根据机器周期按序执行(推动只在一个方向上生效)。

图12:Z1中的处理器数据通路。左半部分对应指数的ALU和寄存器,右半部分对应尾数的。可以将结果Ae和Be反馈给临时寄存器,可以对它们进行取负值或移位操作。直接将4比特长的十进制数逐位(每一位占4比特)拷至寄存器Ba。而后对其进行十进制到二进制的转换。

程序员能接触到的寄存器只有(Af,Bf)和(Ag,Bg)。它们没有地址:加载指令第一个加载的寄存器是(Af,Bf),第二个加载的是(Ag,Bg)。加载完两个寄存器,就可以开始算术运算了。(Af,Bf)同时还是算术运算的结果寄存器。(Ag,Bg)在一次算术运算之后可以隐式加载,并继续担当新一轮算术运算的第二个参数。这种寄存器的使用方案和Z3相同。但Z3中少了(Ag,Bg)。其主寄存器和辅寄存器之间的协作比Z1更复杂。

从处理器的数据通路可见,独立的寄存器Aa、Ab、Ba和Bb可以加载不同类型的数据:来自其他寄存器的值、常数(+1、-1、3、13)、其他寄存器的取负值、ALU反馈回来的值。可以对ALU的输出进行取负值或移位操作。以代表与2n相乘的矩形框表示左移n位;以与2n相除表示右移n位。这些矩形框代表具有相应的移位或求补逻辑的机械线路。举个例子,寄存器Ba和Bb相加的结果存于Be,可以对其进行多种转换:可以取反(-Be)、可以右移一或两位(Be/2、Be/4)、或可以左移一或三位(2Be、8Be)。每一种转换都在组成ALU的机械层片中有着各自对应的层片。有效计算的相关结果将传回给寄存器Ba或Bb。具体是哪个寄存器,由微控制器指定的、激活相应层片的小杆来指定。计算结果Be也可以直接传至内存单元(图12没有画出相应总线)。

ALU在每个周期内都进行一次加法。ALU算完后,擦除各寄存器Aa、Ab、Ba、Bb,可载入反馈值。

图13:处理器中各项操作的分层式空间布局。Be的移位器位于左侧那一摞上。加法单元分布在最左边那三摞。Bf的移位器以及值为10<sup>-16</sup>的二进制数位于右侧那一摞。计算结果通过右侧标Res的线传至内存。寄存器Bf和Bg从内存获得值,作为第一个(Op1)和第二个操作数(Op2)。

寄存器Ba有一项特殊使命,就是将四位十进制的数转换成二进制。十进制数从机械面板输入,每一位都转换成4个比特。把这些4比特的组合直接传进Ba(2-13的位置),将第一组4比特与10相乘,下一组与这个中间结果相加,再与10相乘,以此类推。举个例子,假设我们想转换8743这个数,先输入8并乘以10。然后7与这个结果相加,所得总数(87)乘以10。4再与结果(870)相加,以此类推。如此实现了一种将十进制输入转换为二进制数的简单算法。在这一过程中,处理器的指数部分不断调整最终浮点结果的指数。(指数ALU中常数13对应213,后文还有对十-二进制转换算法的详述。)

图13还展示了处理器中,尾数部分数据通路各零件的空间分布。机器最左侧的模块由分布在12个层片上的移位器构成。寄存器Bf和Bg(层片5和层片7)直接从右边的内存获得数据。寄存器Be中的结果横穿层片8回传至内存。寄存器Ba、Bb和Be靠垂直的小杆存储比特值(在上面这幅处理器的横截面图中只能看到一个比特)。ALU分布在两摞机械上。层片1和层片2完成对Ba和Bb的AND运算和XOR运算。所得结果往右传,右边负责完成进位以及最后一步XOR运算,并把结果存储于Be。结果Be可以回传、存进内存,也可以以图中的各方式进行移位,并根据要求回传给Ba或Bb。有些线路看起来多余(比如将Be载入Ba有两种方式),但它们是在提供更多的选择。层片12无条件地将Be载入Ba,层片9则仅在指数Ae为0时才这么做。图中,标成绿色的矩形框表示空层片,不承担计算任务,任由机械部件穿堂而过。Bf和Bf'之间的矩形框包含了Bf做乘法运算时所需的移位器(处理时Bf中的比特从最低一位开始逐位读入)。

图14:指数ALU和尾数ALU间的通信。

现在你可以想象出这台机器里的计算流程了:数据从寄存器F和G流入机器,填入寄存器A和B。执行一次加法或一系列的加减(以实现乘除)运算。在A和B中不断迭代中间结果直至得到最终结果。最终结果载入寄存器F,而后开始新一轮的计算。

贝尔Model系列

同一时期,另一家不容忽视的、研制机电计算机的机构,便是上个世纪叱咤风云的贝尔实验室。众所周知,贝尔实验室及其所属公司是做电话起家、以通信为主要业务的,虽然也做基础研究,但为什么会涉足计算机领域呢?其实跟他们的老本行不无关系——最早的电话系统是靠模拟量传输信号的,信号随距离衰减,长距离通话需要用到滤波器和放大器以保证信号的纯度和强度,设计这两样设备时需要处理信号的振幅和相位,工程师们用复数表示它们——两个信号的叠加是两者振幅和相位的分别叠加,复数的运算法则正好与之相符。这就是一切的起因,贝尔实验室面临着大量的复数运算,全是简单的加减乘除,这哪是脑力活,分明是体力劳动啊,他们为此甚至专门雇佣过5~10名妇女(当时的廉价劳力)全职来做这事。

从结果来看,贝尔实验室发明计算机,一方面是源于自身需求,另一方面也从自身技术上得到了启发。电话的拨号系统由继电器电路实现,通过一组继电器的开闭决定谁与谁进行通话。当时实验室研究数学的人对继电器并不熟悉,而继电器工程师又对复数运算不尽了解,将两者联系到一起的,是一名叫乔治·斯蒂比兹的研究员。

乔治·斯蒂比兹(George Stibitz 1904-1995),贝尔实验室研究员。

计算(机|器)的发展有四个阶段

手动阶段

机械阶段

机电阶段

电子阶段

 

7 算术指令

前文提过,Z1可以进行四则运算。在下面将要讨论的表格中,约定用字母「L」表示二进制的1。表格给出了每一项操作所需的一系列微指令,以及在它们的作用下处理器中寄存器之间的数据流。一张表总结了加法和减法(用2的补数),一张表总结了乘法,还有一张表总结了除法。关于两种I/O操作,也有一张表:十-二进制转换和二-十进制转换。表格分为负责指数的A部分和负责尾数的B部分。表中各行显示了寄存器Aa、Ab、Ba、Bb的加载。操作所对应的阶段,在标「Ph」的列中给出。条件(Condition)可以在开始时触发或禁用某操作。某一行在执行时,增量器会设置条件位,或者计算下一个阶段(Ph)。

加法/减法

下面的微指令表,既涵盖了加法的情况,也涵盖了减法。这两种操作的关键在于,将参与加减的两个数进行缩放,以使其二进制指数相等。假设相加的两个数为m1×2a和m2×2b。如果a=b,两个尾数就可以直接相加。如果a>b,则较小的那个数就得重写为m2×2b-a×2a。第一次相乘,相当于将尾数m2右移(a-b)位(使尾数缩小)。让我们就设m2'=m2×2b-a。相加的两个数就变成了m1和m2'。共同的二进制指数为2a。a<b的情况也类似处理。

图15:加法和减法的微指令。5个Ph<sup>译者注</sup>完成一次加法,6个Ph完成一次减法。两数就位之后,检测条件位S0(阶段4)。若S0为1,对尾数相加。若S0为0,同样是这个阶段,尾数相减。

译者注:原文写的是「cycle」,即周期,下文也有用「phase」(阶段)的,根据表中信息,统一用「Ph」更直观,下同。

表中(图15),先找出两数中较大的二进制指数,而后,较小数的尾数右移一定位数,至两者的二进制指数相等。真正的相加从Ph4开始,由ALU在一个Ph内完成。Ph5中,检测这一结果尾数是否是规格化的,如果不是,则通过移位将其规格化。(在进行减法之后)有可能出现结果尾数为负的情况,就将该结果取负,负负得正。条件位S3记录着这一符号的改变,以便于为最终结果进行必要的符号调整。最后,得到规格化的结果。

穿孔带读取器附近的符号单元(见图5,区域16)会预先计算结果的符号以及运算的类型。如果我们假设尾数x和y都是正的,那么对于加减法,(在分配好符号之后)就有如下四种情况。设结果为z:

  1. z = +x +y
  2. z = +x -y
  3. z = -x +y
  4. z = -x –y
    对于情况(1)和(4),可由ALU中的加法来处理。情况(1)中,结果为正。情况(4),结果为负。情况(2)和(3)需要做减法。减法的符号在Ph5(图15)中算得。

加法执行如下步骤:

  • 在指数单元中计算指数之差∆α,
  • 选择较大的指数,
  • 将较小数的尾数右移译者注∆α译者注位,
  • 尾数相加,
  • 将结果规格化,
  • 结果的符号与两个参数相同。

译者注:原文写的是左移,根据上下文,应为右移,暂且视为作者笔误,下文减法步骤中同。

译者注:原文写的是「D」,但表中用的是「∆α」,遂纠正,下同。我猜作者在输了一遍「∆α」之后觉得麻烦,打算完稿之后统一替换,结果忘了……全文有不少此类不够严谨的细节,大抵是由于没有正式发表的缘故。

减法执行如下步骤:

  • 在指数单元中计算指数的之差∆α,
  • 选择较大的指数,
  • 将较小的数的尾数右移∆α位,
  • 尾数相减,
  • 将结果规格化,
  • 结果的符号与绝对值较大的参数相同。

符号单元预先算得了符号,最终结果的符号需要与它结合得出。

乘法

对于乘法,首先在Ph0,两数的指数相加(准则21,指数部分)。而后耗时17个Ph,从Bf中二进制尾数的最低位检查到最高位(从-16到0)。每一步,寄存器Bf都右移一位。比特位mm记录着之前从-16的位置被移出来的那一位。如果移出来的是1,把Bg加到(之前刚右移了一位的)中间结果上,否则就把0加上去。这一算法如此计算结果:

Be = Bf0×20×Bg + Bf-1×2-1×Bg

  • ··· + Bf-16×2-16×Bg

做完乘法之后,如果尾数大于等于2,就在Ph18中将结果右移一位,使其规格化。Ph19负责将最终结果写到数据总线上。

图16:乘法的微指令。乘数的尾数存放在(右移)移位寄存器Bf中。被乘数的尾数存放在寄存器Bg中。

除法

除法基于所谓的「不恢复余数法」,耗时21个Ph。从最高位到最低位,逐位算得商的各个比特。首先,在Ph0计算指数之差,而后计算尾数的除法。除数的尾数存放在寄存器Bg里,被除数的尾数存放在Bf。Ph0期间,将余数初始化至Bf。而后的每个Ph里,在余数上减去除数。若结果为正,置结果尾数的相应位为1。若结果为负,置结果尾数的相应位为0。如此逐位计算结果的各个位,从位0到位-16。Z1中有一种机制,可以按需对寄存器Bf进行逐位设置。

如果余数为负,有两种对付策略。在「恢复余数法」中,把除数D加回到余数(R-D)上,从而重新得到正的余数R。而后余数左移一位(相当于除数右移一位),算法继续。在「不恢复余数法」中,余数R-D左移一位,加上除数D。由于前一步中的R-D是负的,左移使他扩大到2R-2D。此时加上除数,得2R-D,相当于R左移之后与D的差,算法得以继续。重复这一步骤直至余数为正,之后我们就又可以减去除数D了。在下表中,u+2表示二进制幂中,位置2那儿的进位。若此位为1,说明加法的结果为负(2的补数算法)。

不恢复余数法是一种计算两个浮点型尾数之商的优雅算法,它省去了存储的步骤(一个加法Ph的时耗)。

图17:除法的微指令。Bf中的被除数逐位移至一个(左移)移位寄存器中。除数保存在Bg中。<sup>译者注</sup>

译者注:原文写的是除数在Bf、被除数在Bg,又是一处明显的笔误。

奇怪的是,Z3在做除法时,会先测试Ba和Bb之差是否可能为负,若为负,就走Ba到Be的一条捷径总线使减去的除数无效(丢弃这一结果)。复制品没有使用这一方法,不恢复余数法比它优雅得多。

Model K

1937年,斯蒂比兹察觉到继电器的开闭状态与二进制之间的联系。他做了个实验,用两节电池、两个继电器、两个指示灯,以及从易拉罐上剪下来的触片组成一个简单的加法电路。

(图片来自

按下右侧触片,相当于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)做好了铺垫。

手动阶段

顾名思义,就是用手指进行计算,或者操作一些简易工具进行计算

最开始的时候人们主要是借助简单的工具比如手指/石头/打绳结/纳皮尔棒/计算尺等,

我想大家都用手指数过数;

有人用一堆石子表示一些数目;

也有人曾经用打绳结来计数;

再后来有了一些数学理论的发展,纳皮尔棒/计算尺则是借助了一定的数学理论,可以理解为是一种查表计算法.

你会发现,这里还不能说是计算(机|器),只是计算而已,更多的靠的是心算以及逻辑思维的运算,工具只是一个简简单单的辅助.

 

8 输入和输出

输入控制台由4列、每列10块小盘构成。操作员可以在每一列(从左至右分别为Za3、Za2、Za1、Za0)上拨出数字09。意即,能输入任意的四位十进制数。每拨一位数,便相应生成等效的、4比特长的二进制值。因而,该输入控制台相当于一张4×10的表,存着10个09的二进制值。

而后Z1的处理器负责将各十进制位Za3、Za2、Za1、Za0通过寄存器Ba(在Ba-13的位置,对应幂2-13)传到数据通路上。先输入Za3(到寄存器Ba),乘以10。再输入Za2,再乘以10。四个位,皆如是重复。Ph7过后,4位十进制数的二进制等效值就在Be中诞生了。Ph8,如有需要,将尾数规格化。Ph7将常数13(二进制是LL0L)加到指数上,以确保在尾数-13的位置上输入数。

用一根小杆设置十进制的指数。Ph9中,这根小杆所处的位置代表了输入时要乘多少次10。

图18:十-二进制转换的微指令。通过机械设备输入4位十进制数。

图19中的表展示了如何将寄存器Bf中的二进制数转换成在输出面板上显示的十进制数。

为免遇到要处理负十进制指数的情况,先给寄存器Bf中的数乘上10-6(祖思限制了机器只能操作大于10-6的结果,即便ALU中的中间结果可以更小些)。这在Ph1完成。这一乘法由Z1的乘法运算完成,整个过程中,二-十进制译者注转换保持「挂起」。

译者注:原文写的十-二进制,目测笔误。

图19:二-十进制转换的微指令。在机械设备上显示4位十进制数。

此后,尾数右移两位(以使二进制小数点的左边有4个比特)。尾数持续位移,直到指数为正,乘3次10。每乘一次,把尾数的整数部分拷贝出来(4个比特),把它从尾数里删去,并根据一张表(Ph4~7中的2Be'-8Be'操作)转换成十进制的形式。各个十进制位(从最高位开始)显示到输出面板上。每乘一次10,十进制显示中的指数箭头就左移一格位置。译者注

译者注:说实话这一段没完全看懂,翻译可能与原意有出入。

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。

机械阶段

我想不用做什么解释,你看到机械两个字,肯定就有了一定的理解了,没错,就是你理解的这种普通的意思,

一个齿轮,一个杠杆,一个凹槽,一个转盘这都是一个机械部件.

人们当然不满足于简简单单的计算,自然想制造计算能力更大的机器

机械阶段的主题思想其实也很简单,就是通过机械的装置部件比如齿轮旋转,动力传送等来表示数据记录,进行运算,也即是机械式计算机,这样说有些抽象.

我们举例说明:

契克卡德是现今公认的机械式计算第一人,他发明了契克卡德计算钟

我们不去纠结这个东西到底是如何实现的,只描述事情逻辑本质

其中他有一个进位装置是这样子的

图片 1

 

 

可以看到采用十进制,转一圈之后,轴上面的一个突出齿,就会把更高一位(比如十位)进行加一

这就是机械阶段的精髓,不管他有多复杂,他都是通过机械装置进行传动运算的

还有帕斯卡的加法器

他是使用长齿轮进行进位

图片 2

 

 

再有后来的莱布尼茨轴,设计的更为精巧

 

我觉得对于机械阶段来说,如果要用一个词语来形容,应该是精巧,就好似钟表里面的齿轮似的

不管形态究竟如何,终究也还是一样,他也只是一个精巧了再精巧的仪器,一个精密设计的机关装置

首先要把运算进行分解,然后就是机械性的依靠齿轮等部件传动运转来完成进位等运算.

说计算机的发展,就不得不提一个人,那就是巴贝奇

他发明了史上著名的差分机,之所以叫差分机这个名字,是因为它计算所使用的是帕斯卡在1654年提出的差分思想

图片 3

 

 

我们仍旧不去纠结他的原理细节

此时的差分机,你可以清晰地看得到,仍旧是一个齿轮又一个齿轮,一个轴又一个轴的更加精巧的仪器

很显然他仍旧又仅仅是一个计算的机器,只能做差分运算

 

再后来1834年巴贝奇提出来了分析机的概念     一种通用计算机的概念模型

正式成为现代计算机史上的第一位伟大先驱

之所以这样说,是因为他在那个年代,已经把计算机器的概念上升到了通用计算机的概念,这比现代计算的理论思想提前了一个世纪

它不局限于特定功能,而且是可编程的,可以用来计算任意函数——不过这个想法是构思在一坨齿轮之上的.

巴贝奇设计的分析机主要包括三大部分

1、用于存储数据的计数装置,巴贝奇称之为“仓库”(store),相当于现在CPU中的存储器

2、专门负责四则运算的装置,巴贝奇称之为“工厂”(mill),相当于现在CPU中的运算器

3、控制操作顺序、选择所需处理的数据和输出结果的装置

而且,巴贝奇并没有忽略输入输出设备的概念

此时你回想一下冯诺依曼计算机的结构的几大部件,而这些思想是在十九世纪提出来的,是不是不寒而栗!!!

巴贝奇另一大了不起的创举就是将穿孔卡片(punched card)引入了计算机器领域,用于控制数据输入和计算

你还记得所谓的第一台计算机"ENIAC"使用的是什么吗?就是纸带!!

ps:其实ENIAC真的不是第一台~

所以说你应该可以理解为什么他被称为"通用计算机之父"了.

他提出的分析机的架构设想与现代冯诺依曼计算机的五大要素,存储器 运算器 控制器  输入 输出是吻合的

也是他将穿孔卡片应用到计算机领域

ps:穿孔卡片本身并不是巴贝奇的发明,而是来自于改进后的提花机,最早的提花机来自于中国,也就是一种纺织机

只是可惜,分析机并没有真正的被构建出来,但是他的思维理念是超前的,也是正确的

巴贝奇的思想超前了整整一个世纪,不得不提的就是女程序员艾达,有兴趣的可以google一下,Augusta Ada King

机电阶段与电子阶段使用到的硬件技术原理,有不少是相同的

主要差别就在于计算机理论的成熟发展以及电子管晶体管的应用

为了接下来更好的说明,我们自然不可避免的要说一下当时出现的自然科学了

自然科学的发展与近现代计算的发展是一路相伴而来的

文艺复兴运动使人们从传统的封建神学的束缚中慢慢解放,文艺复兴促进了近代自然科学的产生和发展

你要是实在没事情做,可以探究一下"欧洲文艺复兴革命对近代自然科学发展史有何重要影响"这一议题

 

9 总结

Z1的原型机毁于1943年12月柏林一场盟军的空袭中。如今已不可能判定Z1的复制品是否和原型一样。从幸存的那些照片上看,原型机是个大块头,而且不那么「规则」。此处我们只能相信祖思本人所言。但我觉得,尽管他没什么理由要在重建的过程中有意识地去「润色」Z1,记忆却可能悄悄动着手脚。祖思在1935~1938年间记下的那些笔记看起来与后来的复制品一致。据他所言,1941建成的Z3和Z1在设计上十分相似。

二十世纪80年代,西门子(收购了祖思的计算机公司)为重建Z1提供了资金。在两名学生的辅助下,祖思在自己家中完成了所有的建造工作。建成之后,为方便起重机把机器吊起来,运送至柏林,结果祖思家楼上拆掉了一部分墙。

重建的Z1是台优雅的计算机,由成千上万的部件组成,但并没有多余。比如尾数ALU的输出可以仅由两个移位器实现,但祖思设置的那些移位器明显以较低的代价提升了算术运算的速率。我甚至发现,Z1的处理器比Z3的更优雅,它更简洁,更「原始」。祖思似乎是在采用了更简单、更可靠的电话继电器之后,反而在CPU的尺寸上「铺张浪费」。同样的事也发生在Z3若干年后的Z4身上。Z4根本就是大版的Z3,有着大版的指令集,而计算机架构是基本一样的,就算它的指令更多。机械式的Z1从未能一直正常运行,祖思本人后来也称之为「一条死胡同」。他曾开玩笑说,1989年Z1的复制品那是相当精确,因为原型机其实不可靠,虽然复制品也可靠不到哪去。可神奇的是,Z4为了节省继电器而使用的机械式内存却非常可靠。1950~1955年间,Z4在瑞士的苏黎世联邦理工学院(ETH Zürich)服役,其机械内存运行良好[7]

最令我惊讶的是,康拉德·祖思是何等年轻,就对计算机引擎给出了如此优雅的设计。在美国,ENIAC或MARK I团队都是由经验丰富的科学家和电子专家组成的,与此相反,祖思的工作孤立无援,他还没有什么实际经验。从架构上看,我们今天的计算机进与1938年的祖思机一致,反而与1945年的ENIAC不同。直到后来的EDVAC报告草案,以及冯·诺依曼和图灵开发的位串行机中,才引进了更优雅的体系结构。约翰·冯·诺依曼(John von Neumann)1926~1929年间居于柏林,是柏林大学最年轻的讲师(报酬直接来自学生学费的无薪大学教师)。那些年,康拉德·祖思和冯·诺依曼许能在不经意间相遇相知。在那疯狂席卷、那黑夜笼罩德国之前,柏林本该有着许多的可能。

图20:祖思早期为Z1复制品设计的草图之一。日期不明。

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返璞归真用于复数计算,其余都是军事用途,可见战争确实是技术革新的催化剂。

电磁学

据传是1752年,富兰克林做了实验,在近代发现了电

随后,围绕着电,出现了很多旷世的发现.比如电磁学,电能生磁,磁能生电

图片 4

这就是电磁铁的基本原型

根据电能生磁的原理,发明了继电器,继电器可以用于电路转换,以及控制电路

图片 5

 

 

电报就是在这个技术背景下被发明了,下图是基本原理

图片 6

但是,如果线路太长,电阻就会很大,怎么办?

可以用人进行接收转发到下一站,存储转发这是一个很好的词汇

所以继电器又被作为转换电路应用其中

图片 7

参考文献

[1] Horst Materna, Die Geschichte der Henschel Flugzeug-Werke in Schönefeld bei Berlin 1933-1945, Verlag Rockstuhl, Bad Langensalza,

  1. [2] Zuse, K., Der Computer – Mein Lebenswerk, Springer-Verlag, Berlin, 3rd Edition, 1993.
    [3] Rojas, R., "Konrad Zuse's legacy: the architecture of the Z1 and Z3", Annals of the History of Computing, Vol. 19, N. 2, 1997, pp. 5–16.
    [4] Ursula Schweier, Dietmar Saupe, "Funktions- und Konstruktionsprinzipien der programmgesteuerten mechanischen Rechenmaschine Z1", Arbeitspapiere der GMD 321, GMD, Sankt Augustin, August 1998.
    [5] Rojas, R. (ed.), Die Rechenmaschinen von Konrad Zuse, Springer-Verlag, Berlin, 1998.
    [5] Website: Architecture and Simulation of the Z1 Computer, http: http://zuse-z1.zib.de/, last access: July 21st, 2013.
    [6] Konrad Zuse, "Rechenvorrichtung aus mechanischen Schaltglieder", Zuse Papers, GMD 019/003 (undated), http://zuse.zib.de/, last access July 21st, 2013.
    [7] Bruderer, H.: Konrad Zuse und die Schweiz: Wer hat den Computer erfunden?, Oldenbourg Wissenschaftsverlag, Munich, 2012.
    [8] Goldstine, H.: "The Electronic Numerical Integrator and Computer (ENIAC)", Annals of the History of Computing, Vol. 18 , N. 1, 1996, S. 10–16.

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前合影。(图片来自

于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指令集嵌入式微处理器设计》)

就这样趟过历史,渐渐地,这些遥远的东西也变得与我们亲近起来,历史与现在从来没有脱节,脱节的是我们局限的认知。往事并非与现今毫无关系,我们所熟知的伟大创造都是从历史一次又一次的更迭中脱胎而出的,这些前人的智慧串联着,汇聚成流向我们、流向未来的璀璨银河,我掀开它的惊鸿一瞥,陌生而熟悉,心里头热乎乎地涌起一阵难以言表的惊艳与欣喜,这便是研究历史的乐趣。

二进制

而且,一个很重要的事情是,德国人莱布尼茨大约在1672-1676发明了二进制

用0和1两个数码来表示的数

参考文献

胡守仁. 计算机技术发展史(一)[M]. 长沙: 国防科技大学出版社, 2004.

Wikipedia. Hans Christian Ørsted[EB/OL]. , 2016-12-10.

Wikipedia. Michael Faraday[EB/OL]. , 2016-11-27.

Wikipedia. Relay[EB/OL]. , 2016-12-20.

Wikipedia. Joseph Henry[EB/OL]. , 2016-12-03.

Wikipedia. Edward Davy[EB/OL]. , 2016-11-04.

Wikipedia. Unit record equipment[EB/OL]. , 2016-12-29.

陈厚云, 王行刚. 计算机发展简史[M]. 北京: 科学出版社, 1985.

吴为平, 严万宗. 从算盘到电脑[M]. 长沙: 湖南教育出版社, 1986.

Wikipedia. United States Census[EB/OL]. , 2017-01-15.

Wikipedia. United States Census Bureau[EB/OL]. , 2017-01-20.

Wikipedia. Herman Hollerith[EB/OL]. , 2017-01-08.

Herman Hollerith. Art of Compiling Statistics[P]. 美国专利: 395781, 1889-01-08.

Frank da Cruz. Hollerith 1890 Census Tabulator[EB/OL]. , 2011-03-28.

Wikipedia. Player piano[EB/OL]. , 2017-01-20.

Wikipedia. Konrad Zuse[EB/OL]. , 2017-01-30.

Largest Dams. Computer History[EB/OL]. , 2013-12-23.

Wikipedia. Z1 (computer)[EB/OL]. ), 2017-04-27.

Rojas R. The Z1: Architecture and Algorithms of Konrad Zuse's First Computer[J]. Eprint Arxiv, 2014.

逸之. Z1:第一台祖思机的架构与算法[EB/OL]. , 2017-04-07.

柏林自由大学. Architecture and Simulation of the Z1 Computer[EB/OL]. .

talentraspel. talentraspel simulator für mechanische schaltglieder zuse[EB/OL]. , 2013-11-12.

Wikipedia. Z2 (computer)[EB/OL]. ), 2017-02-23.

Wikipedia. Z3 (computer)[EB/OL]. ), 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]. , 2013-10-23.

Wikipedia. Z4 (computer)[EB/OL]. ), 2017-05-10.

Wikipedia. George Stibitz[EB/OL]. , 2017-04-24.

Paul E. Ceruzzi. Number, Please-Computers at Bell Labs[EB/OL]. .

AT&T Tech Channel. AT&T Archives: Invention of the First Electric Computer[EB/OL]. , 2011-10-19.

history-computer.com. Relay computers of George Stibitz[EB/OL]. .

Wikipedia. Howard H. Aiken[EB/OL]. , 2017-07-21.

Wikipedia. Harvard Mark I[EB/OL]. , 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]. , 2014-09-13.

CS50. Harvard Mark I[EB/OL]. , 2014-02-21.

Wikipedia. Harvard Mark II[EB/OL]. , 2017-08-03.

Wikipedia. Harvard Mark III[EB/OL]. , 2017-08-03.

Wikipedia. Harvard Mark IV[EB/OL]. , 2017-08-03.

陈明敏, 易清明, 石敏. ARMv4指令集嵌入式微处理器设计[J]. 电子技术应用, 2014, 40(12):23-26.


下一篇:敬请期待


相关阅读

01改变世界:引言

01改变世界:没有计算器的日子怎么过——手动时期的计算工具

01改变世界:机械之美——机械时期的计算设备

01改变世界:现代计算机真正的鼻祖——超越时代的伟大思想

01改变世界:让电代替人工去计算——机电时期的权宜之计

逻辑学

更准确的说是数理逻辑,乔治布尔开创了用数学方法研究逻辑或形式逻辑的学科

既是数学的一个分支,也是逻辑学的一个分支

简单地说就是与或非的逻辑运算

逻辑电路

香农在1936年发表了一篇论文<继电器和开关电路的符号化分析>

我们知道在布尔代数里面

X表示一个命题,X=0表示命题为假;X=1表示命题为真;

如果用X代表一个继电器和普通开关组成的电路

那么,X=0就表示开关闭合  X=1就表示开关打开

不过他当时0表示闭合的理念跟现代正好相反,难道觉得0是看起来就是闭合的吗

解释起来有些别扭,我们用现代的看法解释下他的观点

也就是:

图片 8

(a)  开关的闭合与打开对应命题的真假,0表示电路的断开,命题的假  1表示电路的连通,命题的真

(b)X与Y的交集,交集相当于电路的串联,只有两个都联通,电路才是联通的,两个都为真,命题才为真

(c)X与Y的并集,并集相当于电路的并联,有一个联通,电路就是联通的,两个有一个为真,命题即为真

图片 9

 

这样逻辑代数上的逻辑真假就与电路的连通断开,完美的完全映射

而且,所有的布尔代数基本规则,都非常完美的适合开关电路

 

基本单元-门电路

有了数理逻辑和逻辑电路的基础理论,不难得出电路中的几个基础单元

Vcc表示电源    比较粗的短横线表示的是接地

与门

串联电路,AB两个电路都联通时,右侧开关才会同时闭合,电路才会联通

图片 10

符号

图片 11

另外还有多输入的与门

图片 12

或门

并联电路,A或者B电路只要有任何一个联通,那么右侧开关就会有一个闭合,右侧电路就会联通

图片 13

符号

图片 14

非门

右侧开关常闭,当A电路联通的时候,则右侧电路断开,A电路断开时,右侧电路联通

图片 15

符号:

图片 16

所以你只需要记住:

与是串联/或是并联/取反用非门

 机电阶段

接下来我们说一个机电式计算机器的优秀典范

机电式的制表机

霍尔瑞斯的制表机,主要是为了解决美国人口普查的问题.

人口普查,你可以想象得到自然是用于统计信息,性别年龄姓名等

如果纯粹的人工手动统计,可想而知,这是多么复杂的一个工程量

制表机首次将穿孔技术应用到了数据存储上,你可以想象到,使用打孔和不打孔来识别数据

不过当时设计还不是很成熟,比如如果现代,我们肯定是一个位置表示性别,可能打孔是女,不打孔是男

当时是卡片上用了两个位置,表示男性就在标M的地方打孔,女性就在标F的地方打孔,不过在当时也是很先进了

然后,专门的打孔员使用穿孔机将居民信息戳到卡片上

紧接着自然是要统计信息

利用电流的通断来识别数据

图片 17

 

 

对应着这个卡片上的每个数据孔位,上面有着金属针,下面有着容器,容器装着水银

按下压板时,卡片有孔的地方,针可以通过,与水银接触,电路接通,没孔的地方,针就被挡住。

如何将电路通断对应到所需要的统计信息?

这就用到了数理逻辑与逻辑电路了

图片 18

 

最上面的引脚是输入,通过打孔卡片的输入

下面的继电器是输出,根据结果  通电的M将产生磁场, 牵引特定的杠杆,拨动齿轮完成计数。

看到没,此时已经可以根据打孔卡片作为输入,继电器组成的逻辑电路作为运算器,齿轮进行计数的输出了

制表机中的涉及到的主要部件包括:  输入/输出/运算

 

1896年,霍尔瑞斯创立了制表机公司,他是IBM的前身.....

有一点要说明

并不能笼统的说谁发明了什么技术,下一个使用这种技术的人,就是借鉴使用了发明者或者说发现者的理论技术

在计算机领域,很多时候,同样的技术原理可能被好几个人在同一时期发现,这很正常

还有一位大神,不得不介绍,他就是康拉德·楚泽 Konrad Zuse 德国

因为他发明了世界上第一台可编程计算机——Z1

图片 19

 

图为复制品,复制品其实机械工艺上比37年的要现代化一些

尽管zuse生于1910,Z1也是大约1938建造完成,但是他其实跟机械阶段的计算器并没有什么太大区别

要说和机电的关系,那就是它使用电动马达驱动,而不是手摇,所以本质还是机械式

不过他的牛逼之处在于在也设想出来了现代计算机一些的理论雏形

将机器严格划分为处理器内存两大部分

采用了二进制

引入浮点数,发明了浮点数的二进制规格化表示

靠机械零件实现与、或、非等基础的逻辑门

虽然作为机械设备,但是却是一台时钟控制的机器。其时钟被细分为4个子周期

处理器是微代码结构的操作被分解成一系列微指令,一个机器周期一条微指令。

微指令在运算器单元之间产生具体的数据流,运算器不停地运作,每个周期都将两个输入寄存器里的数加一遍。

可编程 从穿孔带读入8比特长的指令 指令已经有了操作码 内存地址的概念

这些全都是机械式的实现

而且这些具体的实现细节的理念思维,很多也是跟现代计算机类似的

可想而知,zuse真的是个天才

后续还研究出来更多的Z系列

虽然这些天才式的人物并没有一起坐下来一边烧烤一边讨论,但是却总是"英雄所见略同"

几乎在相同时期,美国科学家斯蒂比兹(George Stibitz)与德国工程师楚泽独立研制出二进制数字计算机,就是Model k

Model I不但是第一台多终端的计算机,还是第一台可以远程操控的计算机。

贝尔实验室利用自身的技术优势,于1940年9月9日,在达特茅斯学院(Dartmouth College)和纽约的本部之间搭起线路.

贝尔实验室后续又推出了更多的Model系列机型

再后来又有Harvard Mark系列,哈佛与IBM的合作

哈佛这边是艾肯IBM是其他三位

图片 20

 

Mark I也通过穿孔带获得指令,和Z1是不是相同?

穿孔带每行有24个空位

前8位标识用于存放结果的寄存器地址,中间8位标识操作数的寄存器地址,后8位标识所要进行的操作

——结构已经非常类似后来的汇编语言

内部还有累加寄存器,常数寄存器

机电式的计算机中,我们可以看到,有些伟大的天才已经构思设想出来了很多被应用于现代计算机的理论

机电时期的计算机可以说是有不少机器的理论模型已经算是比较接近现代计算机了

而且,有不少机电式的型号一直发展到电子式的年代,部件使用电子管来实现

这为后续计算机的发展提供了不可磨灭的贡献

电子管

我们现在再转到电学史上的1904年

一个叫做弗莱明的英国人发明了一种特殊的灯泡-----电子二极管

先说一下爱迪生效应:

在研究白炽灯的寿命时,在灯泡的碳丝附近焊上一小块金属片。

结果,他发现了一个奇怪的现象:金属片虽然没有与灯丝接触,但如果在它们之间加上电压,灯丝就会产生一股电流,趋向附近的金属片。

这股神秘的电流是从哪里来的?爱迪生也无法解释,但他不失时机地将这一发明注册了专利,并称之为“爱迪生效应”。

此处完全可以看得出来,爱迪生是多么的有商业头脑,这就拿去申请专利去了~此处省略一万字....

金属片虽然没有与灯丝接触,但是如果他们之间加上电压,灯丝就会产生一股电流,趋向附近的金属片

就是图中的这样子

图片 21

而且这种装置有一个神奇的功能:单向导电性,会根据电源的正负极连通或者断开

 

其实上面的形式和下图是一样的,要记住的是左边靠近灯丝的是阴极   阴极电子放出

图片 22

 

用现在的术语解释就是:

阴极是用来放射电子的部件, 分为氧化物阴极和碳化钍钨阴极。

一般来说氧化物阴极是旁热式的, 它是利用专门的灯丝对涂有氧化钡等阴极体加热, 进行热电子放射。

碳化钍钨阴极一般都是直热式的,通过加热即可产生热电子放射, 所以它既是灯丝又是阴极。

然后又有个叫做福雷斯特的人在阴极和阳极之间,加入了金属网,现在就叫做控制栅极

图片 23

通过改变栅极上电压的大小和极性,可以改变阳极上电流的强弱,甚至切断

图片 24

电子三极管的原理大致就是这样子的

既然可以改变电流的大小,他就有了放大的作用

不过显然,是电源驱动了他,没有电他本身不能放大

因为多了一条腿,所以就叫做电子三极管

我们知道,计算机应用的其实只是逻辑电路,逻辑电路是与或非门组成,他并不是真的在乎到底是谁有这个本事

之前继电器能实现逻辑门的功能,所以继电器被应用到了计算机上

比如我们上面提到过的与门

图片 25

之所以继电器可以实现逻辑门的功能,就是因为它具有"控制电路"的功能,就是说可以根据一侧的输入情况,决定另一侧的情况

那新发明的电子管,根据它的特性,也可以应用于逻辑电路

因为你可以控制栅极上电压的大小和极性,可以改变阳极上电流的强弱,甚至切断

也达到了根据输入,控制另外一个电路的功能,只不过从继电器换成电子管,内部的电路需要变化下而已

电子阶段

现在应该说一下电子阶段的计算机了,可能你早就听过了ENIAC

我想说你更应该了解下ABC机.他才是真正的世界上第一台电子数字计算设备

阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer,通常简称ABC计算机)

1937年设计,不可编程,仅仅设计用于求解线性方程组

但是很显然,没有通用性,也不可编程,也没有存储程序机制,他完全不是现代意义的计算机

图片 26

 

上面这段话来源于:

主要陈述了设计理念,大家可以上面的这四点

如果你想要知道你和天才的距离,请仔细看下这句话

he jotted down on a napkin in a tavern

世界上第一台现代电子计算机埃尼阿克(ENIAC),也是继ABC之后的第二台电子计算机.

ENIAC是参照阿塔纳索夫的思想完整地制造出了真正意义上的电子计算机

奇葩的是为啥不用二进制...

建造于二战期间,最初的目的是为了计算弹道

ENIAC具有通用的可编程能力

更详细的可以参看维基百科:

不过ENIAC程序和计算是分开的,也就意味着你需要手动输入程序!

并不是你理解的键盘上敲一敲就好了,是需要手工插接线的方式进行的,这对使用来说是一个巨大的问题.

有一个人叫做冯·诺伊曼,美籍匈牙利数学家

有意思的是斯蒂比兹演示Model I的时候,他是在场的

而且他也参与了美国第一颗原子弹的研制工作,任弹道研究所顾问,而且其中涉及到的计算自然是极为困难的

我们说过ENIAC是为了计算弹道的,所以他早晚会接触到ENIAC,也算是比较顺理成章的他也加入了计算机的研制

冯诺依曼结构

1945年,冯·诺依曼和他的研制小组在共同讨论的基础上

发表了一个全新的“存储程序通用电子计算机方案”——EDVAC(Electronic Discrete Variable Automatic Computer)

一篇长达101页纸洋洋万言的报告,即计算机史上著名的“101页报告”。这份报告奠定了现代电脑体系结构坚实的根基.

报告广泛而具体地介绍了制造电子计算机和程序设计的新思想。

这份报告是计算机发展史上一个划时代的文献,它向世界宣告:电子计算机的时代开始了。

最主要是两点:

其一是电子计算机应该以二进制为运算基础

其二是电子计算机应采用存储程序方式工作

并且进一步明确指出了整个计算机的结构应由五个部分组成:

运算器、控制器、存储器、输入装置和输出装置,并描述了这五部分的职能和相互关系

其他的点还有,

指令由操作码和地址码组成,操作码表示操作的性质,地址表示操作数的存储位置

指令在存储器内按照顺序存放

机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成

人们后来把根据这一方案思想设计的机器统称为“冯诺依曼机”,这也是你现在(2018年)在使用的计算机的模型

我们刚才说到,ENIAC并不是现代计算机,为什么?

因为不可编程,不通用等,到底怎么描述:什么是通用计算机?

1936年,艾伦·图灵(1912-1954)提出了一种抽象的计算模型 —— 图灵机 (Turing Machine)

又称图灵计算、图灵计算机

图灵的一生是难以评价的~

我们此处仅仅说他对计算机的贡献

下面这段话来自于百度百科:

图灵的基本思想是用机器来模拟人们进行数学运算的过程

所谓的图灵机就是指一个抽象的机器

图灵机更多的是计算机的科学思想,图灵被称为 计算机科学之父

它证明了通用计算理论,肯定了计算机实现的可能性

图灵机模型引入了读写与算法与程序语言的概念

图灵机的思想为现代计算机的设计指明了方向

冯诺依曼体系结构可以认为是图灵机的一个简单实现

冯诺依曼提出把指令放到存储器然后加以执行,据说这也来源于图灵的思想

至此计算机的硬件结构(冯诺依曼)以及计算机的自然科学理论(图灵)

已经比较完全了

计算机经过了第一代电子管计算机的时代

随后出现了晶体管

晶体管

肖克利1947年发明了晶体管,被称为20世纪最重要的发明

硅元素1822年被发现,纯净的硅叫做本征硅

硅的导电性很差,被称为半导体

一块纯净的本征硅的半导体

如果一边掺上硼一边掺上磷  然后分别引出来两根导线

图片 27

这块半导体的导电性获得了很大的改善,而且,像二极管一样,具有单向导电性

因为是晶体,所以叫做晶体二极管

而且,后来还发现加入砷 镓等原子还能发光,称为发光二极管  LED

还能特殊处理下控制光的颜色,被大量应用

如同电子二极管的发明过程一样

晶体二极管不具有放大作用

又发明了在本征半导体的两边掺上硼,中间掺上磷

图片 28

这就是晶体三极管

只要电流I1 发生一点点变化   电流I2就会大幅度变化

也就是说这种新的半导体材料就像电子三极管一样具有放大作

所以被称为晶体三极管

晶体管的特性完全适合逻辑门以及触发器

世界上第一台晶体管计算机诞生于肖克利获得诺贝尔奖的那年,1956年,此时进入了第二代晶体管计算机时代

再后来人们意识到:晶体管的工作原理和一块硅的大小实际没有关系

可以将晶体管做的很小,但是丝毫不影响他的单向导电性,照样可以方法信号

所以去掉各种连接线,这就进入到了第三代集成电路时代

随着技术的发展,集成的晶体管的数量千百倍的增加,进入到第四代超大规模集成电路时代

 

 

 

完整内容点击标题进入

 

1.计算机发展阶段

2.计算机组成-数字逻辑电路

3.操作系统简单介绍

4.计算机启动过程的简单介绍

5.计算机发展个人理解-电路终究是电路

6.计算机语言的发展

7.计算机网络的发展

8.web的发展

9.java web的发展

 

本文由必赢体育发布,转载请注明来源

关键词: