第5章 中央处理器
5.1 CPU的功能和基本结构
5.1.1 CPU的功能
中央处理器(CPU)是整个计算机系统的核心,它的功能可以概括为以下几个方面:
-
指令控制:控制指令的取出和执行顺序。CPU必须知道下一条要执行的指令在哪里,这由程序计数器(PC)来记录。程序执行时,CPU根据PC的内容从主存中取出指令,然后PC自动指向下一条指令的地址。对于转移指令,CPU需要修改PC的值,使程序跳转到指定的目标地址。
-
操作控制:一条指令通常由多个微操作组成,CPU需要产生相应的控制信号,指挥各个部件协调工作。例如,执行加法指令时,CPU需要控制ALU进行加法运算,同时控制寄存器将操作数送到ALU的输入端,最后将结果写回目标寄存器。
-
时间控制:CPU必须为每条指令的执行提供精确的时序控制。计算机的所有操作都是在统一的时钟信号驱动下进行的,CPU需要按时序发出控制信号,保证各个微操作按照正确的顺序执行。
-
数据加工:这是运算器的核心功能,包括算术运算(加、减、乘、除)和逻辑运算(与、或、非、异或等),以及移位操作等。数据加工的结果会影响程序状态字(PSW)中的标志位,如进位标志CF、零标志ZF、符号标志SF、溢出标志OF等。
-
中断处理:CPU需要能够响应外部设备和内部异常产生的中断请求。当发生中断时,CPU要暂停当前正在执行的程序,保存断点(返回地址)和现场,然后转去执行中断服 务程序,中断处理完毕后再恢复现场,返回到原程序继续执行。
5.1.2 CPU的基本结构
CPU内部由运算器、控制器和寄存器组三大部分构成。这三部分通过内部数据通路连接在一起,共同完成指令的执行。
1. 运算器
运算器是数据加工的核心部件,主要包括:
-
算术逻辑单元(ALU):这是运算器的核心,负责执行算术运算和逻辑运算。ALU的输入端通常有两个,分别接收两个操作数;输出端给出运算结果,同时产生一些标志信息(如进位、溢出等)。ALU的宽度通常等于机器字长。
-
通用寄存器组(GPRs):这是一组供程序员使用的寄存器,用于存放操作数和中间结果。通用寄存器的个数和位数由指令集体系结构(ISA)决定。在程序执行过程中,操作数可以从主存读到通用寄存器中,然后进行运算,运算结果再存回通用寄存器,这样可以减少对主存的访问次数,提高执行速度。
-
暂存器:这些寄存器不提供给程序员使用,而是由CPU内部在指令执行过程中临时存放数据。例如,在单总线结构的CPU中,需要暂存器来保存ALU的一个输 入,因为总线上同时只能传输一个数据。
-
程序状态字寄存器(PSW):也称为标志寄存器,用于存放程序执行过程中的状态信息。主要包括:
- 条件码:如进位标志CF、零标志ZF、符号标志SF、溢出标志OF等,这些标志由ALU运算结果设置,用于条件转移指令的判断。
- 中断允许位:控制CPU是否响应可屏蔽中断。
- 特权级:指示CPU当前运行在用户态还是内核态,用于保护操作系统。
2. 控制器
控制器是CPU的指挥中心,负责产生控制信号,协调整个计算机的工作。主要包括:
-
程序计数器(PC):存放下一条要执行的指令在主存中的地址。取指令时,CPU将PC的内容送到MAR,然后访问主存读取指令;同时,PC自动加上指令字长(按字节编址时,32位指令加4),指向下一条指令的地址。对于转移指令,PC的内容会被修改为转移目标地址。
-
指令寄存器(IR):存放当前正在执行的指令。从主存中取出的指令先放入MDR,然后传送到IR。指令中的操作码部分被送到指令译码器进行译码,地址码部分被送到地址形成部件计算操作数的有效地址。
-
指令译码器(ID):对IR中的操作码进行译码,识别出这是一条什么指令,然后产生相应的控制信号。对于复杂的指令,译码器可能产生多个控制信号序列。
-
时序部件:产生各种时序信号,包括时钟周期、机器周期、指令周期等。时序部件确保各个微操作按照正确的时间顺序执行。
-
微操作信号发生器:根据指令译码结果和时序信号,生成各部件所需的控制信号,如ALU的控制信号、寄存器的读写信号、主存的读写信号等。微操作信号发生器的实现方式有两种:硬布线逻辑和微程序控制。
3. 寄存器组(程序员可见/不可见)
寄存器可以从程序员的角度分为两类:
-
程序员可见的寄存器:包括通用寄存器、PC、PSW等。汇编语言程序员可以直接访问这些寄存器,编写程序时可以显式地使用它们。
-
程序员不可见的寄存器:包括IR、MAR、MDR、暂存器等。这些寄存器由CPU内部硬件控制,程序员在编写程序时无法直接访问它们,对用户是完全透明的。
5.1.3 CPU的寄存器(细节注意)
理解CPU中各个寄存器的位数和作用,对于理解指令执行过程非常重要:
-
程序计数器(PC):PC的位数等于地址总线的宽度。例如,32位地址总线的计算机,PC就是32位。取指令后PC自动修改,修改的数值等于指令字长除以编址单位。按字节编址时,若指令字长为32位(4字节),则PC+4;若指令字长为16位,则PC+2。
-
指令寄存器(IR):IR的位数等于指令字长。无论CPU内部数据通路是多少位,IR必须能够完整地存放一条指令。
-
存储器地址寄存器(MAR):MAR的位数等于地址总线的宽度,决定了CPU能够访问的主存空间大小。例如,32位MAR可以访问2^32字节(4GB)的地址空间。
-
存储器数据寄存器(MDR):MDR的位数等于数据总线的宽度,通常等于存储字长。一次访存操作可以读出或写入MDR宽度的数据。
-
通用寄存器:通用寄存器的位数通常等于机器字长。32位CPU的通用寄存器就是32位,64位CPU的通用寄存器就是64位。
特别注意:虽然MAR和MDR从逻辑上属于主存的一部分,但在现代计算机中,它们通常被集成在CPU内部,因为CPU与主存的数据交换必须通过这些寄存器进行。
5.2 指令执行过程
5.2.1 指令周期
指令周期是CPU执行一条指令所需的时间。从宏观上看,指令周期由若干个机器周期组成,而每个机器周期又由若干个时钟周期组成。
-
时钟周期:CPU最小的时间单位,由计算机的主频决定。主频为1GHz的CPU,时钟周期为1ns。时钟周期是CPU内部所有操作的基准,每个微操作都在时钟边沿触发。
-
机器周期(CPU周期):通常定义为从主存读取一个指令字的最短时间。由于主存速度相对较慢,CPU访问主存的时间往往成为瓶颈,因此机器周期通常等于主存的存取周期。
-
指令周期:取指令、分析指令、执行指令所需的总时间。不同的指令具有不同的指令周期,例如,加法指令可能只需要一个机器周期,而乘法指令可能需要多个机器周期。
一个典型的指令周期包含以下阶段:
- 取指周期:CPU根据PC的内容从主存中读取指令,并将指令放入IR。
- 间址周期(可选):如果指令采用间接寻址,则需要根据地址码再次访问主存,获取操作数的有效地址。
- 执行周期:执行指令规定的操作,如加法、减法、数据传送等。
- 中断周期(可选):如果CPU响应中断,则需要保存断点、现场,并转向中断服务程序。
5.2.2 指令周期的数据流
理解每个周期中数据的流动过程,是掌握CPU工作原理的关键。以下以单总线结构为例,说明各周期的数据流。
1. 取指周期
取指周期的任务是将指令从主存中读出并送入IR。数据流如下:
- (PC) → MAR:将PC的内容通过内部总线送到MAR。MAR中的地址被送到地址总线上。
- CPU发出读命令(MemRead):控制总线上的读信号有效,通知主存进行读操作。
- 主存根据地址线上的地址,将对应的存储单元的内容读出,送到数据总线上。
- MDR从数据总线上接收数据,然后通过内部总线将数据传送到IR。至此,指令被成功取入IR。
- (PC) + 指令长度 → PC:PC自动增加,指向下一条指令的地址。增加的量取决于指令字长和编址方式。
在取指周期中,PC的自动增量操作通常由ALU完成,需要占用一个时钟周期。
2. 间址周期
如果指令采用间接寻址,指令中的地址码并不是操作数的有效地址,而是存放有效地址的地址。间址周期的任务就是根据地址码读取有效地址。数据流如下:
- 将IR中的地址码(或根据寻址方式计算出的地址)送到MAR。
- CPU发出读命令,从主存中读取数据。
- 读出的数据(即有效地址)被送入MDR,然后通过内部总线送到ALU或暂存器,等待执行周期使用。
注意:间接寻址需要额外的一次访存操作,因此会延长指令的执行时间。
3. 执行周期
执行周期的数据流因指令而异。以加法指令"ADD R0, R1"(将R0和R1的内容相加,结果存回R0)为例,在单总线结构下的数据流如下:
- (R1) → 内部总线 → Y(暂存器):将R1的内容送到暂存器Y,准备作为ALU的一个输入。
- (R0) → 内部总线 → ALU:将R0的内容送到ALU的另一个输入端。
- ALU执行加法运算,结果 → Z(另一个暂存器)。
- Z → 内部总线 → R0:将加法结果写回R0。
注意:在单总线结构中,每条指令的执行需要多个时钟周期,因为总线一次只能传输一个数据。
4. 中断周期
当CPU响应中断时,需要执行中断周期。数据流如下:
- 将PC的内容(即返回地址)压入堆栈。通常,SP 先减1,然后(PC) → M[SP]。
- 将PSW的内容压入堆栈(如果需要保存现场)。
- 将中断服务程序的入口地址送入PC。
- CPU关中断(某些情况下),以防止中断嵌套。
5.2.3 指令执行方案
CPU执行指令的方式主要有三种:
-
单指令周期:所有指令都用相同的机器周期数完成(通常为一个机器周期)。这种方案的优点是控制简单,但缺点是周期长度必须由最慢的指令决定,导致大多数指令执行效率低下。CPI(平均每条指令的时钟周期数)等于1,但实际时钟周期较长。
-
多指令周期:不同指令使用不同数量的机器周期。这种方案可以根据指令的复杂度分配不同的执行时间,硬件利用率较高,但控制逻辑比较复杂。
-
流水线方案:将指令执行过程分解为多个阶段,每个阶段由专用的硬件完成,多条指令可以重叠执行。这种方案可以显著提高CPU的吞吐率,是现代CPU普遍采用的方式。
5.3 数据通路的功能和基本结构
5.3.1 数据通路的功能
数据通路是指CPU内部数据流动的路径,包括ALU、寄存器、总线以及它们之间的连接关系。数据通路的功能是实现数据在各部件之间的传送与处理。每条指令的执行,本质上就是数据在数据通路中按照一定顺序流动的过程。
5.3.2 数据通路的组成
数据通路由两类元件组成:
-
组合逻辑元件:这些元件的输出只取决于当前的输入,没有存储功能。主要包括:
- 算术逻辑单元(ALU):执行运算,输出结果和标志。
- 移位器:对数据进行左移或右移操作。
- 多路选择器(MUX):从多个输入中选择一个输出,用于选择数据源。
- 三态门:控制数据是否输出到总线上,用于实现总线的分时共享。
-
时序逻辑元件:这些元件在时钟边沿将输入数据锁存到输出端,具有存储功能。主要包括:
- 寄存器(通用寄存器、PC、IR等)
- 程序状态字寄存器(PSW)
- 暂存器