24
2 月
PC通识0:认识计算机
- By IanGoo
Contents
前言
这是一个很讽刺的事实——虽然近年来电脑的普及率前所未有地高,从办公场所到家庭,哪里都能看到电脑,但是操作电脑不熟练的人数也达到了惊人的高度。最近流行的“当代大学生用电脑”的哏算是一个很有趣的总结。
看吧!他在使用Excel,但是他不会用任何一个快捷键!哦天哪他的
Ctrl
键甚至是全新的……他连自动填充都不用!从1到100都是手打的!他输入中文的时候只用两根食指!每输完一个词,他都用鼠标去点候选词!他一分钟打了10个字!
他直接在百度上搜索“爱奇艺下载”了!他点进了华军软件园了!他点了那个最大的“高速下载”!他直接运行了p2p下载器!他没有取消任何一个勾选的捆绑程序直接点了下一步!他的桌面上多了4个,不,5个,不,6个图标!
他的表格做好了,噢他直接保存到WPS云端了!他不知道如何把这份表格发给他的上司!他点了分享按钮,给他的上司发了一个金山文档连接!这份表格在云端查看的时候彻底乱码了!
观看当代大学生操作电脑
造成这一现象的原因有很多,有来自学校的——初等教育阶段,电脑作为当前社会的最重要的生产力工具之一,并没有得到应有的重视,反而被其他课程大量占用,导致一群没有接受过正规的电脑操作教育的中学毕业生反手就要用自己新买的电脑去查资料写论文了;还有移动设备的普及,从功能上说,智能手机和平板的功能更弱,相应地,操作也就更简单,同时,由于大量的重资本砸在这个领域,让人们产生了“信息设备本就应当这么简单”的错觉,面对功能更复杂、性能更强大同时操作也更复杂的PC,被惯坏的用户就显得无所适从了。
所以我想写这个系列。这将是一个非常漫长的系列。并且,我并不会只关注于技术和操作,而且还会谈一些历史和文化方面的东西,本篇就是其中之一。
从“计算”开始说起
当人类有了数字的概念之后,“计算”的概念也就随即开始引入了。在整个前工业时代,计算的压力一般不会很大,所以,被用于辅助计算的工具也就是类似算筹、算盘等。本质上,算盘是一种临时的存储装置(学术点说,叫“寄存器”),加减计算动作则由于操作者形成肌肉记忆而变得极为快速。
进入工业时代,计算的难度也在飞速增加。进入17世纪,对数的出现让对数计算尺成为三个世纪里工程师的标配装备。乘除的计算通过计算尺可以做到一查一个准。而工业时代出现的自动化机械也让人们设计更强大的计算装置做好了准备。
1623年,德国天文学家威廉·希卡德(Wihelm Schickard)制造了一个非常复杂的钟,这种钟可以进行六位数以内的加减法,并且通过钟声输出答案。很可惜这个精妙的机械装置在一次火灾中焚毁,而希卡德本人在1635年死于鼠疫,这一机器便只有历史记载,而无人知其本来面目。而另外一个名气更大的大家发明的机械装置就幸运得多,他是法国神学家、数学家、物理学家、发明家、哲学学者,布莱斯·帕斯卡(Blaise Pascal),帕斯卡青史留名主要是在于他澄清了压强的概念,时至今日,帕斯卡也是压强的单位名称。而在计算机领域,帕斯卡则以滚轮式加法器而闻名。当帕斯卡还是个少年的时候,他的父亲在法国鲁昂地区担任税务官,繁重的计算工作造成了颇大的压力。为了减轻父亲的负担,帕斯卡就发明了一种机械装置,可以进行两个数字的加减。他总共造了20台滚轮式加法器,其中9个留存至今。

随着技术的进步,计算的概念也逐步从加减法扩展到了乘除法。最早提出这一概念的是牛顿一生之敌——莱布尼茨。但是莱布尼茨没能制造出乘除法机械计算器,这一想法直到1820年左右才由法国发明家、企业家查尔斯·泽维尔·托马斯·德·科尔马(Charles Xavier Thomas de Colmar)实现。自此,机械式计算器总算是具备了专门的商业价值,能够进行四则运算。托马斯式机械计算器成为历史上第一个投入商业使用的机械式计算器。
但是莱布尼茨的另一个“小想法”却真正地影响到了后续的历史,他设计了一种完全不同的数学系统,在中国古籍《易经》的启发之下,他将“阳爻”与“阴爻”诠释为1和0,并提出了一种数数的方式:
0
1
10
11
100
101
110
111
1000
1001
……
简单点说,就是将传统的“逢十进一位”的数数方法改为“逢二进一位”,这就是现代计算机的数学——二进制,虽然莱布尼茨建立二进制数学体系的本意是为了巩固自己的神学观点,但是在客观上,他为后来的计算机发展奠定了数学基础。
程序的雏形
虽然托马斯式机械计算器出现在19世纪,但是除了它没法搞定小数点、有限的数据存储和少数计算(如开平方)之外,其实能做的事情和现代的普通型电子计算器差不太多,只是速度上有区别。

计算器我们都知道,叭叭叭一顿输入,按等号得到(或者不能得到)一个计算结果。比如要计算一元二次方程的,每次我们都得手动输入
,有没有什么办法,我们只需要输入三个数字,计算器就可以自己进行求解而不用再将算式重新敲一遍呢?有。部分可编程计算器可以实现。
所以这个问题的核心就是面对一些比较重复机械的动作的时候,我们能不能想个办法让这些计算装置自己执行一整套动作?
这就是程序的概念。
最早的程序形态是利用打孔卡片控制织布机。1804年,法国人约瑟夫·玛丽·雅卡尔发明了雅卡尔提花机,这种织机的特点是可以使用打孔卡片控制织出什么样花色的布来,当打孔卡片送入雅卡尔提花机的时候,一系列控制针会穿过卡片上的打孔区域,与之对应的控制臂就会控制织机上纬线的编制方式,当整张卡片走完,一张完整的花布也就出来了。这种提花机的效率是传统提花机的25倍。
1889年,打孔卡片计算设备在大洋彼岸的美国也派上了用场。
对于一个国家而言,人口数据是非常重要的基础数据,为了应对即将开始的美国人口普查,美国统计学家赫尔曼·霍尔瑞斯(Herman Hollerith)发明了穿孔卡片制表系统,围绕这一技术,霍尔瑞斯创立了制表机公司(Tabulating Machine Company),后来这家公司被金融大亨弗林特收购,更名为CTR(Computing Tabulating Recording,计算制表记录)公司,之后的1924年,托马斯·沃特森(Thomas Watson)将CTR更名为“国际商用机器公司”——IBM。
计算机是一个非常典型的实践走在理论前面的学科。到20世纪初期的时候,计算机已经发展了几百年,实用的机械式计算器、打孔纸带作为一种编程方式早就出现。但是计算机的理论却尚未建立。
所幸,一个天才打下了坚实的基础。
图灵机
需要说明的是,图灵机(Turing Machine)不是一种具体的、实际存在的机器,它是一种抽象的数学模型——要不怎么说它是计算机的“理论”呢。
图灵机的抽象描述是一堆非常拗口、难以理解但是精确简练的数学符号,用来科普恐怕是不合适,所以,我们用形象化的语言来描述图灵机:

上图是根据图灵机的原理做出来的一个示意模型——当然,肯定不可能做到100%还原。
一个理论上的图灵机包括下面这些元素:
- 一条无限长的纸带。要不怎么说模型不可能做到100%还原呢。这条纸带上被分成了一个个小格子。
- 一个字符表。字符表规定了纸带上允许出现的内容的范围。字符表可以是0、1,也可以是♥、♠、♦、♣,但是总归会有一个特殊的字符——空白。
- 一个读写头。读写头卡在纸带上,可以阅读纸带的内容,也可以向纸带上写入字符表内的字符。
- 一个状态寄存器,这个东西的作用是追踪机器在每一步计算过程中的状态。当状态从运行变为终止的时候,运算结束,机器停机。
- 一个有限的指令表,它记录着读写头在特定状态下应该执行的行为,比如:“当位于任意格上,格内为1,则向下移动一格,写入0”这样的指令。
一个抽象的图灵机结构大致如下:

这就是所有当代计算机的核心理论基础。一切我们在现在的计算机上能够搞定的问题——不论是用Photoshop画图,还是玩游戏,它们都是由海量的数据计算支撑起来的,并且这些问题都具备可计算性,理论上,一台现代的计算机能够做的事情,最原始的纸带式图灵机也能做,只是效率上有区别而已。如果某个计算工具可以完整地模拟一台图灵机的所有功能,那么这个工具就被称为“图灵完备”。
这里也就可以回答一个很有趣的问题:计算器和计算机的区别在哪里?我见过一个非常简练的回答:是否具备图灵完备性。现代计算机是图灵完备的,在上面随便跑一个图灵完备的编程语言都可以完全模拟图灵机能做到的全部功能,但是计算器——多数简单计算器和函数科学计算器都不是图灵完备的,它们不具备对控制读写头的程序库,只能计算指定算式的结果,而无法规定:当遇到某某情况的时候应当怎么执行,否则又应当怎么执行。在函数计算器的计算过程中,过程控制是由操作者来执行的。
而多数可编程计算器搭载的编程语言就是图灵完备的,这类计算器本质上和计算机没有区别,只是效率不同,计算机能干的计算器一样能干,甚至包括光线追踪算法,目前已经有人通过德州仪器的TI-BASIC语言实现了光线追踪算法,只是效率非常低下,一张简单的低分辨率图像渲染要花费好几个小时,而同等的负载丢给RTX显卡可以实时出图。
阿兰·图灵提出图灵机的灵感来源,正是查尔斯·巴贝奇发明的差分机。在巴贝奇和阿达的合作下,差分机被认为是第一种通用计算设备。上面提到的雅卡尔提花机、用于美国人口普查的穿孔制表机,虽然都属于可编程计算设备,但是它们能处理的程序是相对单一的,比如提花机的打孔卡片只能用于控制编织出什么样花纹的布,而无法用于编写一个求解方程组的程序。“通用计算设备”则不同了,它可以实现多种多样的功能,可以用于解方程组,也可以用于数据统计,一切都取决于程序如何设计。
1836年,雅卡尔去世两年后,英国数学家查尔斯·巴贝奇(Charles Babbage)制造了著名的差分机,和以往的机械式计算器不同,差分机使用打孔纸带来控制差分机的运作。他的助手是英国著名诗人乔治·戈登·拜伦的女儿阿达·洛夫莱斯(Ada Lovelace),阿达设计了一条打孔纸带,这条纸带可以控制巴贝奇的差分机进行伯努利方程的求解。因此,阿达被称为“世界上第一位程序员”,或者“程序员之母”。为了纪念阿达的贡献,后来美国国防部创建的一种程序语言就名为“Ada”。

巴贝奇的一生是比较潦倒的。他花费巨大精力设计的差分机并没有得到世人的认可,英国政府也终止了对他的资助,最终在贫困中离开人世。而在他的成果的基础上发展出计算机最重要的基础理论的阿兰·图灵也因为自己的性取向问题被定罪,最终吃下了带有毒药的苹果自杀。
先驱
巴贝奇的失败很大程度上是因为机械式计算设备的天生不足——误差。
学过机械的人都知道,机械加工,就算是在今天,都不可能做到100%没有误差。在精度要求非常高的机械式计算设备上,随着计算规模的放大,精度的要求也会水涨船高,理论上,复杂度扩大十倍,就要求每一个零部件的加工精度小数点后多一位。而巴贝奇的分析机拥有多达27000个零件,并且都是超高精度的零件,这在今天都是一个成本无从想象的怪物——一辆汽车的零件总数不超过20000,并且其中大多数都没有那么高的精度要求。上图所示的差分机二号是伦敦科学博物馆在1991年使用数控加工技术完成的,最终的成品证明了巴贝奇理论的正确性。但是数控加工的精度同样也是19世纪无法达到的。这就意味着巴贝奇在当时设计了一个很有可能不具备可实现性的机械装置。
而如果我们对计算的要求进一步扩大呢?比如,我们要用计算机来模拟一场核爆炸?这样的计算要求会对机械式计算机提出难以想象的复杂度要求,最终会使得整个系统的加工精度要求达到今天的数控加工技术都无法实现的地步,庞大的系统的能耗也会是一个天文数字。
幸亏,我们有了各种电子设备。电子设备可以在有限的复杂度和能耗基础上实现比机械计算设备更好的性能。
1930年代到1940年代,战争催生了海量的计算要求,其中最复杂的便是弹道计算。军事研究部门开始使用电子管来代替齿轮和杠杆,第一批电子计算设备开始出现。最早的电子计算设备属于模拟计算设备,比如输入一个2V、一个4V,输出6V,完成一个加法计算。但是,模拟式电子计算机普遍不具备可编程能力,要换一个功能就得重新设计、装配一台新机器。而此时的数字式电子计算机……更菜。
但是数字式电子计算机仍然在缓慢地发展当中。图灵在自己的模型当中虽然没有规定字符表具体应当是哪些状态,但是人们很快便意识到:当年莱布尼茨为了自己的上帝发明的那套数学体系用在数字式电子计算机上竟然异常合适——因为它简单。在二进制数学体系当中,只有0和1两种状态,在机电系统当中,可以用关和开、低电平和高电平、磁系统的N级和S级翻转、光系统的短反射和长反射、打孔卡片的打孔与未打孔等等很简单的对比来实现,更多的进制系统不是不可行,但是那就意味着需要更精确的状态控制。
我们举一个很简单的例子——我们用若干个灯泡来显示数字。如果是二进制的话,很简单,灯泡的开和关就可以;而如果是三进制的话,这就意味着灯泡除了开和关之外还得增加另一种状态,比如不同的颜色、不同的亮度之类,但是这无疑会使系统的复杂度增加。非二进制的计算机系统并非没人尝试过,20世纪70年代,苏联莫斯科国立大学曾经设计过一种三进制计算机,命名为“Сетунь”系列,但是如各位所见,三进制计算机因为工程上的不可行性没有发展起来,今天,几乎所有的计算机都以二进制方式运行。
关于哪个才是世界上第一台电子计算机,绝大多数教材、科普书都会告诉你:是1946年的“埃尼阿克”(ENIAC,Electronic Numerical Integrator And Computer,电子数值积分计算机)。但是很可惜,并不是。ENIAC是第一台通用电子计算机,真正的第一台计算机是1937年的阿塔纳索夫贝瑞计算机——Atanasoff–Berry Computer,简称“ABC”。

ABC是爱荷华州立大学的博士生约翰·文森特·阿塔纳索夫和克利福德·贝瑞。这台机器是一台专用计算机,其功能只有一个——解线性方程组,从设计上,这台机器可以求解有多达29个未知数的方程组,而且速度非常快。但是除了这个之外的事情,它一个都干不了。
二战爆发后,阿塔纳索夫调离大学,而校方也没有对这台计算机有太多的重视,这台一直摆在教学楼地下室的机器也随着学校将地下室改建为教室而被拆毁,除了几个转轮之外,所有的零件都被丢弃。这也使得阿塔纳索夫和他的ABC在计算机历史上一直没能得到合理的重视。直到20世纪60年代,在他的不断宣传下,ABC才被确立了“历史上第一台电子数字计算机”的地位。随后不久,ENIAC的专利权因其发明人之一约翰·莫克利参考了ABC的设计而被撤销,ABC的地位得到了公众的肯定。随着科技考古的推进,人们发现了更多在ENIAC之前的计算机先驱:
- 1941年公布的楚泽Z3计算机,这是一台二进制通用计算机,但是它采用的是机电技术而非电子技术,可以使用打孔纸带编程,但是没有逻辑分支,从设计者角度看,它不是图灵完备的,但是在1998年,经过深入的研究,研究人员提出了一种非常Hacking的算法,使其具备了图灵完备的特性。
- 1943年的英国的巨人计算机,是一台电子数字计算机,并且可以重编程,但是其设计目的只用于密码破解。
- 1944年的Mark Ⅰ计算机,使用继电器执行计算,打孔纸带编程,没有分支结构。
但是这并不意味着ENIAC的历史地位被否定。尽管它不再是第一台电子数字计算机,但是它仍然是世界上第一台图灵完备的通用电子计算机。
ENIAC
1943年仍然是炮火纷飞的一年。
开炮从来都是个技术活,由于目前能做到指哪打哪的激光炮还停留在试验阶段,这个星球上的所有炮兵在大多数情况下都采用间接射击,让炮弹飞出一道弧线来攻击目标。
理论上,如果忽略空气阻力,炮弹在空中的飞行轨迹(也就是“弹道”)将是一个理想的抛物线,这个计算非常简单,但是很可惜——空气阻力在炮弹的速度面前不能忽略,炮弹的弹道是一道非对称的弧线,计算非常复杂。并且随着不同的温度、不同的气压、不同的海拔,弹道都不一样。
为了能让炮兵打得准,火炮就得随附一张表,说明什么样的环境下、打什么距离、什么高程的目标,得用多大的装药量、得拉多大的射角,这张表就是火炮的射表。火炮的射表编制比较基本的做法是先算,然后将装备拉到对应的环境下实际射击,对射表进行校准。解放军经常将各种装备拉到青藏高原上一顿砰砰砰,除了让对面的印度感受一下火一般的社会主义热情之外,修正各种装备的高原射表也是一个极为重要的目的。
今天,随着技术的进步,弹道计算已经是小菜一碟,火炮计算机体积非常小巧,可以让炮兵计算员随身带着走,反倒是实际射击的操作难度更大;而回到二战期间,情况就正好相反了——工厂在全力生产炮弹和火炮,美国这样的工业大国是炮弹要多少管够,但是计算却受制于时代,显得困难重重。
在这样的背景下,美国陆军找到了宾夕法尼亚大学,委托他们开发一种计算设备,协助军方计算炮弹的弹道。1943年7月,这项秘密工程开始了,代号为“PX项目”,主脑是宾夕法尼亚大学的约翰·莫克利和约翰·埃克特。项目总共耗时三年,到1946年2月14日完工时,世界大战已经结束了。这台机器正式定名为“电子数值积分计算机”,简称“ENIAC”。
虽然战争已经结束,但是这台强大的机器还是折服了美国陆军,7月,美国陆军验收了ENIAC,在陆军弹道研究所(BRL),ENIAC一直服役到1955年。

ENIAC是一个占据了整个房间的庞然大物,占地面积167平方米,重达27吨,耗电量高达150kW,其中拥有17486颗电子管、7200颗二极管、10000个电容,密密麻麻的电线在几十个面板前面缠绕成复杂的蛛网,通过重新插拔这些电线,可以为ENIAC重新编程。
ENIAC在很多地方都和今天的计算机有着巨大的差别。从人机工程上说,为ENIAC“编程”是一个非常艰巨的任务,工程师需要将复杂的任务进行拆解、转化成一个个单步操作、分支和循环,这些通常是在纸上完成的,需要耗费几个星期之久,然后还需要专人将这些结果在操作面板上通过插拔线缆实现出来,在此期间,有六位女士以其特有的耐心和细致成为了ENIAC的御用程序员,她们后来都入选国际科技名人堂。从设计上说,ENIAC不具备程序存储能力,想要计算任何东西都得重新插线,现场“编程”,并且ENIAC还采用了十进制,而非今天的计算机广泛采用的二进制。为了处理十进制数字,每一位数字需要用到多达36个电子管,通过脉冲计数来实现加减法运算,多个加法器通过一个乘法控制器组合,形成一个乘法单元,这样的组合每秒钟可以处理5000次计算。在今天看来,它的性能甚至比不上一个很普通的可编程计算器,但是在当时,这是划时代的发明,人们给了ENIAC一个非常夸张的名字——“巨脑”。
但是ENIAC的缺陷很明显,当时的顶尖大脑已经捕捉到了这些缺陷。虽然ENIAC的主要委托方是美国陆军,主要目的是算弹道,但是当时另一帮更强势的家伙抢先让ENIAC算了一个极为复杂的东西——氢弹的数据,这是ENIAC实际投入使用后第一个实际的计算任务。这个任务的甲方代表是洛斯阿拉莫斯国家实验室的氢弹研究员——约翰·冯·诺依曼(John von Neumann)。和图灵一样,他也是计算机基本原理的奠基人之一,不过区别在于图灵提供的是纯理论模型,而诺依曼提出的则是一种具体的、可实现的结构,我们今天所有的计算机——小至可编程计算器、智能手表和手机,中至笔记本和台式PC,大至超级计算机——它们都遵从冯·诺依曼结构——或者说叫普林斯顿结构。
诺依曼结构
ENIAC落后的“编程”方式意味着一个问题:它的“程序”无法存储。当一个计算工作完成,操作员开始拔下面板上的插头的时候,这就意味着现有的“程序”被破坏了。
冯·诺依曼敢跑去陆军弹道研究所抢ENIAC用,除了他参与的是级别更高的氢弹项目,另一个原因是他也是ENIAC的早期参与者之一。1943年,ENIAC计划开始。而在1944年,也就是ENIAC项目开始的第二年,冯·诺依曼作为ENIAC技术团队的顾问就意识到了ENIAC存在的这一缺陷。他于是构思了一种新的机器,命名为EDVAC(Electronic Discrete Variable Automatic Computer,离散变量自动电子计算机)。1945年6月,冯·诺依曼发布了一份长达101页的报告,题为《EDVAC报告书的第一份草案》,详细阐述了EDVAC的系统设计思路。这一思路后来被称为冯·诺依曼结构。
不过,和“仓颉造字”、“第一台电子计算机”这样的争论一样,冯·诺依曼结构的命名也存在争议,EDVAC报告当中的一些思路早在冯·诺依曼发表报告之前就已经存在了,其中最早的可以追溯到1936年康拉德·楚泽的专利文件。但是作为第一个明确在正式报告中提出、并且实际指导了实物计算机开发的人,冯·诺依曼在计算机发展史上的地位还是极为重要的。
冯·诺依曼结构具备以下的特征:
- 整机由运算器、控制器、存储器、输入输出设备组成
- 运算单元为计算机的核心
- 程序与计算所需的数据都保存在存储器当中
- 存储器是一系列按地址访问、线性编址的存储单元
- 控制器通过读取程序中的指令流,控制运算器对数据进行读取、计算、输出操作
- 指令由操作码与地址码组成,操作码告诉运算器做什么,地址码告诉运算器哪里能够找到所需的数据
- 数据以二进制进行编码
用一张图来描述冯·诺依曼结构:

在实际应用当中,控制器与运算器常常是合在一个元器件上的,这个元器件就是中央处理器——Central Processing Unit,或者叫CPU。
假如我们需要使用冯诺依曼结构的计算机完成一个简单的两个整数相加的计算,机器的计算流程是这样的:
- 首先,由输入设备写入程序,并存储在存储器中的0号地址。程序的内容是:调出存储器1号地址的数据与2号地址的数据,将这两个数据用运算器中的加法器相加,将得到的结果写回存储器的3号地址,随后3号地址的数据传递至输出设备。
- 随后,输入设备在1号地址当中写入
0010
,在2号地址中写入0011
,也就是二进制的2和3。 - 控制器阅读0号地址,发现这是一段带有操作码(相加)和地址码(1、2、3号地址)的程序,便命令运算器执行运算。
- 运算器将两个地址内的数据相加,得到结果
0101
,也就是二进制的5,将这个结果保存到存储器的3号地址。 - 3号地址的数据发送到输出设备,呈献给用户。
可以想象,和纯理论的图灵机不同,冯诺依曼结构是一种非常实际的理论模型,事实上,就在ENIAC完工后没多久,遵从冯·诺依曼结构的EDVAC就真的开工建造了。在1940年代末到1950年代初,除了宾夕法尼亚大学的EDVAC,还有NIST(美国国家标准技术研究所)的SEAC和SWAC、NPL(英国国家物理实验室)的PilotACE、麻省理工的Whirlwind等等一系列冯诺依曼结构的计算机完工。
虽然冯诺依曼结构是目前计算机结构的绝对主流,它兼顾了性能、通用性、灵活性,我们今天的电脑能够执行如此广泛的任务并且成为当今科学、工程、社会运转的基石,很大程度上是因为冯诺依曼结构的绝佳弹性。但是冯诺依曼结构也并非完美无缺。1977年,在图灵奖颁奖典礼上,获奖者约翰·巴克斯(John Warner Backus)[1]提出了一个概念——冯诺依曼瓶颈。他指出,在冯诺依曼结构中,大量的操作被浪费于数据在运算器和存储器之间的搬运,这将是未来冯诺依曼计算机的软肋。巴克斯的预测分毫不差。在2020年代的今天,世界上的两大处理器巨头——Intel和AMD仍然在为如何高效地从内存当中获取数据而头疼不已。为此,CPU的设计中出现了多级缓存机制,同时,CPU也会通过分支预测技术提前将数据准备好,这在某种程度上缓解了冯诺依曼瓶颈的影响,但是却也带来了新的威胁[2]。其实冯诺依曼瓶颈在一般的PC上表现得还不算明显,在真正的高性能电脑——超级计算机上则表现得非常明显,一台超算需要庞大的电能供应,而这其中差不多有一多半被用于在存储器和运算器之间搬运数据。
因此,已经有新的结构开始投入实践了,这就是存算一体结构,不过,这种全新的结构离商业应用还有一段距离。
自此,计算机的理论基础就基本确定下来了。而如何实现这些基础理论——也就是计算机的技术,则开始了半个多世纪的飞速进步的历程。
电子管、晶体管与集成电路
早期的计算机,包括ENIAC、EDVAC、Mark Ⅰ、巨像等,采用的核心元器件是发明于1904年的电子管(又叫真空管)。

真空管的发明很有些无心插柳柳成荫的意思,它最早起源于“发明大王”、黑心资本家托马斯·爱迪生。在他最著名的改良白炽灯的事业当中,他发现在灯丝旁边放一个金属板,似乎金属板上能检测出电流来,而如果将电源极性反转,电流又消失了。他将这个发现申请了个专利,也就不了了之。但是,这个特性却在1904年引起了电气工程师约翰·弗莱明(John Fleming)的注意。他利用爱迪生专利中描述的电源只能单向接通的特性,改良出了只允许电流单向导通的二极管。1907年,美国工程师李·德弗雷斯特(Lee De Forest)在二极管当中增加了一个电极,通过这个电极上的电势可以控制电子的流量。这就是可以用于信号放大的三极管。
请记住这两个重要的电子元器件:可以单向导通电流的二极管、可以放大电流的三极管。今天我们的CPU里仍然是由无数个这样简单的元器件组合而成的,只是其核心原理不再是电子管,而是半导体技术了。所以,关于真空二极管如何实现单向电流导通和真空三极管如何实现电流放大,这里就不展开讲了。
晶体管的核心材料是“半导体”(Semi-conductor)。我们都知道,在元素周期表上的各种单质当中,银、铜、铁等金属材料具备很好的导电性,它们被称为“导体”,而碳的单质金刚石则几乎不导电,是很经典的绝缘体。如果我们将眼光从碳下移,便是另两个Ⅳ族元素——硅和锗。它们便是半导体行业最常见的材料,特别是硅。
高纯度的硅单质和金刚石一样,导电性非常差,因此也被视为绝缘体。但是高纯硅有一个很有趣的特点——如果在其中添加少量的其他元素(这在半导体行业里被称为“掺杂”),便会大幅度改变其导电性,这就使得硅的导电性处于导电和不导电之间左右摇摆的状态,因此它被称为“半导体”。
硅的这一有趣性质其实很好理解。导体之所以能导电,是因为其中有大量的、可以在材料之间自由游走的电子,它们在外加电场的作用下从阴极跑到阳极,从而使材料导电。而在高纯度的硅单质当中,所有的电子都被紧紧地束缚住,与周围的4个硅原子形成共价键,没办法随处乱跑,但是,如果我们在规整的硅晶格当中加入一些Ⅲ族或者Ⅴ族的元素,情况就不一样了——加入Ⅴ族元素,比如磷,它的每个原子都会带来额外的一个电子,大幅提高了硅的导电性。由于它相较于纯硅带有更多的电子,而电子呈现电负性,因此被称为N型半导体。而如果加入Ⅲ族元素,如硼,它会破坏原本硅晶体当中一个萝卜一个坑的电子,使得某些原本应当有电子的地方没了电子,这就形成了一个“空穴”,这里出现了一个空穴,别的地方原本安分守己、好好呆着的电子现在只要稍有外加电场的风吹草动,就会跳到这个空穴里,而原本它呆的位置又形成了一个新的空穴,等着别的电子往里跳。从宏观上看,仿佛是空穴从电源的阴极往阳极跑,这种半导体被称为P型半导体。
而当我们将一小块纯硅,一边做P型掺杂,一边做N型掺杂,有趣的事情就来了:
- 如果我们将电源负极接到N型一边,正极接到P型一边: 电子带负电,和负极不共戴天,一窝蜂就往正极那边跑,跑到正极那边一看好家伙,一马平川,很多空穴,跑起来丝毫没有阻力,这时,这一小块半导体材料呈现为导通状态。
- 如果反过来,将电源负极接到P型一边,正极接到N型一边: 所有电子全涌向N型一侧,但是N型本来就电子偏多,一下子全堵死了,谁都别想跑。这时,这块材料就呈现截断的状态。
——当然,这是一种高度简略的说法,实际上,PN半导体的工作机制比这要复杂。
OK,“不经意间”,我们做出了和真空二极管一模一样功能的东西,如果我们将半导体材料分三块掺杂,就可以实现和真空三极管一样的功能,但是,看看这俩的体积,真空管就是一个大号灯泡,而晶体二极管,只有米粒大小;再看能耗,真空管只要运行,就得像白炽灯一样始终为灯丝通电,而这种低效率的用电方式只是为了加热灯丝,让其中的电子能飞出来,但是晶体二极管,每一丝电压都在直接操作电子,能耗极低。
晶体管开始大规模应用之后,很快,电子计算机行业开始使用晶体管来替代电子管,第二代计算机——晶体管计算机面世了。普遍认为1953年11月英国曼彻斯特大学启用的计算机是世界上第一台投入实际运行的晶体管计算机。不过,它和其他一些早期的晶体管计算机都存在一个问题——满天飞的Bug。1955年,晶体管计算机的平均无故障运行时间(MTBF)只有一个半小时。
晶体管让计算机的体积大幅缩小,那么,还有没有进一步缩小的可能性呢?
晶体管的发明人之一是威廉·肖克利(William Shockley)。1955年,他在硅谷创办了肖克利半导体实验室。1956年,他听了一个名叫罗伯特·诺伊斯(Robert Noyce)年轻人作的报告,深受震撼,主动邀请他加入自己的半导体实验室。
但是肖克利虽然是物理学和电子电气领域的一代宗师,但是搞管理……不太行。肖克利半导体实验室完全就是他的一言堂,而诺伊斯……这位老哥的个性只能说放荡不羁爱自由,12岁自研滑翔机,差点摔死;自己动手改装电动摩托雪橇,开着去送报纸挣零花钱;上大学时宿舍开Party他跑到隔壁农场偷了只猪,理论上,那年头在爱荷华州,这个罪名够上绞刑架的,不过法官也觉得为了头猪就弄死一个格林奈尔学院的高材生实在离了个大谱,再加上有教授的力保,于是赔了点钱了事,但是校方也觉得作为格林奈尔学院的高材生跑去偷猪实在离了个大谱,反手拍出一个休学1年的处罚。就这么一位老哥,在暴躁老板肖克利的手下干活感觉无比憋屈,再加上一言堂老板的压制下,整个公司在两年内毫无进展,于是和其他七位集体辞职,跑去创办了自己的公司。暴躁老板肖克利抱怨这八位为“叛徒八人组”。但是肖克利的公司也因此一蹶不振,被转手两次之后,1968年彻底破产。而叛徒八人组创办的公司仙童半导体则大获成功,成为了“硅谷历史的见证者”、“硅谷的西点军校”,几乎所有半导体公司都可以在这家公司找到自己的根。后来,仙童半导体的投资方——仙童摄影器材公司回购该公司,并直接干预公司运营,大量人员外流,又创办了自己的新公司,其中也包括诺伊斯,他二次创业再次大获成功,并且至今仍然是半导体第一巨头——Intel。
“Intel”这个名字是两个单词的重组——Integrated 和Electronics,Intel之所以有胆量将“Integrated”放在名字当中,是因为诺伊斯便是集成电路的发明人之一。他在雕刻后的硅基片基础上通过金属和金属氧化物的掺杂,形成与硅基片深度集成的晶体管器件(称为金属氧化物半导体场效应管,MOSFET),然后通过金属线将这些直接在硅基片上雕刻、掺杂得到的晶体管按照一定的方法连接起来,再用树脂壳进行保护(学名:封装),形成了集成度非常高的电路。传统上用导线与晶体管焊接的方法铺一面墙的大型电路,现在只要指甲盖大小的集成电路就能实现相当的功能,其中包含数百个MOSFET晶体管。
顺便说一下,几乎与诺伊斯同时研制成功集成电路的是杰克·基尔比(Jack Kilby),他工作的公司是今天的另一个半导体顶级巨头、模拟芯片领域的绝对霸主、计算器领域的北美诸侯,德州仪器。
集成电路让计算机从“小型化”开始进入“微型化”的阶段,到了1970年代晚期,美国国防部下属的国防高级计划研究所(DARPA)启动了一项全国计划,名为“VLSI”,是“Very Large Scale Integration”(超大规模集成电路)的缩写。这是一个非常庞大的计划,并且对后世影响深远。我们今天几乎所有的芯片都是从“晶圆”开始制造的,这便是VLSI计划的遗产。VLSI还诞生了GIS(地理信息系统)、CG(计算机图形学)、CAD(计算机辅助设计)、RISC(精简指令集)、SUN公司等等。在VLSI计划启动前,处理器只能集成大约几百个晶体管,而VLSI计划让一片芯片可以集成数万乃至数十万个晶体管。随着制程的进步,今天一个CPU包含的晶体管数量已经极为惊人——苹果的A14芯片包含多达118亿个晶体管。使用电子显微镜观看现代的处理器,里面是密密麻麻的导线、层层叠叠的晶体管,完全是一个充满科幻感的巨型数据工厂。

那么,这座超级数据工厂是如何工作的呢?我们以后再说。