CPU内部组成及原理
CPU,Central Processing Unit,翻译过来叫中央处理器。是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。电脑中所有操作都由CPU负责读取指令,对指令译码并自行。
一、组成结构
CPU的根本任务就是执行指令,对计算机来说最终都是一串由“0”和“1”组成的序列。CPU从逻辑上可以划分成3个模块,分别是控制单元、运算单元和存储单元,这三部分由CPU内部总线连接起来。如下图
1.1、控制单元
控制单元是整个CPU的指挥控制中心,包括指令寄存器IR(Instruction Register)、指令译码器ID(Instruction Decoder)和操作控制器OC(Operation Controller)、时序发生器和程序计数器等部件,对协调整个电脑有序工作极为重要。它根据用户预先编好的程序,依次从存储器中取出各条指令,放在指令寄存器IR中,通过指令译码(分析)确定应该进行什么操作,然后通过操作控制器OC,按确定的时序,向相应的部件发出微操作控制信号。操作控制器OC中主要包括节拍脉冲发生器、控制矩阵、时钟脉冲发生器、复位电路和启停电路等控制逻辑。
- 程序计数器(PC)
又称指令计数器,用来确定下一条指令的地址。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存的那样地址送入PC,因此PC的内容及是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC内容,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令是顺序执行,所以修改的过程通才只是简单的对PC加一个1,但是遇到跳转指令时,那么后续的指令地址必须从指令的地址段取得,由跳转指定来规定。
- 指令寄存器
用来保存当前正在执行的指令。当执行一条指令时,先把他从内存取到缓冲寄存器中,然后在传送到指令寄存器。 - 指令译码器
分析和执行当前指令的部件。为了执行给定的指令,必须对操作码进行测试,以便识别所要求的操作。操作码一经译码后,即可向操作控制器发出具体的操作的信号。 - 操作控制器(OC)
用来产生各种操作控制信号。CPU内的每个功能部件都完成一定的特定功能。然而信息怎样才能在各部件之间传送呢?也就是说,数据的流动是由什么部件控制的呢? 通常把许多数字部件之间传送信息的通路称为“数据通路”。信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传到哪个寄存器,都要加以控制。在各寄存器之间建立数据通路的任务,是由称为“操作控制器”的部件来完成的。操作控制器的功能就是根据指令操作码和时序信号,产生各种操作控制信号,以便正确地建立数据通路,从而完成取指令和执行指令的控制。 - 时序发生器
CPU中一个类似“作息时间”的东西,使计算机可以准确、迅速、有条不紊地工作。机器一旦被启动,即CPU开始取指令并执行指令时,操作控制器就利用定时脉冲的顺序和不同的脉冲间隔,有条理、有节奏地指挥机器的动作,规定在这个脉冲到来时做什么,在那个脉冲到来时又做什么,给计算机各部分提供工作所需的时间标志。为此,需要采用多级时序体制。从时间上来说,取指令事件发生在指令周期的第一个CPU周期中,即发生在“取指令”阶段,而取数据事件发生在指令周期的后面几个CPU周期中,即发生在“执行指令”阶段。从空间上来说,如果取出的代码是指令,那么一定送往指令寄存器,如果取出的代码是数据,那么一定送往运算器。由此可见,时间控制对计算机来说是太重要了。
1.2、运算单元
是运算器的核心。可以执行算术运算(包括加减乘数等基本运算及其附加运算)和逻辑运算(包括移位、逻辑测试或两个值比较)。相对控制单元而言,运算器接受控制单元的命令而进行动作,即运算单元所进行的全部操作都是由控制单元发出的控制信号来指挥的,所以它是执行部件。由算术运算逻辑单元(ALU)、累加器、数据缓冲寄存器、状态寄存器和通用寄存器组组成,它是数据加工处理部件。
- 算术运算逻辑单元(ALU)
实现多组算术运算和逻辑运算的组合逻辑电路,简称ALU。由"And Gate"(与门) 和"Or Gate"(或门)构成的算术逻辑单元,主要功能是进行整数的二位元的算术运算,如加减乘(不包括整数除法)。 - 累加器(AC)
当运算器的算术逻辑单元执行算术或逻辑运算时,为ALU提供一个工作区。暂时存放运算结果信息。目前CPU中的有多达16个、32个、甚至更多的累加器。 - 数据缓冲寄存器(DR)
用来暂时存放由内存读出的指令或数据,反之,当向内存存入指令或数据时,也暂时将它们存放在DR中。作为CPU和内存及外部设备间信息传送的中专站。 - 状态寄存器(PSW)
保存由算术指令和逻辑指令运行或测试的结果建立的各种条件码内容,如运算结果进位标志、溢出标志,为零标志、为负标志等。 - 通用寄存器组
通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。
1.3、存储单元
包括CPU片内缓存和寄存器组,是CPU中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU访问寄存器所用的时间要比访问内存的时间短。采用寄存器,可以减少CPU访问内存的次数,从而提高了CPU的工作速度。但因为受到芯片面积和集成度所限,寄存器组的容量不可能很大。寄存器组可分为专用寄存器和通用寄存器。专用寄存器的作用是固定的,分别寄存相应的数据。而通用寄存器用途广泛并可由程序员规定其用途,通用寄存器的数目因微处理器而异。
1.4、内部详细结构
根据上面的讲述,我们大致可以得到CPU的内部结构,如图
二、功能
- 处理指令
这是指控制程序中指令的执行顺序。程序中的各指令之间是有严格顺序的,必须严格按程序规定的顺序执行,才能保证计算机系统工作的正确性。 - 执行操作
一条指令的功能往往是由计算机中的部件执行一系列的操作来实现的。CPU要根据指令的功能,产生相应的操作控制信号,发给相应的部件,从而控制这些部件按指令的要求进行动作。 - 控制时间
时间控制就是对各种操作实施时间上的定时。在一条指令的执行过程中,在什么时间做什么操作均应受到严格的控制。只有这样,计算机才能有条不紊地工作。 - 数据处理
即对数据进行算术运算和逻辑运算,或进行其他的信息处理
三、运行原理
CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码。它把指令分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成一条指令的执行。指令是计算机规定执行操作的类型和操作数的基本命令。指令是由一个字节或者多个字节组成,其中包括操作码字段、一个或多个有关操作数地址的字段以及一些表征机器状态的状态字以及特征码。有的指令中也直接包含操作数本身。
- 初始化PC
由程序计数器(PC)指定指令在存储器的位置。(程序计数器保存供识别程序位置的数值。换言之,程序计数器记录了CPU在程序里的踪迹。) - 取指令
根据PC,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)放到指令寄存器。 - 指令解码
CPU根据存储器提取到的指令来决定其执行行为。首先译码,指令被拆解为有意义的片段。根据CPU的指令集架构(ISA)定义将数值解译为指令。一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法(AddiTIon)运算的运算目标。二是分析参与这次操作的各操作数所在的地址,即操作数的有效地址。 - 执行指令
在提取和解码阶段之后,紧接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算术逻辑单元(ALU,ArithmeTIc Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而输出将含有总和的结果。ALU内含电路系统,易于输出端完成简单的普通运算和逻辑运算(比如加法和位元运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里可能会设置运算溢出(ArithmeTIc Overflow)标志。 - 写回
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主记忆体中。某些类型的指令会操作程序计数器,而不直接产生结果。这些一般称作“跳转”(Jumps),并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。许多指令会改变标志暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值大小,根据比较结果在标志暂存器上设置一个数值。这个标志可藉由随后跳转指令来决定程式动向。在执行指令并写回结果之后,程序计数器值会递增,反覆整个过程,下一个指令周期正常的提取下一个顺序指令。 - 更新PC
根据指令代码和分支标志,从前面步骤得出的结果,生成下一条指令的地址放到PC里
流程如下图