天瑞科技 - 深圳电脑维修,深圳电脑维护,深圳电脑修理, 上门维修电脑,深圳电脑上门维修
天瑞科技,深圳电脑维修,深圳电脑维护
天瑞科技




天瑞电脑公司  正在为您转接...
简介

  你在阅读该页面的时候,你的微处理器(microprocessor)正在工作。无论是台式机、服务器或者是笔记本电脑,微处理器都是主要的热源和动力来源。你使用的也许是Pentium、K6、PowerPC,又或者是其它品牌其它类型的微处理器,但它们都 在以类似的方式在做着相近的工作。

  如果你想知道你电脑的微处理器在做着什么样的事情,又或者你想了解不同类型微处理器之间的区别,请仔细阅读这篇文章,你会找到满意的答案。在这篇文章里,你将会学到相当简单的数字逻辑技术允许电脑做不同的工作,例如玩游戏、拼写文档的错误等!

  微处理器的历史

  微处理器--就是通常所说的CPU或者中心处理器器--是在一个独立芯片里制造好的具有完全功能的计算引擎。首个微处理器是Intel在1971年发布的Intel 4004。4004处理器并不是很强大--它所能够做的只是加和减运算;并且每次仅能进行4 bit 的运算。但令人惊叹的是所有的东西都集成到了1个芯片里面。在4004之前,工程师要把多个芯片或者分散的组件连接起来建造电脑。4004处理器用于制造了首个可以移动的电子计算器。

  首个用于制造家用电脑的微处理器是Intel 8080,它是在1974年发布的8-bit 电脑芯片。首个引起市场轰动的微处理器是Intel 8088,它在1979年发布并用于制造IBM PC(大约在1982年首次出现)。如果你对PC市场和它的历史比较熟识,你会知道PC市场处理器的大概发展历程如下:8088-->80286-->80386-->80486-->Pentium-->Pentium II-->Pentium III-->Pentium IV 。所有上面的这些微处理器都是由Intel制造,并且都是在8088的基础上设计完成的。Pentium IV能够执行任何早前8088运行的指令,但它的速度却要比后者快上5,000倍。

  以下的图表将有助你了解Intel在这些年来发布的不同处理器之间的区别。


  关于上表的相关信息:

·日期是处理器首次发布的时间。很多处理器在相隔多年后会以更高的时钟频率重新发布。

·晶体管 是芯片里面集成晶体管的数目。你可以看到在这几年里,单芯片里面晶体管的数目在有序地增长。

·微米制造工艺是宽度,是芯片里面最小的连线。为了便于比较,人类的头发大约相当于100微米的厚度。随着芯片形体尺寸的下降,晶体管的数目在不段增长。

·时钟速度是芯片时钟控制的最大速率。在文章的下面部分,你将能够更清晰地了解到时钟速度。

·数据宽度是ALU(算术逻辑单元)的宽度。1个8-bit的ALU可以加/减/乘等。两个8-bit 的数字,其中1个32-bit ALU 能够操纵32-bit数字。1个8-bit ALU 在对两个32-bit进行加运算的时候,将不得不执行四次指令;而32-bit ALU能够在一个指令完成运算。在很多情况下,外部的数据总线与ALU具有相同的宽度,但并非绝对。8088有16-bit ALU和8-bit 总线,而现代的Pentium 可以使用它们的32-bit ALU每次处理64 bit 的数据。

·MIPS 代表"百万指令集每秒",它能够粗略地描绘处理器的性能。现代的CPU能够做各种各样的工作,因此MIPS比率就已经失去了它的意义;但你依然能够从这个数值获知CPU相 近的能力。

  从以上的图表你可以看到,大体来说,时钟速度和MIPS之间有一定的关系。最大的时钟速度是制造工艺和芯片的延迟。它还与晶体管的数量和MIPS有关,例如,8088的时钟频率为5MHz,但仅能够执行0.33MIPS(大概每15个时钟1个指令)。现在的处理器通常每个时钟周期可以执行两个指令。该进步直接与芯片的晶体管数量有关,在文章的后面部分将详细讲述。

  什么是芯片?芯片也称之为集成电路。通常是使用小而薄的硅片进行侵蚀,雕刻出晶体管,从而制造出处理器。1个芯片大约为1英寸大,里面包含了数百万,甚至上千万个晶体管。简单的处理器 则仅在1个几平方毫米的芯片里面雕刻了数千个的晶体管。

  深入微处理器内部

  想要了解微处理器的工作原理,最好的办法是深入学习组成处理器的逻辑单元。在处理过程你还能够认识到汇编语言--处理器的本机语言--还有很多工程师们能够提高处理器速度的因素。

  微处理器可以执行汇集起来的机器指令,并告诉处理器应该做什么。根据这些指令,处理器可以做三件基本的事情:

·使用它的ALU(算术/逻辑 单元),微处理器可以进行加、减、乘、除等算术运算。在大量浮点数的时候,现代的微处理器还包括完全的浮点处理器能够相当熟练地对浮点数进行运算。

·微处理器可以把数据从内存位置移到其它的地方。

·微处理器可以作出判断,然后根据这些判断跳转到新的指令集

  当然微处理器还可以熟练地处理其它的事情,但这些是它最基本的三种活动。接下来的图表相当简单地表明了微处理器可以做三件事情的过程:


这是微处理器最简单的工作原理,微处理器拥有:

·1条地址总线(可能是8、16或者32bit宽)把地址发送给内存

·1条数据总线(可能是8、16或者32bit宽) 把数据发送到内存,或者从内存接受数据

·1条RD(读)或者WR(写)线,告诉内存是否需要设置或者获得地址的位置

·1条时钟线,让时钟脉冲计算处理器的时序

·1条重设线,把程序的计数器重设为0(或者什么都)并重新执行

  让我们假设在该例子里地址和数据总线都为8bit宽。

  下面是简单处理器的组成部分:

·寄存器A,B和C是由浮点解释程序(flip-flops)组成的寄存器

·地址寄存器就像寄存器A,B和C

·当被告诉要处理的时候,程序计数器的寄存器具有额外的能力能够以1为单位进行递增;当然在适当的时候也可以重新设置为0

·ALU可以简单地看作是8-bit的加法器,或者它可以进行加、减、乘、除 8-bit的数值。

·测试记录器是比较特殊的寄存器,因为它可以保留住在ALU比较执行中获得的数值。ALU能够比较两个数值,然后决定它们是否相等,例如1个是否比另外的大等等。测试记录器还可以从加法器中升级进位。它把这些数值储存在浮点解释程序中,然后指令解码器可以使用这些数值并做出判断。

·在图表里有6个盒子(box)被标注了"3-State"(3-状态),这些是3-状态的缓冲。1个3-状态可以通过1,a 0或者它可以基本上切断它的输出(想象开关的输出线路被切断了,那么它的输出就会转向)。1个3-状态缓冲可以允许多个输出连接到1条线上,但它们中仅有可以驱使1或者a 0的中一个连接到线路上。

·指令寄存器和指令解码器为控制所有的这些或者其它组件负责

  虽然它们没有出现在图表山,但在指令解码的时候它们将出现在控制线路上:

·告诉A寄存器保留当前数据总线的数值

·告诉D寄存器保留当前数据总线的数值

·告诉C寄存器保留当前数据总线的数值

·告诉程序记数寄存器保留当前数据总线的数值

·告诉地址寄存器保留当前数据总线的数值

·告诉指令寄存器保留当前数据总线的数值

·告诉程序计数器递增

·告诉程序计数器重设为0

·激活所有的6条 3-状态缓冲(六条单独的线路)

·告诉ALU操作执行的任务

·告诉测试记录器保存ALU 的测试bit

·激活RD线路

·激活WR线路

  指令解码器是从测试记录器和时钟线路获得的bit,而bit是从指令寄存器获得的。    

  RAM和ROM

  在前面我们讲到了地址和数据总线,还有RD(读)和WR(写)线路。这些总线和线路都连接到RAM或者ROM--通常两者皆有。在例子微处理器里,我们有8-bit 宽地址总线和8-bit宽数据总线。这就意味着微处理器可以寻址(28) 256 比特的内存空间,它每次可以读或者写8-bit的内存。现在让我们假设该简单的微处理器在地址0有128比特ROM,在地址128有128比特RAM。

  ROM代表只读存储器。ROM芯片使用了永久预设的程序。地址总线告诉ROM芯片该获取那部分的数据,然后放置在数据总线上。当读线路改变了状态,ROM芯片会把选择的比特放置到数据总线上。

  RAM代表随机存储器。RAM包括了比特的信息,然后微处理器会根据RD或者WR线路来读或者写这些比特。今天RAM的问题,关闭电源之后全部的信息都会丢失,这就是为什么电脑需要ROM。

  顺便说一下,几乎所有的电脑都具有一定数量的ROM(因此可以制造没有RAM的简单电脑--很多微控制器就是这样做的--但没有ROM却不能够制造电脑)。在PC里,ROM称为BIOS(基本输入/输出系统)。当微处理器启动的时候,它就开始执行储存在BIOS的指令。BIOS指令会执行检查机器的硬件硬件等工作,接着它会执行硬盘启动扇区的信息。启动扇区是另外的小程序,BIOS会把它从硬盘读出来并储存到RAM里。微处理器就会开始从RAM执行启动扇区的指令。启动扇区 指令会告诉微处理器从硬盘读取其它的数据到RAM,微处理器会接着执行...等等。这就是处理器装载和执行整个操作系统的原理。

  微处理器的指令   

  在前面的例子里,即使是最简单的微处理器在执行的时候都包括了相当大数量的指令集。执行的指令会以bit的形式集合起来,当装载到指令寄存器之后它们每个指令都有不同的含义。人类并不特别擅长记住bit模式,因此它们定义一些短的文字来描述或者代表这些位模式。这些字的集合被称为处理器的汇编语言。汇编程序可以非常简单地把这些文字翻译为bit的模式,然后汇编程序输出的结果放在内存里就可以让微处理器直接执行。

  下面是用于创建在我们例子里简单微处理器的汇编语言指令的集合:

LOADA mem - 从内存地址装载寄存器A 
LOADB mem - 从内存地址装载寄存器B 
CONB con - 把常数值赋予给寄存器B 
SAVEB mem - 把寄存器B保存到内存地址 
SAVEC mem - 把寄存器C保存到内存地址 
ADD - 把A和B相加,并把结果储存在C 
SUB - 把A和B相减,并把结果储存在C 
MUL - 把A和B相乘,并把结果储存在C 
DIV - 把A和B相除,并把结果储存在C 
COM - 把A和B进行比较,并把结果储存在测试记录里 
JUMP addr - 判断一个编址 
JEQ addr - 判断,如果相等,寻址 
JNEQ addr - 判断,如果不相等,寻址 
JG addr - 判断,如果大于,寻址 
JGE addr - 判断,如果大于或者灯语,寻址 
JL addr - 判断,如果小于,寻址 
JLE addr - 判断,如果小于或者等于,寻址 
STOP - 停止执行 
   如果你读过“C 程序是怎么工作的”(将在以后推出),你会知道怎么用C代码进行5的阶乘

    (5的阶乘=5!=5 * 4 * 3 * 2 * 1 = 120):  

   
在程序执行的末尾,变量f包含了5的阶乘。 

a=1; 

f=1; 

while (a <= 5) 

{     

f = f * a;     

a = a + 1; 

}    

  C语言的编译器会把C代码翻译为汇编语言。假设处理器中RAM的地址从128开始,而ROM(包括了汇编语言的程序)的地址从0开始,那么简单的处理器汇编语言看起来会如下所示:  

// 假设a在地址128 

// 假设F在地址129 

0   CONB 1      // a=1; 

1   SAVEB 128 

2   CONB 1      // f=1; 

3   SAVEB 129 

4   LOADA 128   // 如果if>5,跳转到17 

5   CONB 5 

6   COM 

7   JG 17 

8   LOADA 129   // f=f*a; 

9   LOADB 128 

10  MUL 

11  SAVEC 129 

12  LOADA 128   // a=a+1; 

13  CONB 1 

14  ADD 

15  SAVEC 128 

16  JUMP 4       //循环执行if 

17  STOP            

  现在问题是,“这些在ROM的指令是怎么样的?”汇编语言的每个指令都必须用1个二进制书来代表。为类简明点让我们假设每个汇编语言都有独特的数字,如下: 

 LOADA - 1 
LOADB - 2 
CONB - 3 
SAVEB - 4 
SAVEC mem - 5 
ADD - 6 
SUB - 7 
MUL - 8 
DIV - 9 
COM - 10 
JUMP addr - 11 
JEQ addr - 12 
JNEQ addr - 13 
JG addr - 14 
JGE addr - 15 
JL addr - 16 
JLE addr - 17 
STOP - 18 
  
  这些数字就是通常所说的操作码。在ROM,我们的小程序看起来如下:

  // 假设a在地址128 

// 假设F在地址129 

addr opcode/value(地址操作码/数值) 

0    3             // CONB 1 

1    1 

2    4             // SAVEB 128 

3    128 

4    3             // CONB 1 

5    1 

6    4             // SAVEB 129 

7    129 

8    1             // LOADA 128 

9    128 

10   3             // CONB 5 

11   5 

12   10            // COM 

13   14            // JG 17 

14   31 

15   1             // LOADA 129 

16   129 

17   2             // LOADB 128 

18   128 

19   8             // MUL 

20   5             // SAVEC 129 

21   129 

22   1             // LOADA 128 

23   128 

24   3             // CONB 1 

25   1 

26   6             // ADD 

27   5             // SAVEC 128 

28   128 

29   11            // JUMP 4 

30   8 

31   18            // STOP 

 

  你可以看到7行的C代码变成了17行的汇编语言,而在ROM则变成了31 比特。

  指令解码器需要把每个操作码都转变为驱使微处理器内部不同组件的信号集。让我们以ADD(加)指令为例子,看看它需要做什么样的工作。

1.在第一个时钟周期,我们需要装载指令。因此指令的解码需要:

l         激活程序计数器的3-状态(tri-state) 缓冲 

l         激活RD线路 l         激活数据输入(data-in)3-状态缓冲 

l         保留指令到指令寄存器 

2.而第二个时钟周期,ADD指令被解码。它需要处理的工作就相对少一点: 

l         设置ALU加法的运算 

l         把ALU的输出保留到C寄存器 

3.在第三个时钟周期,程序的计数器被递增(理论上它与第二个时钟周期是重叠的)。   

  每个指令都可以被打散为一系列有顺序的操作,因此处理器可以有序地操纵这些组件。一些指令,就像ADD指令,可能需要2或者3个时钟周期。其它的就可能需要5或者6个时钟周期。 

处理器的性能

  处理器中晶体管的数量对其性能有着巨大的影响。如我们早前看到的,8088处理器中执行一个典型的指令需要15个时钟周期。因为设计的乘法器,在8088上需要大约80个周期来执行16-bit的乘法。在使用更多的晶体管之后,乘法的单周期速度变得更 快也成为可能。

  更多的晶体管也允许了一项叫做流水线的技术。在一个流水线架构里,指令重复执行。因此即使它在每个指令需要多5个时钟周期;在大多数情形下,有5个指令同步执行。这样看起来每个时钟周期就可以处理1个指令了。

  很多现代的处理器都具有多指令解码,并且每个指令都有自己的流水线。这样就形成了多指令流,这也意味了每个时钟周期可以完成不止一个指令。该项技术在执行的过程中非常复杂,因此它需要大量的晶体管。

  处理器设计的趋向是,在多指令流里使用具有更快速浮点处理单元和流水执行的完全32-bit ALU 。为了使某些特定的操作更加有效率,还需要加入特别的指令(例如MMX 指令)。在处理器芯片里还有额外的硬件虚拟内存支持和L1 缓存。所有这些设计趋势使晶体管的数目在急剧增加,处理器也成为了具有数百万个晶体管的动力室。最新的微处理器每秒大约可以执行10亿条指令。
天瑞科技,深圳电脑维修,深圳电脑维护
天瑞科技