计算机组成原理完整学习笔记(七):CPU 的结构与功能

第七章 CPU 的结构与功能

7.1 控制器概述

7.1.1 控制器的功能

  1. 取指令
  2. 分析指令
  3. 执行指令,发出各种操作命令
  4. 总线管理
  5. 处理中断、异常等特殊情况

控制单元的外特性

控制信号分为 CPU 内部的控制信号,以及传到系统总线上的外部控制信号。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.1.2 指令周期

概念

  • 计算机读取并执行完一条指令的全部时间,称为指令周期
  • 指令周期大体可以分成四个阶段
    • 取指周期: 从内存中取得指令,并分析指令。
    • 间址周期: 间接寻址的指令都包含间址周期。发出指令中的形式地址,从内存中读回有效地址。
    • 执行周期: 除空操作以及 NOP 指令外,所有指令都包括执行周期,用以完成指令的主要功能。
    • 中断周期: 如果在前面三个过程中有设备发出了中断请求,则在执行完上述三个周期后,执行中断隐指令。
  • 并不是每一条指令都包括完整的四个阶段。

7.1.3 机器周期

概念

指令执行的每个阶段,称为一个机器周期,也称为工作周期。

如何确定机器周期的长度

  • 每条指令的执行步骤
  • 每一步骤所需的时间
  • 以完成最复杂、最慢指令功能的时间为准

统一机器周期的确定

  • 计算机中,最慢指令为访存指令,因此以一次访存所需时间作为机器周期。
  • 若 “指令字长 = 存储字长”,则 “访存周期 = 机器周期”。

CPU 工作周期的标志

我们需要根据下述 4 个触发器的输出值来确定 CPU 当前所处的工作周期。

其中,若 CPU 处于取指周期,则会将 FE 置 1,若为间址周期,则会置 IND 为 1,以此类推。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.1.4 时钟周期

概念

  • 将一个机器周期分成若干个时间相等的时间段,每段称为一个时钟周期。(节拍、状态)
  • 时钟周期是控制计算机操作的最小单位时间。
  • 用时钟周期控制微操作命令,每个时钟周期产生一个或几个微操作命令。
  • 常用 T0,T1,T2,T3T_0,T_1,T_2,T_3 来描述时钟周期。

时钟周期的产生方法

用计数器和译码器来控制每次执行的微操作。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.1.5 多级时序系统

指令周期、机器周期、时钟周期(节拍、状态)组成多级(三级)时序系统。

其中如果每个机器周期都包含了相同数量的时钟周期,则称为定长机器周期,否则为不定长机器周期。一个指令周期包含了若干个机器周期,一个机器周期包含了若干个时钟周期。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.1.6 超线程技术与双核处理器

超线程技术的概念

  • 超线程技术(Hyper-Threading)是 Intel 公司提出的一种提高 CPU 性能的技术,可将一个物理 CPU 当作两个逻辑 CPU 使用,同时执行多个线程,从而提高效率。
  • 超线程处理器内部的两个逻辑处理器共享一组处理器执行单元,运算能力提高 30%。
  • 超线程技术可将处理器内部的闲置资源利用起来,当并行执行两个线程时,负责处理第二个线程的逻辑处理器,仅使用运行第一个线程的处理器不使用的资源。

超线程技术的实现

  • 实现超线程技术的前提是需要五大支持:CPU、主板芯片组、主板 BIOS、操作系统、应用软件
  • 执行单个线程时,该技术反而下降,因为打开超线程后,处理器内部缓存被划分为几个区域,互相共享内部资源,单个子系统性能反而下降。
  • 超线程技术最早出现在 2002 年的 pentium4 处理器,以及后续 2009 的 Core i 系统处理器。

双核处理器

  • 双核处理器是在一个处理器芯片上集成了两个 “物理的” 运算核心。
  • 1989年, Intel 工程师首先提出了双核的概念,1995 年首先发布了双核产品,2005 年首先提供主流价位的双核处理器。
  • 双核处理器并不能达到同频率两个单核处理器的计算能力,IBM 公司曾对比过 AMD 和 Intel 双核处理器的性能,在多线程任务环境下,大约比单核提高 60%。

超线程与双核处理器的区别

  • 开启了超线程技术的单核处理器与双核处理器在操作系统中都被识别为两个处理器,二者的区别在于,前者是两个 “逻辑” 处理器,后者是两个 “物理” 处理器。
  • 超线程的逻辑处理器并没有独立的执行单元、整数单元、寄存器甚至缓存,它们在运行时仍需要共用执行单元、缓存和总线接口。
  • 执行多线程时,超线程的两个处理器交替工作,当争用某资源时,一个线程必须暂停并让出资源。

多核多线程技术

处理器有多个物理内核,每个内核采用超线程技术。

几种微处理器的内部结构

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.2 指令周期的操作命令分析

7.2.1 取指周期

  1. PC \rightarrow MAR \rightarrow 地址线
  2. 1 \rightarrow R(CU 发信号到控制总线)
  3. M(MAR) \rightarrow MDR
  4. MDR \rightarrow IR
  5. OP(IR) \rightarrow CU(将操作码部分交给 CU 译码)
  6. (PC)+1 \rightarrow PC

计算机组成原理完整学习笔记(七):CPU 的结构与功能

微操作数据传递的原理

以下图 PC 将数据传给 MAR 为例,数据传递通道中间有一个受控门,只有当受控门中的受控端收到有效信号后,受控门就会打开,PC 的数据就会流向 MAR。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

控制单元根本任务

  1. 根据指令要求依次发出一系列控制信号
  2. 控制信号依次打开一系列受控门
  3. 依次打开的受控门导致一系列数据流动

控制信号也称为微操作命令。

7.2.2 间址周期

  1. Ad(IR) \rightarrow MAR(将指令中的地址部分送到 MAR 中)
  2. 1 \rightarrow R(CU 发信号到控制总线)
  3. M(MAR) \rightarrow MDR(从主存中读回数据到 MDR 中)
  4. MDR \rightarrow Ad(IR)(将数据写回到指令的地址部分)

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.2.3 执行周期

非访存指令

指令的执行阶段,都不会访存到存储器。

  • CLA

清 0 指令,微操作是 0ACC0 \rightarrow ACC,将累加器清零。

  • COM

取反指令,微操作是 ACCACC\overline{ACC} \rightarrow ACC,累加器内容按位取反。

  • SHR

算术右移,有两个微操作。

  1. L(ACC)R(ACC)L(ACC) \rightarrow R(ACC),表示累加器每一位都移到右边一位。
  2. ACC0ACC0ACC_0 \rightarrow ACC_0,表示最左边的符号位保持不变,因此是算术右移。
  • CSL

循环左移,有两个微操作。

  1. R(ACC)L(ACC)R(ACC) \rightarrow L(ACC),表示累加器每一位都移到左边一位。
  2. ACC0ACCnACC_0 \rightarrow ACC_n,表示最左边的位移动到最右边,因此是循环左移。
  • STP

停机指令,微操作是 0G0\rightarrow G,一旦控制信号有效机器就会停掉。

访存指令

  • 加法指令(ADD X)
  1. Ad(IR)MARAd(IR)\rightarrow MAR(将指令的地址部分送到 MAR)
  2. 1R1\rightarrow R(读信号)
  3. M(MAR)MDRM(MAR)\rightarrow MDR(将加法所需数据从内存读出)
  4. (ACC)+(MDR)ACC(ACC)+(MDR)\rightarrow ACC(与 ACC 中的数相加)
  • 存数指令(STA X)
  1. Ad(IR)MARAd(IR)\rightarrow MAR(将指令的地址部分送到 MAR)
  2. 1W1\rightarrow W(写信号)
  3. ACCMDRACC\rightarrow MDR(将存数写入MDR)
  4. MDRM(MAR)MDR\rightarrow M(MAR)(写入数据)
  • 取数指令(LDA X)
  1. Ad(IR)MARAd(IR)\rightarrow MAR(将指令的地址部分送到 MAR)
  2. 1R1\rightarrow R(读信号)
  3. M(MAR)MDRM(MAR)\rightarrow MDR(读出数据到 MDR)
  4. MDRACCMDR\rightarrow ACC(将数据写入累加器)

转移指令

  • 无条件转(JMP X)

Ad(IR)PCAd(IR)\rightarrow PC(将跳转地址赋给PC)

  • 条件转移(BAN X,负则转)

ACC0Ad(IR)+A0(PC)PCACC_0Ad(IR)+\overline{A_0}(PC)\rightarrow PCACC0ACC_0 为累加器中数据的符号位,若符号位为 1,即为负数,则跳转)

7.2.4 中断周期

一、保存断点

中断隐指令中需要保存断点,通常断点都保存在内存的 0 号单元中。

  1. 0 \rightarrow MAR(CU 传 0 到 MAR,作为断点保存地址)
  2. 1 \rightarrow W(CU 发出写命令)
  3. PC \rightarrow MDR(将即将要执行的指令地址送到 MDR,PC 中的内容就是断点)
  4. MDR \rightarrow M(MAR)(将断点写入内存中)

二、执行中断处理程序(PC跳转)

  1. 向量地址 \rightarrow PC(实现 PC 的跳转,CU 将数据流交给 PC)

三、硬件关中断

  1. 0 \rightarrow EINT(将中断总允许位置 0)

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.2.5 指令执行的完整分析

ADD @XADD\ @X 指令为例来分析指令执行周期。

取指周期

计算机组成原理完整学习笔记(七):CPU 的结构与功能

CU 下的点为各种控制信号,数据通道中的小圈为受控门,受控门收到控制信号的控制。

  1. C0:PCMARC_0:PC\rightarrow MAR
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)MDRC_2:M(MAR)\rightarrow MDR
  4. C3:MDRIRC_3:MDR\rightarrow IR
  5. C4:OP(IR)CUC_4:OP(IR)\rightarrow CU
  6. (PC)+1PC(PC)+1\rightarrow PC

计算机组成原理完整学习笔记(七):CPU 的结构与功能

间址周期

计算机组成原理完整学习笔记(七):CPU 的结构与功能

此处的指令需要间址,因此有间址周期。

  1. C5:MDRMARC_5:MDR\rightarrow MAR(将 MDR 指令中的形式地址传给 MAR)
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)MDRC_2:M(MAR)\rightarrow MDR(取回有效地址)
  4. C3:MDRAd(IR)C_3:MDR\rightarrow Ad(IR)(将有效地址送到 IR 的地址部分)

计算机组成原理完整学习笔记(七):CPU 的结构与功能

执行周期

计算机组成原理完整学习笔记(七):CPU 的结构与功能

接下来需要根据有效地址取回数据,再将数据与累加器中数据相加得到结果。

  1. C5:MDRMARC_5:MDR\rightarrow MAR(将 MDR 指令中的有效地址传给 MAR)
  2. $C_1:MAR\rightarrow $ 地址线
  3. C2:M(MAR)MDRC_2:M(MAR)\rightarrow MDR(取回数据)
  4. C7:MDRALUC_7:MDR\rightarrow ALU(将数据送到算术逻辑单元)
  5. C6:ACALUC_6:AC\rightarrow ALU(将累加器中数据送到算术逻辑单元)
  6. CUALUCU\rightarrow ALU(加信号有效)
  7. C8:ALUACC_8:ALU\rightarrow AC(将加法结果送到累加器)

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.3 流水线技术

7.3.1 指令的二级流水

计算机组成原理完整学习笔记(七):CPU 的结构与功能

  • 采用指令预取的方式,第一条指令还未执行结束,第二条指令就开始取指。

  • 若取指和执行阶段时间完全重叠,则指令周期减半,速度提高 1 倍。

7.3.2 指令的六级流水

将指令的执行分为下述六个阶段。

  1. 取指
  2. 译码
  3. 计算操作数地址
  4. 取数
  5. 执行
  6. 写回

计算机组成原理完整学习笔记(七):CPU 的结构与功能

六级流水,则从 T6T_6 开始,每个时间单位完成一条指令,9 条指令只需 14 个时间单位。

7.3.3 流水线性能

吞吐量

单位时间内流水线所完成指令或输出结果的数量。

mm 级流水线,各段时间为 Δt\Delta t,则最大吞吐率为
Tpmax=1Δt, T_{pmax}=\displaystyle\frac{1}{\Delta t},
而实际吞吐率为(连续处理 nn 条指令的吞吐率)
Tp=nmΔt+(n1)Δt, T_p=\displaystyle\frac{n}{m*\Delta t+(n-1)*\Delta t},
可以发现,如果 nn 趋向于无穷大
limnTp=Tpmax \lim_{n\rightarrow \infty}T_p= T_{pmax}

加速比 SpS_p

mm 段流水线的速度与等功能的非流水线的速度之比。

设流水线各段时间为 Δt\Delta t,则完成 nn 条指令在 mm 段流水线上共需
T=mΔt+(n1)Δt, T=m*\Delta t+(n-1)*\Delta t,
而完成 nn 条指令在等效的非流水线上共需
T=n(mΔt), T'=n*(m*\Delta t),
则我们可以求得
Sp=nmΔtmΔt+(n1)Δt=nmm+n1 S_p=\displaystyle\frac{nm\Delta t}{m\Delta t+(n-1)\Delta t}=\displaystyle\frac{nm}{m+n-1}
nn\rightarrow \infty 时,我们可以得到
limnSp=m \lim_{n\rightarrow \infty}S_p= m

效率

  • 效率,即流水线中各功能段的利用率。
  • 由于流水线有建立时间和排空时间,因此各功能段的设备不可能一直处于工作状态。

=线线=mnΔtm(m+n1)Δt=nm+n1 效率=\displaystyle\frac{流水线各段处于工作时间的时空区}{流水线中各段总的时空区}=\displaystyle\frac{mn\Delta t}{m(m+n-1)\Delta t}=\displaystyle\frac{n}{m+n-1}
nn\rightarrow \infty 时,效率趋近于 11

计算机组成原理完整学习笔记(七):CPU 的结构与功能

7.3.4 流水线的相关问题

结构相关

不同指令争用同一功能部件产生资源冲突。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

如在上述的六级流水线中,取指与取数发生了冲突。

解决办法:

  1. 后续指令停顿
  2. 指令存储器和数据存储器分开,多部件(哈佛结构)
  3. 指令预取技术(仅适用于访存周期短的情况)
    • 指令执行过程中,只要取指部件空闲,就一直去内存中取指令,将指令放入CPU的指令预取队列中。
    • 将来一旦发现取指与取数冲突的情况,就以取数为有限,取指暂停。

数据相关

不同指令因重叠操作,可能改变操作数的读/写访问顺序,数据相关有三种,分别是 (1) 写后读相关,(2) 读后写相关,(3) 写后写相关。下面主要分析写后读相关冲突。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

现有上述两条指令,其流水线执行过程如下。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

可以看到在 R1R_1 还未写回时,就在取数过程中被取走了,因此发生了错误。

解决办法:旁路技术。

  • 我们将 ALU 的输出端直接连向输入端,即可在第一条指令执行结束时,就将 R1R_1 写入 ALU 的输出端口,从而避免错误发生。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

控制相关

控制相关问题由转移指令引起,如下述的执行指令。DIV 指令已经执行了几个周期了,但是 BNE 指令是跳转指令,因此 DIV 指令执行的多余周期全部作废,造成了流水线效率的浪费。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

解决办法:

  • 为了解决这个问题,我们采用了分支预测法。
  • 例如对于一个 100 次的循环,不管循环内容,只要知道对于这种 100 次的循环来说,前 99 次走到循环的末尾,都要跳回到循环的上部继续往下走。因此我们我们遇到跳转指令时,就直接从跳转位置开始取指令,降低出错概率。

7.3.5 提高机器速度的方法

一、提高访存速度(CPU 与主存)

高速芯片、Cache、多体并行

二、提高 I/O 和主机之间的传送速度

中断、DMA、通道、I/O处理机、多总线

三、提高运算器速度

高速芯片、改进算法、快速进位链

总结

因此,提高整机处理能力,主要从两个角度入手。

  1. 高速器件
  2. 改进系统结构,挖掘系统的并行性

7.3.6 流水线的多发技术

一、超标量技术

  • 每个时钟周期内可并发发射多条独立指令,配置多个功能部件。
  • 不能调整指令的执行顺序: 通过编译优化技术,把可并行执行的指令搭配起来。

计算机组成原理完整学习笔记(七):CPU 的结构与功能

二、超流水线技术

  • 在一个时钟周期内再分段(3段),在一个时钟周期内一个功能部件使用多次(3次)
  • 不能调整指令的执行顺序: 靠编译程序解决优化问题

计算机组成原理完整学习笔记(七):CPU 的结构与功能

三、超长指令字技术

  • 由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
  • 采用多个处理部件。

计算机组成原理完整学习笔记(七):CPU 的结构与功能