计算机的全名应该叫“通用电子数字计算机”(General-Purpose Electronic Digital Computer)。这个名称说明了计算机的许多性质。
“通用”说明计算机不是一种专用设备,我们可以把它与电话做一个比较。电话只能作为一种通讯工具,别无他用。而计算机不仅可以作为计算根据,只要有合适的软件,它也可以作为通讯工具使用,还能有无穷无尽的其他用途。
“电子”是计算机硬件实现的物理基础,计算机是非常复杂的电子设备,计算机的运行最终都是通过电子电路中的电流、电位等实现的。
“数字”化是计算机一切处理工作的信息表示基础。在计算机里,一切信息都是采用数字化的形式表示的,无论它原本是什么。无论是数值、文字,还是图形、声音等等,在计算机里都统一到二进制的数字化表示上。数字化是计算机的一种基本特征,也是计算机通用性的一个重要基础。
“计算机”意味着这是一种能够做计算的机器。计算机能够完成的基本动作不过就是数的加减乘除一类非常简单的计算动作。但是,当它在程序的指挥下,以电子的速度,在一瞬间完成了数以万亿计的基本动作时,就可能完成了某种很重大的事情。我们在计算机的外部看到的是这些动作的综合效果。从这个意义上看,计算机本身并没有多少了不起的东西,唯一了不起的就是它能按照指挥行事,做得快。实际上,更了不起的东西是程序、是软件,每个程序或软件都是特殊的,针对面临的问题专门设计实现的东西。
目前对计算机的另一种流行称呼是“电脑”,这是从香港台湾转播开来的一个译名,目前使用很广泛。实际上这个名称并不合适,很容易把人的理解引到错误的方向(或许这正是一些人有意或无意的目标)。我们从来不把原始人用于打树上果子的木棍称为“木手”,也不把火车称为“铁脚”。因为无论是木棍还是火车,虽然各有其专门用途方面的力量,各有其“长处”,但它们都只能在人手脚功能中很窄的一个方面有用,与手脚功能的普适性是根本无法相提并论的。同样,计算机能帮助人完成的也仅仅是那些能够转化为计算问题的事项,与人脑的作用范围和能力相比,计算机的应用范围也是小巫见大巫了。
计算机的核心处理部件是CPU(Central Processing Unit,中央处理器)。目前各类计算机的CPU都是采用半导体集成电路技术制造的,它虽然不大,但其内部结构却极端复杂。CPU的基础材料是一块不到指甲盖大小的硅片,通过复杂的工艺,人们在这样的硅片上制造了数以百万、千万计的微小半导体元件。从功能看,CPU能够执行一组操作,例如取得一个数据,由一个或几个数据计算出另一个结果(如做加减乘除等),送出一个数据等。与每个动作相对应的是一条指令,CPU接收到一条指令就去做对应的动作。一系列的指令就形成了一个程序,可能使CPU完成一系列动作,从而完成一件复杂的工作。
在计算机诞生之时,指挥CPU完成工作的程序还放在计算机之外,通常表现为一叠打了孔的卡片。计算机在工作中自动地一张张读卡片,读一张就去完成一个动作。实际读卡片的事由一台读卡机完成(有趣的是,IBM就是制造读卡机起家的)。采用这种方式,计算机的工作速度必然要受到机械式读卡机的限制,不可能很快。
美国数学家冯·诺依曼最早看到问题的症结,据此提出了著名的“存储程序控制原理”,从而导致现代意义下的计算机诞生了。
计算机的中心部件,除了CPU之外,最主要是一个内部存储器。在计算机诞生之时,这个存储器只是为了保存正在被处理的数据,CPU在执行指令时到存储器里把有关的数据提取出来,再把计算得到的结果存回到存储器去。冯·诺依曼提出的新方案是:应该把程序也存储在存储器里,让CPU自己负责从存储器里提取指令,执行指令,循环式地执行这两个动作。这样,计算机在执行程序的过程中,就可以完全摆脱外界的拖累,以自己可能的速度(电子的速度)自动地运行。这种基本思想就是“存储程序控制原理”,按照这种原理构造出来的计算机就是“存储程序控制计算机”,也被称做“冯·诺依曼计算机”。
到目前为止,所有主流计算机都是这种计算机,这里讨论的都是这种计算机。(随着对计算过程和计算机研究的深化,人们也认识到冯·诺依曼计算机的一些缺点,开展了许多目的在于探索其他计算机模式的研究工作。但是到目前为止,这些工作的成果还远未达到制造出在性能、价格、通用性、自然易用等方面能够与冯·诺依曼计算机匹敌的信息处理设备的程度。这里我们就不打算进一步介绍这些方面的情况了。)
从CPU抽象动作的层次看,计算机的执行过程非常简单,是一个两步动作的简单循环(图1.5),称为CPU基本执行循环。CPU每次从存储器取出要求它执行的下一条指令,然后就按照这条指令,完成对应动作,循环往复,直到程序执行完毕(遇到一条要求CPU停止工作的指令),或者永无休止地工作下去。
CPU是一个绝对听话、服从指挥的服务生,它每时每刻都绝对按照命令行事,程序叫它做什么,它就做什么。CPU能完成的基本动作并不多,通常一个CPU能够执行的指令大约有几十种到一二百种。另一方面,实际社会各个领域里,社会生活的各个方面需要应用计算机情况则是千差万别、错综复杂。这样简单的计算机如何能应付如此缤纷繁杂的社会需求呢?答案实际上很简单:程序。通过不同指令的各种适当排列,人可以写出的程序数目是没有穷尽的。这就像英文字母只有26个,而用英文写的书信、文章、诗歌、剧作、小说却可以无穷地多一样。计算机从原理上看并不复杂,正是五彩缤纷的程序使计算机能够满足社会的无穷无尽的需求。
计算机的这种工作原理带来两方面的效果。一方面,计算机具有通用性,一种(或者不多的几种)计算机就能够满足整个社会的需求,这使得人们可以采用大工业生产的方式进行生产,提高生产效率,增强计算机性能,降低成本。这使得计算机变得越来越便宜,与此同时性能却越来越强。另一方面,通过运行不同的程序,不同的计算机,或者同一台计算机在不同的时刻可以表现为不同的专用信息处理机器,例如计算器、文字处理器、记事本、资料信息浏览检索机器、帐本处理机器、设计图版、游戏机等等。甚至同一台计算机在一个时刻同时表现为多种不同的信息处理机器(只要在这台计算机中同时运行着多个不同的程序)。正是这种通用性和专用性的完美统一,使得计算机成为人类走向信息时代过程中最锐利的一件武器。
我们说CPU并不复杂,这是从原理上讲的。而今天最先进的CPU又是极端复杂的东西,甚至可能是人类有史以来制造出的最复杂产品。产生这种情况的原因很多,这里列举其中最重要的两个:
第一,人们对CPU性能的要求越来越高,因为需要由计算机完成的工作越来越复杂(现实社会总是不断提出新问题,要求用计算机解决。一个复杂问题解决了,人们就看到了另一个更复杂的问题解决的希望,因而会去努力),完成一项工作需要执行的指令数越来越多。一个永远也不能克服的困难是,计算机执行指令需要时间(请读者记住计算机的这个本质性的缺点,这对于理解计算机是极端重要的)。虽然目前计算机执行指令的速度已经快得惊人(每秒钟可以执行数以亿计的指令),对于人希望用计算机解决的最复杂任务而言,CPU的速度将永远是太慢了。为提高CPU在实际计算中的速度,人们开发了许多巧妙技术,而实现这些技术就大大地增加CPU本身的复杂性。
第二,需要用计算机处理的数据的情况越来越多。早期的计算机主要是处理数值性数据,例如整数、实数(在计算机里用一种称为“浮点数”的方式表示),CPU也就只需要围绕与这些数据类型有关的计算过程,提供一批指令。随着计算机的发展,新的应用需求层出不穷。例如,当计算机被广泛用于图形图像声音信号的处理时,虽然从理论上说CPU可以不改变(原有指令足以完成工作,只要写出相应的程序),但人们也发现,增加一些新的特殊指令,对这些特殊数据形式的处理就能更有效。新指令的增加能大大提高CPU处理特殊数据形式的效率(有时是必须的,例如为了实时地处理高清晰度的三维动画),由此带来的一个副作用是使CPU变得更加复杂了。
过去人们常说计算机的发展经历了电子管、晶体管、集成电路和大规模集成电路四个阶段,也把以这些方式构造起来的计算机分别称为第一、二、三、四代计算机。今天回头再看,这种说法已经没有太大的意义了。制造计算机的器件变化并不是根本性的(虽然其意义不可低估,例如在降低成本、减小体积方面),这个变化过程不过是人们寻求合适方式制造计算机的一个短暂的摸索阶段,在大约二十年的时间里就已经完成了。从那以后,计算机的基本制造工艺再没有大的变化。而在另一方面,计算机发展史中其他的事件则更重要得多。例如:计算机的小型化和个人计算机的出现,计算机网络的出现和发展,计算机使用形式和出现形式的变化等等(这些都是在大规模集成电路的范围中完成的)。
今天,人们还一直在研究真正新型的计算机,作为与普通计算机具有根本性差异的另类信息处理工具,它们能够发明出来吗?将在什么时候出现?能够具有今天计算机这样的性能价格比、这样的通用性与专用性的完美统一吗?能够取代目前流行的这类电子数字计算机吗?我们正拭目以待。
0与1,高电平与低电平,一切皆源于此,继而升级再可视化、模块化、集成化!
计算机工作原理
。。。这个太复杂了,解释起来长篇大论的。