| 在20世纪计算机领域的所有重大发明当中,恐怕没有哪一项能够像微处理器那样对我们今天的工作和生活产生如此巨大的影响。自从1971年Intel公司的4004芯片问世以来,微处理器的发展不仅帮助人类在科学探索和医疗发现方面取得了令人瞩目的成就,而且极大地提高了生产和工作效率,加快了人们获取信息的速度。作为各种电子设备的核心部件,这些微小的硅片已经融入到人类生活的每一个角落,小到电子手表和移动电话,大到汽车和飞机,几乎随处可以看到微处理器的身影。当然,微处理器最常见的用途是在全球超过三亿台PC机中充当CPU(中央处理器)的角色。
CPU是计算机中承担数据传输和指令执行工作的核心部件。尽管人们现在可以轻易地操纵一台计算机来实现各种操作,不必关心它们在计算机中的实现过程,但实际上微处理器在完成这些操作时采用了非常复杂和高度精密的技术。如果我们能够对它进行一些深入的分析,对于我们了解计算机的工作过程将会大有裨益。
数学运算
听起来似乎有点奇怪,尽管计算机具有高超的计算能力,但是它却只能够识别两个数字:0和1,这种以2为进位单位的数学计算系统称为二进制系统。为了使计算机能够正确地执行指令,人们需要把实际的数据转换成计算机能够识别的二进制数据。对于计算机来说,1和0代表“是”或者“不是”、“正确”或者“错误”。在微处理器的电路中,能够通过晶体管的电子脉冲表示“是”或者1,被晶体管屏蔽掉的电子脉冲表示“不是”或者0。
微处理器收到的每一条指令均来自程序员编写的一系列命令,这些命令通常是由BASIC、COBOL或者C等高级语言编译而成。为了使微处理器能够识别这些命令,计算机必须首先把它们翻译成二进制数据,这项工作由微处理器中的译码器来完成。
在二进制系统中,每一个十进制数字和字母表中的每一个字母都对应一个由一串0和1组成的二进制数据。不同的系统采用不同的方式来构造标准字符集,这些标准字符集由二进制数据代表的字母和数字组成,比如扩充二-十进制交换码(EBCDIC)和美国信息交换标准码(ASCII)为每一个字母指定了一个二进制数据(比如字母M在ASCII中相当于77)。通过这种方式,字母和数字就可以转换成计算机能够识别的二进制数据。
例如,每当你同时按下Shift键和M键时,键盘将把信号传送到计算机的微处理器中,在那里,M被翻译成相当于77的二进制数据,即01001101,这样一来,代表M的电子脉冲就可以方便地传送到微处理器的其它部件当中。
微处理器的构成
CPU由多个部件组成,它们协同工作来实现复杂的计算功能。下面我们将具体讲述CPU的主要组成部件。
地址:地址也是一个数据,计算机使用它来确定某个数据在内存或者磁盘上的位置。在CPU处理数据的过程中,通常使用数据的地址,而不是数据的值来表示正在处理的数据。
总线:由一组导线组成,用来把数据从一个地方传送到另一个地方。计算机的总线称为数据总线或者系统总线,实现数据输入/输出设备、主存储器和CPU之间的数据传送。在CPU之中也包含内部总线,用于CPU内部各个部件之间的数据传送,此外,CPU还包含地址总线,用来连接CPU和计算机中的主存储器。在计算机术语中使用位宽度来区分不同种类的总线,即总线可以同时传送多少位比特的能力。
高速缓存:CPU执行指令的速度通常比计算机中的其它部件要快得多,因此,如果没有高速缓存的话,CPU将不得不花费大量的时间等待数据的到来。高速缓存的数据存取速度比普通内存要快很多。为了进一步提高处理效率,在一些CPU中采用了两级缓存结构:主缓存(L1)和二级缓存(L2),它们的区别在于所处的物理位置。L1缓存通常直接集成在CPU内部,而L2缓存可以位于计算机的主板上,也可以位于CPU的外部辅助芯片中(比如Intel的Pentium
Ⅱ 和Pentium Ⅲ 处理器)。高速缓存用来存储即将执行的指令和相关数据,使传送到CPU的指令流能够跟得上CPU的处理速度,从而大大提高了CPU的处理效率。
时钟频率或速度:时钟速度是指在计算机的每一个内部时钟周期里,CPU所能完成的操作次数,通常用兆赫兹(MHz)来表示,即每秒钟执行的循环次数。完全用CPU的时钟速度来衡量CPU的快慢有时并不准确,由于不同的CPU可能采用了不同的内部结构和不同的指令集,因此,具有相同时钟速度的两个不同种类的CPU有时会具有不同的处理性能。
逻辑门:它是一个由一系列晶体管组成的电路,能够实现布尔逻辑运算(通过对信号的开/关和预定状态进行比较来决定结果是正确还是错误)。逻辑门是执行计算机指令的一个重要部件。
RAM(主存储器):微处理器从辅助存储器,比如硬盘或CD-ROM中读取软件指令,然后把这些指令存放在计算机的主存储器中,等待CPU的访问。
寄存器:是CPU内部用来存放数据的一些小型存储区域。由于每一个寄存器都非常小,因此用来访问寄存器数据时所用的地址可以具有比较少的位数。这使得寄存器的存取速度远远高于普通内存,因为在访问普通内存时,确定一个地址需要二十个比特位的信息。
晶体管:每一个晶体管是微处理器内部电路中的一个三态门,包含相邻两层,一层带正电荷,另一层带负电荷。当一个电子脉冲到达晶体管时,它会根据情况放大这个脉冲(允许它通过并达到下一个晶体管),或者屏蔽掉这个脉冲。
ALU(算术逻辑单元):是CPU内部用来处理算术运算和布尔逻辑运算的部件。布尔操作就是通过比较二进制数值来决定是否让CPU内部电路中的一个脉冲通过某个指定的门电路。逻辑操作通常具有如下形式:如果X为真并且Y为假,那么Z为真。
控制器:
控制器的工作是根据CPU从指令集或者用户输入那里取得的指令,完成下面四种基本操作:
l.取指令: 把即将执行的指令的下一个字的地址传送到地址总线,并且把数据放到指令缓存中的适当位置上。
2.译码:把当前从指令缓存中取到的指令传送到译码器中。
3.执行:在CPU的ALU中对算术和逻辑运算进行初始化操作,并且控制数据流的传送过程。
4.存储:把指令的执行结果存储到适当的寄存器或者内存地址中。
译码器:从指令缓存中取出用机器语言表示的指令,并把它们翻译成ALU能够识别和处理的二进制形式。
FPU(浮点运算单元):某些计算机操作要求处理非整型的数据(比如以十进制形式表示的分数),而ALU并不具备这种能力。因此,在1989年之前,芯片制造商通常会在计算机的主板上增加一个外部的FPU芯片来处理这种比较复杂的操作。Intel
80486(就是通常所说的486)是世界上第一个把FPU集成在CPU内部的微处理器,此后,几乎所有的CPU都采用了同样的做法。在目前人们使用的各种计算机软件中,浮点运算操作通常发生在处理高质量的图形过程中,比如CAD(计算机辅助设计)软件或者3D游戏软件。
指令集:是永久存储在处理器内部结构中的一组机器指令的集合。CPU就是基于自身的物理结构和指令集来理解和执行各种计算机程序,从而实现不同的软件功能。目前主要有两类指令集,分别是CISC(复杂指令集计算机)和RISC(精简指令集计算机)。一个RISC处理器只识别和执行比较少的指令,从而能够获得比较高的执行效率。而且,所有的RISC指令都具有同样的长度,处理起来更加方便和快捷。CISC处理器则不是这样,它的指令长度从8位到120位不等。Intel
X86处理器都采用CISC指令集。
预取单元:是一小块存储器,用来存放从主存储器中取回的指令,等待CPU的执行。预取单元通过对CPU的指令缓存和主存储器进行检查来判断如何处理取回的指令,并且在译码器和控制器进行解码和执行当前指令的时候,决定应当如何进行下一步操作。从而大大减少了CPU用来等待指令的时间。
协同工作
为了进一步了解CPU的这些组成部件是如何协调工作的,我们可以分析一下在Windows
98的启动过程中,当你访问你的用户特征文件时CPU都完成了哪些工作。
1.初始化
首先,计算机在CPU的内部指令集和Windows的内部命令的指导下,完成Win 98启动的初始化过程。然后,当CPU碰到提示用户输入用户名和密码的一组指令时,将显示一个对话框,要求用户输入信息。此时,CPU将一直等待用户输入。如果只存在一个用户特征文件,那么这个文件对应的用户名将出现在对话框中,否则,对话框中将显示最近一次登录的用户名。
2.按键
现在,你应当输入你的用户名所对应的密码,比如Mozart。当你按下M键时,数据总线将把这个数据送到计算机的主存储器中,然后再送到微处理器进行处理。由于目前CPU的指令缓存中还没有任何关于如何使用这个数据的指令,因此它先被存放在预取单元中。
接下来,预取单元会检查内存中是否存在其它指令(可能由Windows或是其它正在运行的软件存放在那里),内存将指示预取单元把数据送到指令缓存中,并且给它们分配一个可以在CPU内部使用的地址。预取单元从指令缓存中得到数据的地址,把它和数据一起送到译码器。然后,译码器把数据(字母M)、与数据相关的指令、还有数据的地址一起从机器代码翻译成二进制代码,并把它们传送到控制器。在控制器从译码器中获得指令信息之后,经过判断,把数据存放在数据缓存中,等待下一条指令的到来。
此时,字母M已经保存在CPU的数据缓存中,并且在指令缓存中也记录了M的地址。此外,字母M还通过系统中的数据总线的传送出现在显示器上。所有这些步骤都在非常短的时间内完成,对于用户来说,能够觉察到的只是在按下M键的时候,字母M出现在屏幕上。
对于用户接下来输入的几个字母,CPU将会重复前面的所有步骤,直到六个字母全部输入完毕,所有数据都存储到CPU的数据缓存和指令缓存中。这时,当你按下回车(Enter)键时,CPU将会执行一个新的进程。
3.逻辑运算
当用户单击OK按钮后,这条命令将被送入计算机的输入控制器,通过总线传送到预取单元中。接下来,预取单元首先查看指令缓存中是否有指令存在,若没有,它将检查计算机的主存储器。由于主存储器中已经存放了Win
98的启动程序,所以主存储器将把用户输入的数据(Mozart)送入预取单元,并且命令预取单元把这些数据送入指令缓存中。然后,预取单元又把数据的地址送到译码器中。译码器把所有的指令和数据从机器代码翻译成二进制代码,并把翻译结果传送到控制器。控制器在读取用二进制代码表示的指令后,把它们送到CPU中的ALU中进行处理。
控制器首先把密码中第一个字母(M)的二进制表示形式,连同M在数据缓存中的地址一起送到ALU。接着,ALU将进行一组布尔逻辑运算,把字母M的每一个二进制位同Win98已经预先存储的密码数据进行比较。然后,ALU把比较结果(正确或错误)保存到一个寄存器中,继续对密码中的下一个字母进行同样的逻辑运算,直到把所有字母的比较结果都保存到寄存器中为止。
在ALU进行比较的同时,主存储器已经通过预取单元、指令缓存和译码器让控制器启动Win
98,并且准备访问用户指定的特征文件。如果用户输入的密码完全正确的话,控制器将通知预取单元从主存储器中读取Win
98的后续启动指令,完成Win 98的启动过程。
构成微处理器的复杂电路可以根据功能分成几个不同的构件。一些构件专门从事检索主存储器(RAM)或硬盘上的数据;另一些构件专门用来把用机器语言表示的指令翻译成处理器能够识别的二进制代码;还有一些构件是仅仅用于处理算术运算和布尔逻辑运算的。
微处理器的每一个构件对于计算机来说都是至关重要的, 无论你是用计算机进行文字处理、收发邮件、财务管理,还是上网冲浪。 |