第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内部硬件控制,程序员在编写程序时无法直接访问它们,对用户是完全透明的。