Chapter 5. 中央处理器
公式与性质
-
CPU
的基本结构- 运算器:包括算术逻辑单元
ALU
、暂存寄存器、累加寄存器ACC
、通用寄存器组GPRs
、程序状态字寄存器PSW
、移位寄存器、计数器CT
等。 - 控制器:包括程序计数器
PC
、指令寄存器IR
、指令译码器ID
、存储器地址寄存器MAR
、存储器数据寄存器MAR
、时序电路和微操作信号发生器等。
- 运算器:包括算术逻辑单元
-
CPU
取出并执行一条指令所需的全部时间称为指令周期,通常包括以下几种机器周期:取值周期(取指令)、间址周期(取操作数的地址)、执行周期(取操作数,并根据IR
中的指令字的操作码通过ALU
操作产生结果)、中断周期(若采用中断实现与I/O
设备的交换)。一个指令周期包含的机器周期的数量不一定。 -
计算机中的堆栈向低地址方向增长。
-
数据通路(数据在指令执行过程中所经过的路径,包括路径上的部件)主要分为组合逻辑元件和时序逻辑元件两类。
- 组合逻辑元件:任何时刻产生的输出只取决于当前的输入,故不含记忆单元,也不受时钟信号的控制。主要包括加法器、
ALU
、译码器、多路选择器、三态门等。 - 时序逻辑元件:任何时刻产生的输出不仅取决于当前的输入,还与以前的输入有关。主要包含
GPRs
、PC
、状态/移位/暂存/锁存寄存器等。
- 组合逻辑元件:任何时刻产生的输出只取决于当前的输入,故不含记忆单元,也不受时钟信号的控制。主要包括加法器、
-
内部总线:同一部件,如
CPU
内部连接各寄存器及运算部件之间的总线;系统总线:同一台计算机系统的各部件,如CPU
、内存和各类I/O
接口间互相连接的总线。 -
微程序控制的基本概念
- 微程序的设计思想:将每一条机器指令编写成一个微程序,每个微程序包含若干微指令、每条微指令对应一个或几个微操作命令。
- 控制部件向执行部件发出的各种控制命令称为微命令,是构成控制序列的最小单位。执行部件收到微命令后所进行的操作称为微操作,微命令和微操作是一一对应的。
- 微指令是若干微命令的集合。微周期是从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期。
- 控制存储器
CM
用于存放微程序,在CPU
内部,用ROM
(PROM
、EPROM
、闪存等)实现 ,不属于高速缓存,。
-
异常(内中断):由
CPU
内部产生的意外事件。- 故障
Fault
:指令启动后、执行结束前被检测到的异常事件。如:- 缺段、缺页等:处理后返回到当前指令执行。
- 非法操作码、除数为 0 等:无法处理,终止执行。
- 自陷
Trap
:预先安排的异常。用于断点调试与单步跟踪。自陷指令通常处理后返回到下一条指令执行;但当自陷指令是转移指令时,返回到转移目标指令执行,如系统调用指令、条件自陷指令:无条件或有条件地自动调出操作系统内核程序进行执行。
- 故障异常和自陷异常都属于程序性异常(软件中断)。
- 终止
Abort
:硬件故障,如控制器出错、存储器校验错、总线错误等:无法处理,只能终止。
- 终止异常与外中断都属于硬件中断。
- 故障
-
流水段通常分为五个阶段:
- 取址
Instruction Fetch, IF
- 译码/读寄存器
Instruction Decode, ID
- 执行/计算地址
Execute, EX
- 访存
Memory, MEM
- 写回
Write Back, WB
- 取址
-
流水线的冒险
- 结构冒险:不同指令在同一时刻征用同一功能部件,也称资源冲突 。
- 解决办法:
- 前一指令访存时,后一相关指令(及其后续指令)暂停一个时钟周期。
- 设置多个独立部件。如对于寄存器访问冲突,分离寄存器读口和写口;对于访存冲突,单独设置数据寄存器和指令寄存器。
- 解决办法:
- 数据冒险:后面指令用到前面指令的结果时,前面指令的结果还没有产生(写后读
Read After Write, RAW
)- 解决办法:
- 延迟执行相关指令
- 转发(旁路)技术,直接将数据通路生成的中间数据转发到
ALU
的输入端。 - 进行编译优化以避免
load-use
(load
指令与其后紧邻的运算类指令数据相关)现象。
- 解决办法:
- 控制冒险:改变指令执行顺序(执行转移或返回类指令、发生中断或异常(包括
Cache
缺失))时,造成断流。- 解决办法:
- 延迟执行跳转后的指令。
- 对转移指令进行分支预测(静态预测或动态预测),尽早生成转移目标地址。
- 预取转移成功/不成功两个控制流方向上的目标指令。
- 加快和提前形成条件码。
- 解决办法:
- 结构冒险:不同指令在同一时刻征用同一功能部件,也称资源冲突 。
-
流水线的吞吐率 TP :单位时间内流水线所完成的任务数量。设处理 n 个任务,流水段段数为 k , 时钟周期为 \Delta t ,则 TP = \frac n {(k+n-1)\Delta t} ,当 n \rightarrow \infin 时,{TP}_{max} = \frac 1 {\Delta t} 。
-
流水线的加速比 S :完成同样一批任务,不使用流水线与使用流水线所用的时间之比。设处理 n 个任务,流水段段数为 k , 时钟周期为 \Delta t ,则 S=\frac {kn\Delta t}{(k+n-1)\Delta t}=\frac {kn}{k+n-1} ,当 n \rightarrow \infin 时,{S}_{max} = k 。
-
硬件多线程
- 细粒度多线程:多个线程之间轮流交叉执行指令。
- 粗粒度多线程:连续几个时钟周期都执行同一线程的指令序列,仅在当前线程出现了较大开销的阻塞时,才切换线程,如
Cache
缺失。 - 同时多线程
Simultaneous MultiThreading, SMT
:在同一个时间周期中,发射多个不同线程的多条指令执行(如Intel
超线程)。
概念
-
程序计数器
PC
的位数取决于存储器的容量和指令字长。- 以字节为单位表示指令地址时,存储器字节数 ={PC}_{max} 。
- 以字为单位表示指令地址时,存储器容量 / 指令字长 ={PC}_{max} 。
-
在指令长度相同的情况下,所有指令的取址操作都是相同的。
-
取值周期与机器周期没有必然的联系。
指令周期 = 取值周期 + 间址周期 + 执行周期 (+ 中断周期)。
指令周期可用若干机器周期表示。 -
CPU
的数据通路结构主要包括;单总线结构、多总线结构、专用数据通路结构。 -
水平型微指令控制器需要较长的控制域。
多个并行操作的微命令 \Rightarrow 较长的控制域。
-
微指令结构设计追求的目标:
- 缩短微指令字的长度
- 减少控制存储器的容量
- 提高微程序的执行速度
- 有利于对微指令的修改
- 提高微程序设计的灵活性
-
CPU
响应中断后通过中断隐指令和操作系统来保护现场。中断隐指令保护断点,操作系统保护寄存器。
-
中断隐指令是硬件自动完成的指令。
-
中断向量的地址是中断服务程序入口地址的地址,中断向量就是中断服务程序入口地址。
-
分支预测可以同时利用硬件和软件来实现指令级并行。
-
控制相关不能通过增加计算部件解决或优化。
转移指令会引起断流。
-
静态流水线相较动态流水线只能在操作完全结束时切换功能。
-
超标量流水线性能优于超标量超流水流水线。
考点
-
某计算机的主存储器空间为 4GB ,字长为 32 位,按字节编址,采用 32 位字长指令字格式。若指令按字边界对齐存放,则程序计数器
PC
的位数至少是 30 ,指令寄存器IR
的位数至少是 32 。\frac {4GB=2^{32}B}{32bit=2^2B}=2^{30} 。
-
单周期处理器在指令执行过程中控制信号不变。(一个时钟周期内信号不变)
-
某微程序控制器,其微指令的控制域采用水平型字段译码法,某字段用来表示 32 个互斥的微命令,则该字段应采用 6 位编码。
需要一个额外的状态位来表示不做任何操作, \lceil \log _2 (32+1)\rceil=6 。
-
内部异常的响应发生在指令执行过程中。
-
寄存器重命名技术可以解决数据相关,不能解决结构相关和控制相关。
-
m 段流水
CPU
的吞吐能力小于 m 个并行部件CPU
。 -
阵列处理机
Array Processor
(并行处理机、向量处理机)对向量同时进行相同操作,属于SIMD
。