第一台继电器式计算机由康德拉.楚泽制造(1910-1995),这台机器使用了二进制数,但早期版本中使用的是机械存储器而非继电器,使用老式35毫米电影胶片进行穿孔编程。
同一时期,哈佛大学研究生霍华德.艾肯 要寻找大量的重复计算的方法,正式他的这一需求促使哈佛与IBM合作,并最终在1943年创造出一台自动连续可控计算机,也就是闻名于世的Harvard Mark I。这是一台可以打印表格的数字计算机。Mard II 是最大的继电式计算机,使用了13000个继电器。哈佛大学计算机实验室当时的主任是艾肯,也正式他讲授了计算机科学的第一次课。
继电器不是完美的,因为他们是机械性的,利用金属片的弯曲和伸直状态进行工作,而频繁的工作可能导致其断裂。1947年人们在MarkII计算机的继电器中发现了一只飞蛾。格蕾丝.莫瑞.赫柏于1944加入艾肯的团队,他将上面提到的那只飞蛾用带子绑在计算机日志上,并在其边上著名“第一个被发现有生命的bug”。
真空管是一种可以替代继电器的元件,它由约翰.安布罗斯.弗莱明 和 李.德.福雷斯特 在进行无线电通信链接时研发出来的。到20世纪40年代,真空管已广泛应用于放大电话信号,那时期,美国的几乎美国家庭都有一台带有发光二极管可控收音机。他们能放大无线信号,并且把他们变成还原为人们能听见的声音。真空管同样可以链接成与门、或门、与非门,以及与或门——这点很像继电器。
真空管价格昂贵、耗电量大、以及产生的热量太多、最大的问题是真空管最终会被烧坏。拥有真空管收音机的人们习惯于定期更换真空管。一台计算机拥有数量巨大的真空管,按统计学来分析,每隔几分钟就会烧坏一个。
用真空管最大的好处在于真空管的状态可以在百万分之一秒内发生转变,速度比继电器快1000倍。不过当时,速度并不在主要考虑范围内。
1945年,真空管已经完全取代了继电器。虽然继电器计算机被称为电动机械计算机,但真空管是第一台电子计算机的基础。
在英国,巨像计算机用来破译德国名为“Enigma”代码生成器产生的代码,艾伦.M.图灵 为这个项目做出了巨大的贡献,图灵撰写了两篇非常有影响的论文,这使他如今成为计算机领域的鼎鼎大名的人物。第一篇论文发表于1937年,首次提出了“可计算性”这个概念,用来分析哪些事情计算机可以做到,哪些做不到。他为计算机构想了一个抽象模型,这就是现在为人所熟知的图灵机。图灵第二篇非常有名的论文是关于人工智能的,这篇论文中,他介绍了一种测试机器智能的方法,即现在为人熟知的图灵测试法。
在摩尔电子工程学院,J.普利斯普.埃克特和约翰.莫克利设计了ENIAC(电子数字积分计算机),使用了18000个真空管并最终在1945年底完成。按全部吨位算(大约30吨),ENIAC是曾经(或许也是以后)制造出来的最大计算机。到1977年,人们可以在Radio Shack买到速度更快的计算机。埃克特和莫克利想为计算机申请专利,可是却被竞争者约翰.V.安塔纳索夫阻扰了,他更早一步设计了一台电子计算机,但它运行得并不顺畅。
ENIAC吸引了数学家约翰.冯.诺依曼的眼球,从1930年开始,出生在匈牙利的冯.诺依曼就定居在美国。作为一名令公众瞩目的任务,因仅凭自己的大脑就能进行复杂的数学计算而闻名。冯诺依曼当时是普林斯顿高级研究院的一名数学教授,研究范围很广,从量子力学到游戏应用,甚至到经济理论。
约翰.冯.诺依曼协助设计的ENIAC的后续产品EDVAC。在1946年与亚瑟.W.博克斯和何曼.葛思庭共同执笔的题为“电子计算器件逻辑设计的初步分析与讨论“的论文中,他描述了EDVAC比ENIAC更加先进的特点。EDVAC的设计者们感觉计算机内部应当使用二进制数,而ENIAC使用的是十进制数。同时他们认为计算机中应当拥有尽可能大容量的存储器,这些存储器应该用来存储程序代码和程序执行中产生的数据(这些在ENIAC中都不能实现,对于ENIAC来说,编程不过是扳动开关和插拔电线的事情)。这些指令在存储器中是顺序存放的,而且可以由程序计数器进行寻址,但允许条件跳转。这就是著名的”存储程序概念“。
这些设计上的决策是计算机历史中非常重要的一个进化阶段,现在我们称之为”冯.诺依曼结构“。前一节介绍的就是经典的冯.诺依曼计算机,伴随着冯.诺依曼结构,又出现冯.诺依曼瓶颈。在冯.诺依曼计算机中,为了执行指令通常需要花费大量的时间先将这些指令从存储器中取出来,我们回忆一下,前一节中,最后设计的计算机需要花费3/4的时间用来取指令。
克劳德.香农是另外一个非常有影响力的思想家,他的1938年的硕士论文,确定了开关、继电器以及布尔代数之间的关系。1948年为贝尔实验室工作期间,他发表了一篇为”通信过程中的代数理论“的文章,这篇文章中,他不仅将”位“的概念介绍给世界,更开创了一个新的研究领域,即著名的”信息论“。信息论研究的是数字信息在有噪声的情况下传输,如何弥补因噪声产生的损失。1949年,他撰写了第一篇关于如何编程可以让计算机下棋的文章,1952年他设计了一个通过继电器控制的机械鼠,它可以在一个迷宫中记住路径。
诺博尔特.韦纳从哈佛大学获得数学博士学位时只有18岁,其撰写的Cybernetics,or Control and Communication in the Animal and Machine(1948年)一书使他闻名于世。他使用新词汇”控制论“(cybernetics:源于希腊语舵手)表示人类和动物的生物过程同计算机和机器人原理之间的关系。大众文化中,人们普遍使用cyber作为前缀表示与计算机相关的一切,最著名的一个词,数百万台计算机通过因特网相连被称作”cyberspace“(网络空间),这个次源于计算机科幻小说作家威廉.吉布森在1984年发表的小说Neuromancer中的“cyberpunk”一词。
1948年,埃克特与莫奇利计算机公司(后来成为雷明顿兰德公司一部分)开始开发第一台商用计算机——通用自动计算机,或者成为UNIVAC。这台计算机与1951年完成,此后就被送到了人口普查局。UNIVAC在网络应用方面的首次亮相在哥伦比亚广播公司,它被用来测试1952年的总统选举结果。沃尔特.克朗凯特将UNIVAC称作“electronic brain”(电脑)。同样是在1952年,IBM发布了其第一个商用计算机系统,代号701.
自此开始了漫长的公司和政府计算机历史。尽管这段历史很有趣,但我们要追踪另一段历史——如何缩减计算机成本和体积以及让其走入寻常百姓家,这开始于1947年一个鲜为人知的电子技术突破。
当时AT&T(美国电话电报公司)正式将科学与技术的研究同其他业务分割时,1925年1月1日成立了贝尔实验室。最初目的是发展改良电话系统相关技术,幸运的是在这种非常模糊的目标下可以研究很多技术,对于电话系统而言,一个显而易见的长期目标是通过电线不失真的传播语音信号。
从1912年开始,贝尔系统致力于真空放大器的研究,为了能让电话系统使用真空管,对其进行了相当数量的研究和设计方面的改进。尽管做了大量的工作,真空管仍然有许多必须改进的地方。真空管体积太大、耗能大,并且最终会烧毁,但是,它们在当时是唯一的选择。
1947年12月16日,当贝尔实验室的两个物理学家 约翰·巴丁和沃尔特·布兰坦制作出另一种放大器时,所有一切都发生了改变。这种新型的放大器用一块镉(一种半导体元素)平板和一条黄金薄片制成。一周之后,他们将这个东西演示给他们的老板威廉·肖克利。这就是第一个“晶体管”,它被一些人称作20世纪最重要的发明之一。
晶体管并不是凭空产生的,早在8年前(1939年12月29日)肖克利在他的笔记本上写道“今天我突然想到,使用半导体来制作放大器从原理上讲比真空管更为可能”在晶体管诞生后的几十年里,人们不断完善它。1956年肖克利、巴丁和布兰坦“因为他们在半导体上的研究以及晶体管效应的发现”获得了当年的诺贝尔物理学奖。
导体因为它们可以有利于电流的通过而得名。铜、银以及金都是很好的导体,元素周期表中这三种元素同属一列并非巧合。
原子中的电子分布在原子核外,并围绕原子核运动。这三种导体的共同特征是在原子核最外层都有一个单独的电子,而这个电子可以很容易的与原子中的其他电子剥离,因此可以自由移动形成电流。与导体对应的是绝缘体——比如橡胶和塑料——几乎不能导电。
镉元素和硅元素(以及一些化合物)被称为“半导体”,因为他们的导电系数可以通过多种方式操控而得名。半导体的原子核在最外层有4个电子,是外层所能拥有的最大电子数目的一半。纯半导体中,原子之间形成稳定的化学键以及类似金刚石的结构。这种半导体不是良好的半导体。
但是半导体可以掺入一些杂质,即与某些杂质组合。一种类型的杂质称作N型(N表示negative)半导体,他们为原子之间的结合提供额外的电子。另一种杂质被称作P型半导体。
把一P型半导体夹在两个N型半导体之间可以使之成为一个放大器。这就是著名的NPN晶体管,其三部分分别为集电极、基极以及发射极。
下面的NPN晶体管的原理示意图
在基极施加微小的电压就可以控制非常大的电压从集电极到发射极。如果在基极没有施加电压,那么晶体管将不起作用。
晶体管通常封装在直径为四分之一英寸的小金属罐中,并伸出三根金属线,外形如下:
晶体管开创了固态电子器件的时代,即指晶体管不再需要真空而是使用固体制造,尤其是使用半导体以及当今最为常见的硅来制造。除了体积比真空管更小,晶体管需要的电量更小,产生的热量更少,而且持久耐用。1954年,德州仪器公司,半导体革命中一个非常重要的公司,制作了第一批可以随身携带的晶体管收音机。
可是,晶体管真正的商业应用却始于助听器,为了纪念亚历山大·格雷厄姆·贝尔为聋人奉献毕生精力,AT&T公司允许助听器制造商无偿使用晶体管技术。晶体管电视机诞生于1960年,到现在的电子管的应用几乎已经消失了(一些高保真音响爱好者以及电子吉他弹奏者热衷于真空管放大器产生的音质),1956年,肖克利离开了贝尔实验室成立的肖克利半导体实验室。他回到了自己出生的地方,加利福尼亚帕罗奥图市,他的公司是第一个落户于该地区的大公司。其他半导体和计算机公司立刻也在该地区建立基业,旧金山南部的这个地区现在被人们成为硅谷。
开发真空管的目的是为了放大电信号,但是他们同样可以应用在逻辑门的开关上,作用与晶体管一样。下面是非常类似于继电器形式的由晶体管构造的与门。
继电器、真空管以及晶体管最初都是为了开发放大器设计的,但是通过相似的方式可以组成逻辑门,而计算机则是由这些部件构成的。1956年诞生了第一台晶体管计算机。
晶体管可以在更小的空间里安装更多的逻辑门,但是无法将计算机结构变得更简单。晶体管更加小而且不容易控制。
一对晶体管可以连接成门,而门常常可以连接成振荡器、加法器、选择器以及解码器。振荡器可以组成多位锁存器或者RAM阵列。如果把晶体管预先连接成常见的构件,再用其来组装计算机会更加容易。
这种设想由英国物理学家杰利佛在1952年5月一次演讲中提出。
1958年7月,德州仪器公司的杰克·基尔比想到了一个可以在一块硅片制造出多个晶体管、电阻和其他电子元件的方法,而且他并不知道杰里佛预言。6个月过后,也就是1959年1月,罗伯特·诺伊斯也想到了类似的方法。诺伊斯起初是为肖克利半导体实验室工作,但在1957年,他与其他7位科学家离开了肖克利半导体实验室创办了仙童半导体公司。
在技术发展史中,同时产生一项发明是较常见的,这可能超出了人们的想象。尽管基尔比 比 诺伊斯早6个月发明了这种设备,而且德州仪器公司先于仙童公司申请专利,但却是诺伊斯首先获得了专利。因此产生了法律的纠纷,但过了10年后,问题才得到令双方都满意的解决。尽管基尔比和诺伊斯并没有在一起共事,但他们俩被称为集成电路,或者叫做IC的共同发明者。
集成电路需要经过非常复杂的工艺流程才可以制造出来,包括将硅片分层,然后非常精确的掺入杂质以及蚀刻不同的区域形成微小组件。开发一种新的集成电路尽管很昂贵,但可以大量生产中获得效益——产量越大,价格就越便宜。
实际上,硅片是薄而且易碎的,因此它必须被安全的封装起来,这样不仅可以起到保护作用,还可以为芯片内部的部件与其他芯片之间的连接提供某种便利。集成电路有几种不同的封装方式,但最为常见的是采用矩形塑料双排直插式(DIP),提供14、16或者40个管脚。
上图,芯片凹槽朝左,从左下角开始,环绕到右端,依次为1-16.管脚之间的距离正好是1/10英寸。
1965年,戈登·E·摩尔(当时在仙童工作,后来成为英特尔合伙创办人)发现从1959年以后,技术以这样一种方式在发展:同一块芯片上可以集成的晶体管数目每年翻一倍。他预测这种趋势将会持续。真实的发展速度比摩尔发现稍慢一些,因此摩尔定律被修正为:每18个月同一块芯片上集成的晶体管数目就会翻一倍。这仍是一个令人吃惊的速度,它解释了为什么刚刚过了几年,家用的计算机好像已经过时了。
20世纪70年代中期,有两个制作集成电路的组件的”家族“盛行:TTL和CMOS
TTL代表transistor-transistor logic(晶体管-晶体管逻辑)。20世纪70年代中期,数字电路设计师人手一本《TTL工程师设计数据手册》,下面简称《TTL数据手册》。这是一本德州仪器和其他几个公司出售的TTL集成电路7400系列完整的参考书,这样称呼因为这个IC”家族“的每一名”成员“都是以数字74开头。
7400系列中的每一个集成电路都是由特定方式连接的预留逻辑门组成。一些芯片提供简单的预留的逻辑门,设计者可以利用它们来组成更大规模的组件;另外一些芯片则提供通用组件,例如:触发器、加法器、选择器以及解码器。
7400系列中第一个集成电路标号即为7400,在《TTL数据手册》中这样描述它——”四个双输入正与非门“。这意味着这个特殊的集成电路包含四个双输入与非们。”正“与门则是指1对应为有电压,而0对应没有电压。下面是一个14管脚的芯片,数据手册中的一张小图显示了管脚对应的输入与输出。
上图为芯片俯视图,小凹槽在左边。
14管脚Vcc,与符号V一样,用来表示电压(大写字母V的双下标代表电压源。下标字幕C指晶体管的电压输入端,即集电极,collector)。GND代表接地。
拿TTL7400系列来说,Vcc值必须介于4.75V和5.25V之间。换句话讲,电压必须在5V±5%的范围。电压低于4.75V时,芯片将无法工作。高于5.25V,芯片将被烧坏。即便有个5V电池也不能用来对TTL进行供电,因为电池的电压不可能刚好适合这些芯片。通常情况下,TTL需要从墙上接入电源。
7400芯片中每一个与非门有两个输入端和一个输出端,且相互独立工作。输入端电压0-0.8v区间为逻辑0,2~5v区间为逻辑1。0.8~2V范围电压应当避免。
TTL典型输出是以0.2V表示逻辑“0”,以3.4V表示逻辑“1”。考虑到电压不稳定,有时会有一些波动,集成电路的输入和输出端有时不用“0”和“1”表示,而是用“低”和“高”表示。此外,有时候低电压可以表示逻辑“1”,而高电压则可以表示逻辑“0”,这种配置称为“负逻辑”。7400是正逻辑。
TTL的典型输出0.2V代表逻辑“0”,3.4V代表逻辑“1”,那么这个输出是TTL可以隔离噪声的原因。
影响一个集成电路性能最重要的因素可以认为是传播时间,也就是输入端发生变化引起输出端发生相应变化所需要的时间。
通常以纳秒来衡量芯片的传播时间,缩写为nsec,即ns。十亿分之一秒被称为纳秒。7400芯片中与非门的传播时间应该保证小于22ns。
纳秒使计算机成为可能,计算机处理器迟钝的做着简单的事情——从存储器取出一个字节放到寄存器,再将两个字节相加,然后再将结果存放回存储器,没有纳秒是很慢的。
继续阅读《TTL数据手册》会发现书中很多熟悉的小条目。7402芯片有4个双输入或非门,7404芯片有6个反相器,7408芯片有4个双输入与门,7432芯片有4个双输入或门,以及7430芯片有一个8输入与非门,如下图:
Nc表示无连接(no connection)。
7474芯片是另一个较熟悉的芯片,它是一个“带预置和清零的双D型正边沿触发器”,如下图:
《TTL数据手册》中甚至还囊括了这个芯片中每个触发器的逻辑图:
逻辑表如下:
继续阅读《TTL数据手册》会发现,7483芯片是一个4位二进制全加法器,74151是一个8-1的数据选择器,74154芯片是一个4-16的解码器,74161芯片是一个4位同步二进制计数器,以及74175芯片是一个带清零的4输入D型触发器。从上述芯片中挑出两种可以制作一个8位锁存器。
将TTL反相器的输出连接到输入,就会获得一个振荡器,而且其震荡频率更容易计算。这种振荡器使用石英晶体制造相当简单,石英晶体放在带有两个引线的密封小扁罐中。这些石英晶体的震荡频率在一个特定的值,通常情况下是每秒至少振荡一百万个周期,称1兆赫兹,缩写为MHz。如果要使用TTL制造前面说的计算机,需要时钟频率为10MHz才可以使其运行良好,每条指令执行时间为400ns。
芯片家族中另一位明星(至今仍是)是CMOS,CMOS表示互补金属氧化物半导体。相应的有一本20世纪70年代中期的《CMOS数据手册》。书中涵盖了CMOS家族中的4000系列的IC的信息。
TTL供电电压要求在4.75~5.25V范围内。而对于CMOS来说,范围在3~18V内的电压均可,非常灵活。此外,CMOS相比TTL需要更少的能量,这使得电池运行小型CMOS电路变得可行。CMOS的缺点是速度慢,比如,在供电电压为5V的情况下,CMOS4008 4位全加器可以保证的传播时间只有750ns,但仍不能与TTL4位加法器的24ns的传播时间相媲美(今天TTL已经拥有了低功率版本而CMOS也有了告诉版本)。
在实际应用中,芯片的连接是在一个塑料“面包板”完成的,如下:
每一短行有5个孔,在塑料板背面这5个孔通过电线相连。把芯片插入到面包板中,芯片将横跨在中间长槽两侧,芯片的管脚则分别插到槽两侧的孔里,这样芯片的每一个管脚都会与其他四个孔里的管脚相连接,通过在孔之间连接电线可以实现芯片之间的连接。
使用一种叫“钢丝包装”的技术可以使芯片之间的连接更加牢固,芯片插入到带有几个长长的方柱的插槽中,如下:
每个柱体对应一个管脚,插口本身插入到事先穿孔的薄板中。在板子另一面,使用特殊的钢丝包装枪将每一个柱体周围紧紧包上绝缘线。柱体的直角边缘则从绝缘线中破出,与导线相连。
如果实际应用中使用的集成电路制造一个特定的电路,那可能会用到“印刷电路板”。很久以前,这是集成电路爱好者做的事情。这种电路板上布满了洞,并且被一层薄铜片覆盖。基本上,可以让防酸物质覆盖铜片上所有你想保护的地方,而使用酸蚀刻剩余的部分,接着就可以将集成电路的插口(或者是集成电路本身)直接焊接到电路板上的铜片上,但由于集成电路中存在很多相互连接,仅覆盖一层铜片通常情况下无法完成电路,所以商业制造的印刷电路板有多层互连。
到20世纪70年代早期,使用集成电路在一块电路板上制造一个完整的计算机处理器变得可能,实际上这距离将整个处理器放入一块芯片中,只是一个时间问题。虽然德州仪器公司在1971年为一块单芯片计算机提交了专利申请,但真正制造出一块这种单片机芯片的荣誉却属于英特尔公司。1970年,英特尔发售了第一款产品,一个可以存储1024位数据的芯片,在当时这是单一芯片中可以存储的最大位数。
英特尔在为日本吉康公司生产的可编程计算器设计芯片过程中,决定采取一种不同的方法。正如英特尔工程师特德·霍夫说的:我想让它成为一个具有通用功能的计算机,进而可以通过编程成为一个计算器,而不是使这个设备成为一个只有一些编程能力的计算器。 这导致了Intel4004的产生,它是第一块”计算机芯片“或者叫”微处理器“。1971年11月,4040芯片已经可以得到试用,它拥有2300个晶体管(摩尔定律)。
我们已经知道4004芯片包含的晶体管数目,下面是4004芯片另外三种重要的特征。自4004芯片开始,在比较微处理器性能时,通常采用三个衡量标准。
第一个标准:4004是一个4位微处理器,意味着处理器中数据通路宽度只有4位。每次做加、减运算时,它只能处理4位数字。对比看来,之前我们说的计算机数据通路是8位,因此被称为8位处理器。我们即将看到8位处理器很快就超越了4位处理器。但技术并没有停止。20世纪70年代末期,16位微处理器已经得到应用。回想之前讲的8位处理器中进行两个16位加法所必须的指令码,就知道16位处理器带来的优势。到20世纪80年代中期,32位微处理器诞生了。
第二个标准:4004每秒最大的时钟频率为108000周期,即108KHz。始终频率是指连接到微处理器并驱动它运行的振荡器的最大频率,超过此时钟频率,微处理器将不能正常工作。到1999年,家用计算机的微处理器已经达到了500MHz——比4004要快5000倍。
第三个标准:4004的可寻址存储器只有640字节,现在来看这个数字小得有点荒唐,但这与当时可得的存储芯片的容量是一致的。1999年英特尔生产的芯片可以寻址 64TB的空间。
上述三个数字指标并不能影响一台计算机的计算能力。比如,4位处理器同样可以实现32位数字加法,只不过是将其简单拆分为4位的数来进行。某种意义上讲,所有的数字计算机都是相同的,如果一台处理器从硬件上无法做到另外一台可以做到的事情,那么它可以通过软件途径做到,最终他们可以完成相同的事情,这是1937年图灵在论文里面关于可计算性的一种定义。
然而,速度是处理器之间的根本不同点,同事速度也是我们使用计算机的一大原因。
最大时钟频率,也成为主频,是影响处理器速度的决定性因素之一。始终频率决定了执行一条指令所需要的时间,处理器的数据位宽也影响处理器的速度。尽管4位处理器可以完成32位数字的加法,但速度是不能与32位处理器想媲美的。然而,令人感到迷惑的是,处理器可寻址存储器的最大空间对处理器速度也是有影响的,首先,可寻址存储器看上去只反映了处理器的某些能力,尤其是在需要大容量存储器的前提下进行数据处理能力,而与处理器速度无关。但其实,处理器可以利用某些存储器地址去控制其他的介质来存取信息,这样就绕开了存储器容量的限制。可是这种处理方法会降低整个计算机的速度。
20世纪70年代中期,虽然4004有很多局限性,但毕竟只是个开始。1972年4月,英特尔发布了8008芯片——一个时钟频率为200KHz、可寻址空间为16KB的8位微处理器。1974年5月,英特尔公司和摩托罗拉公司同时发布8008微处理器的改进版,正是两款芯片改变了整个世界。