408 计算机组成原理 知识点记忆(5)中央处理器

408 计算机组成原理 知识点记忆(5)中央处理器

前言

本文基于王道考研《计算机组成原理考研复习指导》与唐朔飞《计算机组成原理》(第2版)、袁春风《计算机组成与系统结构》教材内容,结合 408 考研大纲,系统梳理中央处理器的核心知识记忆点和框架,既为个人复习沉淀思考,亦希望能与同行者互助共进。

本章是全课程的综合与高潮,把前四章的部件组装成能自动执行指令的 CPU,流水线则把"串行执行"推向"并行执行"。

核心知识记忆点+理解性说明

第五章 中央处理器

1. CPU的功能和基本结构

CPU具体功能

  1. 指令控制。完成取指令(也称取指)、分析指令和执行指令的操作,即程序的顺序控制。

  2. 操作控制。产生完成一条指令所需的操作信号,把各种操作信号送到相应的部件,从而控制这些部件按指令的要求正确执行。3)时间控制。严格控制各种操作信号的出现时间、持续时间及出现的时间顺序。

  3. 数据加工。对数据进行算术和逻辑运算。

  4. 中断处理。对运行过程中出现的异常情况和中断请求进行处理。

  5. 运算器(指令的ALU实现 P136)

    运算器主要由算术逻辑单元(ALU)、暂存器、累加寄存器(ACC)、通用寄存器组(GPRs)、程序状态字(PSW)寄存器、移位寄存器、计数器(CT)等组成。主要功能是根据控制器送来的命令,对数据执行算术运算(加、减、乘、除)、逻辑运算(与、或、非、异或、移位、求补等)或条件测试(用于设置ZF、SF、OF和CF等标志位,作为条件转移的判断条件)。

  6. 控制器(可采用硬连接线方式实现,也可以微程序设计方式,两种结合也可以控制器主要由程序计数器(PC)、指令寄存器(IR)、指

    令译码器(ID)、时序电路和微操作信号发生器等组成。主要功能是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。

CPU中的寄存器按汇编语言(或机器语言)程序是否可访问,可分为两类:

一类是用户可见寄存器,可对这类寄存器编程,以通过使用这类寄存器减少对主存储器的访问次数,如通用寄存器组(含基址/变址寄存器)、程序状态字寄存器、程序计数器;

另一类是用户不可见寄存器,对用户是透明的,不可对这类寄存器编程,它们被控制部件使用,以控制CPU的操作,如存储器地址寄存器、存储器数据寄存器、指令寄存器、暂存寄存器、累加寄存器、移位寄存器。

2. 指令执行过程

CPU工作周期 取指周期 间址周期 执行周期 中断周期

周期名称 特点
指令周期 从指令取出到执行完成
取指周期 从内存中读出一个指令字的最短时间
存取时间 发起一次内存读/写到完成读/写的时间
存取周期 连续完成两次读/写之间的"最短"时间间隔,通常存取周期大于存取时间
机器周期 执行指令周期当中一步相对完整的操作所用的时间,因为 CPU 速度比主存快,因此机器周期一般设置为存取周期
时钟周期 时钟周期是主频的倒数,是 CPU 中最小的时间单位,时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定

访存目的

取指令

取操作数有效地址

取操作数、存操作数

保存断点、执行中断服务程序、恢复断点

  1. 取指周期
    取指周期的任务是根据PC中的内容从主存储器中取出指令代码并存放在IR中。
    PC中存放的是指令的地址,根据此地址从内存单元中取出的是指令,并放在指令寄存器IR中,取指令的同时,PC加1。
    取指周期的数据流向如下:
  2. PC------>MAR------>地址总线------>存储器。
  3. CU发出读命令------>控制总线------>主存储器。
  4. 主存储器数据总线MDR&IR(存放指令)。
  5. CU发出控制信号9PC加1。
  1. 间址周期

    间址周期的任务是取操作数有效地址。以一次间址为例,将指令中的地址码送到MAR并送至地址总线,此后CU向主存储器发出读命令,以获取有效地址并存至MDR。

    间址周期的数据流向如下:

  2. Ad(IR)(或MDR)1MAR2地址总线3主存储器。

  3. CU发出读命令4控制总线5主存储器。

  4. 主存储器数据总线7MDR(存放有效地址)。

    其中,Ad(IR)表示取出IR中存放的指令字的地址字段。

  5. 执行周期

    执行周期的任务是取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。

  1. 中断周期
    中断周期的任务是处理中断请求。假设程序断点存入堆栈中,并用SP指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据。
    中断周期的数据流向如下:
  2. CU控制将SP减1,SP1MAR2地址总线3主存储器。
  3. CU发出写命令4控制总线5主存储器。
  4. PCMDR7数据总线8主存储器(程序断点存入主存储器)。
  5. CU(中断服务程序的入口地址)9PC。

CPU执行一条指令的大致过程如下:

  1. 取指令。从PC指出的内存单元中取出指令送到指令寄存器(IR)。

  2. 对IR中的指令操作码译码并计算下条指令地址。不同指令的功能不同,即指令涉及的操作过程不同,因而需要不同的操作控制信号。(3)计算源操作数地址并取源操作数。根据寻址方式确定源操作数地址计算方式,若源操作数是存储器数据,则需要一次或多次访存,例如,对于间接寻址或两个操作数都在存储器的指令,需要多次访存;若源操作数是寄存器数据,则直接从寄存器取数,无须访存。(4)对操作数进行相应的运算。在ALU或加法器等运算部件中对取出的操作数进行运算。

  3. 目的操作数地址计算并存结果。根据寻址方式确定目的操作数的地址计算方式,将运算结果存入存储单元中,或存入通用寄存器中。

  4. 单周期处理器

    单周期处理器对所有指令都选用相同的执行时间来完成。此时每条指令都在一个时钟周期内完成 (CPI=1)(CPI=1)(CPI=1),指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。因此,指令周期取决于执行时间最长的指令的执行时间。对于那些本来可以在更短时间内完成的指令,仍要在这个较长的周期内完成,会降低整个系统的运行速度。

  5. 多周期处理器

    多周期处理器对不同类型的指令选用不同的执行步骤。指令需要几个周期就为其分配几个周期,因此可选用不同个数的时钟周期来完成不同指令的执行过程 (CPI>1)(CPI>1)(CPI>1),不再要求所有指令占用相同的执行时间。多指令周期方案中指令之间仍是串行执行的。

  6. 流水线处理器

    流水线处理器采用指令之间并行执行的方案,其追求的目标是力争在每个时钟周期完成一条指令的执行过程(只在理想情况下才能达到该效果,此时 CPI=1CPI=1CPI=1)。这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。

3. 数据通路的功能和基本结构

数据在指令执行过程中所经过的路径,包括路径上的部件,称为数据通路,ALU、通用寄存器、状态寄存器、异常和中断处理逻辑等都是指令执行时数据流经的部件,都属于数据通路的一部分。

数据通路描述了信息从哪里开始,中间经过哪些部件,最后被传送到哪里。数据通路由控制部件控制,控制部件根据每条指令功能的不同,生成对数据通路的控制信号。

  1. 组合逻辑元件(操作元件)
    在组合逻辑元件中,任何时刻产生的输出仅取决于当前的输入。组合逻辑元件不含存储信号的记忆单元,也不受时钟信号的控制,输出与输入之间无反馈通路,信号是单向传输的。数据通路中常用的组合逻辑元件有加法器、算术逻辑单元(ALU)、译码器、多路选择器、三态门等,。

操作元件属于组合逻辑元件,其输出只取决于当前的输入,数据通路中最常用的操作元件有多路选择器,加法器,算术逻辑部件

  1. 时序逻辑元件(状态元件)
    任何时刻的输出不仅与该时刻的输入有关,还与该时刻以前的输入有关,因此时序电路必然包含存储信号的记忆单元。此外,时序逻辑元件必须在时钟节拍下工作。各类寄存器和存储器,如通用寄存器组、程序计数器、状态/移位/暂存/锁存寄存器等,都属于时序逻辑元件。

状态元件属于时序逻辑电路,具有存储功能

  1. 带"写使能"输入的暂存寄存器,实现指令寄存器,通用寄存器组P131
  2. 输出端带一个三态门寄存器,通常用于与总线相连的寄存器
  3. 带复位(清0)功能的寄存器
  4. 带计数(自增)功能的寄存器
  5. 带移位功能的寄存器

CPU内部单总线方式 将ALU及所有寄存器都连接到一条内部总线

数据通路和控制情况见右边

CPU内部多总线方式

专用数据通路方式

  1. 通用寄存器之间传送数据

    在寄存器和总线之间有两个控制信号:Rin和Rout。当Rin有效时,控制将总线上的信息存到寄存器 R中;当Rout有效时,控制将寄存器R的内容送至总线。下面以程序计数器PC为例,将PC的内容送至MAR。实现该操作的流程及控制信号为

    PCout 和MARin有效,PC内容→MAR

    (PC)→MAR(PC) \to MAR(PC)→MAR

  2. 从主存读取数据 从主存中读取信息可能是数据或者指令

  3. 将数据写入主存

  4. 执行算术或者逻辑单元

  5. 修改程序计数器的值

4. 控制器的功能和工作原理

控制器部件

  1. 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据。
  2. 输入设备和输出设备通过接口电路与总线相连接。3)内存储器、输入设备和输出设备从地址总线接收地址信息,从控制总线得到控制信号,通过数据总线与其他部件传送数据。
  3. 控制器部件从数据总线接收指令信息,从运算器部件接收指令转移地址,送出指令地址到地址总线,还要向系统中的部件提供它们运行所需要的控制信号。控制器是计算机系统的指挥中心,控制器的主要功能有:
  4. 从主存中取出一条指令,并指出下一条指令在主存中的位置。
  5. 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
  6. 指挥并控制CPU、主存、输入设备和输出设备之间的数据流动方向。

硬布线控制器由复杂的组合逻辑门电路和触发器构成,也称组合逻辑控制器,其原理是根据指令的要求、当前的时序及内外部的状态,按时间的顺序发送一系列微操作控制信号。

控制单元(CU)的输入信号来源如下:

  1. 经指令译码器译码产生的指令信息。它与时钟配合产生不同的控制信号。
  2. 时钟脉冲,其频率为机器的主频。它使CU能够按一定的节拍发出各个控制信号。
  3. 来自执行单元的反馈信息即标志。CU有时需依赖CPU当前的状态来产生控制信号。

微程序控制器采用存储逻辑实现,也就是将微操作信号代码化,使每条机器指令转化成为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制信号由微指令产生。

微程序的设计思想就是将每条机器指令编写成一个微程序,每个微程序包含若干微指令,每条微指令对应一个或几个微操作命令。因此,执行一条指令的过程就是执行一个微程序的过程,这些微程序存储在一个控制存储器中。目前,大多数计算机都采用微程序设计技术。

  1. 微命令与微操作

    在微程序控制的计算机中,控制部件向执行部件发出的各种控制命令称为微命令,它是构成控制序列的最小单位。例如,打开或关闭某个控制门的电位信号、某个寄存器的打入脉冲等。执行部件收到微命令后所进行的操作称为微操作,微命令和微操作是一一对应的。微命令有相容性和互斥性之分。相容性微命令是指那些可以同时出现、共同完成某一些微操作的微命令;而互斥性微命令是指在机器中不允许同时出现的微命令。

  2. 微指令与微周期

    微指令是若干微命令的集合,一条微指令通常至少包含两大部分信息:

  3. 操作控制字段,也称微操作码字段,用于产生某一步操作所需的各种操作控制信号。2. 顺序控制字段,也称微地址码字段,用于控制产生下一条要执行的微指令地址。微周期是指从控制存储器中取出并执行一条微指令所需的全部时间,通常为一个时钟周期。

  4. 主存储器与控制存储器

    主存储器用于存放程序和数据,在CPU外部,用RAM实现。控制存储器(CM)用于存放微程序,在CPU内部,用ROM实现。存放微指令的控制存储器的单元地址称为微地址。

  5. 地址寄存器(MAR),用于存放主存的读/写地址。

  6. 微指令地址寄存器(μPC或CMAR),用于存放待执行的微指令在控制存储器中的微地址。3. 指令寄存器(IR),用于存放从主存中读出的指令。

  7. 微指令寄存器(μIR或CMDR),用于存放从控制存储器中读出的微指令。

微程序控制器的基本结构,其主要部件包括:

  1. 起始和转移地址形成部件(简称微地址形成部件),用于产生初始和后继微地址,以保证微指令的连续执行。
  2. 微指令地址寄存器,接收微地址形成部件送来的微地址,为读取微指令做准备。
  3. 控制存储器,它是微程序控制器的核心部件,用于存放各指令对应的微程序。
  4. 微指令寄存器,其位数等于微指令字长。

实际上就是在微程序控制器的控制下计算机执行机器指令的过程,这个过程可描述为:

  1. 执行取指令公共操作。在机器开始运行时,自动地将取指微程序的入口地址送入 μPC,并从CM中读出相应的微指令并送入μIR。取指微程序的入口地址一般为CM的0号单元,取指微程序执行完成后,从主存中取出的机器指令就已存入指令寄存器中。2. 由机器指令的操作码字段通过微地址形成部件产生该机器指令所对应的微程序的入口地址,并送入μPC。
  2. 从CM中逐条取出对应的微指令并执行。
  3. 执行完对应于一条机器指令的一个微程序后,又回到取指微程序的入口地址,继续第1步,以完成取下一条机器指令的公共操作。以上是一条机器指令的执行过程,如此周而复始,直到整个程序执行完毕。

通常,一条机器指令对应一个微程序。任何机器指令的取指令操作都是相同的,因此可将取指令操作的微命令统一编成一个微程序,这个微程序只负责将指令从主存单元中取出并送至指令寄存器。此外,也可编写出对应间址周期的微程序和中断周期的微程序。这样,控制存储器中的微程序个数应为机器指令数再加上对应取指、间址和中断周期等公共的微程序数。

微程序的编码方式/微指令的控制方式

直接编码(直接控制)方式 无需译码

字段直接编码方式 将微指令的操作控制字段分为若干小字段,把互斥性微命令放在同一个字段中,把相容性微命令放在不同字段中,每个字段独立编码(一般每小段还要留出一个状态,表示本字段不发出任何微命令)

字段直接编码方式/隐式编码 作为直接编码的辅助

后继微地址的形成主要有以下几个基本类型:

  1. 由微指令的后继地址字段(也称下地址字段)指出。在微指令格式中设置一个后继地址字段,由微指令的后继地址字段直接指出后继微指令的地址,这种方式也称断定方式。
  2. 根据机器指令的操作码形成。当机器指令取自指令寄存器后,微指令的地址由操作码经微地址形成部件形成,该部件输出的是对应机器指令微程序的首地址。
  3. 增量计数器法,即 (μ PC)+1→μ PC(\mu\,PC)+1 \to \mu\,PC(μPC)+1→μPC,适用于后继微指令地址是连续的情况。
  4. 根据各种标志决定下一条微指令分支转移的地址。
  5. 由硬件直接产生微程序入口地址。电源加电后,第一条微指令的地址可由专门的硬件电路产生,并送至μPC,这个地址即为取指周期微程序的入口地址。

水平型微指令 直接编码 字段直接编码 字段间接编码都是一条水平型微指令定义并执行多个并行操作的微命令A1 A2......An-1 An 判断测试字段 后继地址字段

操作类型 顺序控制

垂直型微指令 一条只能定义并执行一种微命令

uop rd rs

微操作吗 目的地址 源地址

微程序控制器采用了存储程序原理,每条指令都要从控制存储器中取一次,影响速度

5. 异常和中断机制

A. 异常和中断的基本概念

CPU数据通路中有相应的异常检测和响应逻辑外设接口 中断请求 控制逻辑操作系统 中断服务程序

B. 异常和中断的分类

程序性异常也称软件中断,是指在CPU内部

因执行指令而引起的异常事件。如整除0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越

界、缺页等。按异常发生原因和返回方式的不同,可分为故障、自陷 陷阱/陷入 和终止 硬件故障、控制器出错、存储器检验错、总线错误。

可屏蔽中断 指通过可屏蔽中断请求线 INTR向CPU发出的中断请求。不可 NMI

C. 异常和中断的检测与响应

异常检测由CPU自身完成,不必通过外部某个信号通知CPU

对于中断,CPU必须通过中断请求线获取中断源信息,才能知道哪个设备发生了何种中断所有的异常和中断事件都是硬件检测发现的

根据识别中断服务程序地址方式,可分为中断向量和非向量中断根据中断处理过程是否被打断,可分为单重中断和多重中断

异常和中断响应过程

  1. 关中断
    在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断。通常通过设置"中断允许"(IF)触发器来实现,若IF置为1,则为开中断,表示允许响应中断;若IF置为0,则表示关中断,表示不允许响应中断。
  2. 保存断点和程序状态
    为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,这是为了支持异常或中断的嵌套。
    异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器PSW的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到PSW中。
  3. 识别异常和中断并转到相应的处理程序
    异常和中断源的识别有软件识别和硬件识别两种方式。异常和中断源的识别方式不同,异常大多采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式。

软件识别方式是指CPU 设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序。

硬件识别方式也称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因此可以根据类型号快速找到对应的处理程序。整个响应过程是不可被打断的。中断响应过程结束后,CPU就从PC中取出对应中断服务程序的第一条指令开始执行,直至中断返回,这部分任务是由CPU通过执行中断服务程序完成的,整个中断处理过程是由软/硬件协同实现的。

6. 指令流水线

A. 指令流水线的基本概念

指令流水线:时间上的并行技术

空间上的并行技术:超标量处理机

B. 指令流水线的基本实现

一条指令的执行过程分为如下五个阶段(功能段/流水段):

● 取指(IF):从指令存储器或Cache中取指令。

● 译码/读寄存器(ID):操作控制器对指令进行译码,同时从寄存器堆中取操作数。● 执行/计算地址(EX):执行运算操作或计算地址。

● 访存(MEM):对存储器进行读/写操作。

● 写回(WB):将指令执行结果写回寄存器堆。

理想情况下,CPI为1

为了利于实现指令流水线,指令集应具有如下特征:

  1. 指令长度应尽量一致,有利于简化取指令和指令译码操作。否则,取指令所花的时间长短不一,使得取指部件极其复杂,并且也不利于指令译码。
  2. 指令格式应尽量规整,尽量保证源寄存器的位置相同,有利于在指令未知时就可取寄存器操作数,否则须译码后才能确定指令中各寄存器编号的位置。
  3. 采用LOAD/STORE型指令,其他指令都不能访问存储器,这样可把LOAD/STORE 指令的地址计算和运算指令的执行步骤规整在同一个周期中,有利于减少操作步骤。
  4. 数据和指令在存储器中"按边界对齐"存放。这样,有利于减少访存次数,使所需数据在一个流水段内就能从存储器中得到。

指令流水段个数以最复杂指令所用功能段个数为准流水段长度以最复杂操作所花时间为准

每条指令的流水段长度

在插入"空"段时,应遵循两个原则:

  1. 每个功能部件每条指令只能用一次(如寄存器写口不能用两次或以上);2. 每个功能部件必须在相同的阶段被使用(如寄存器写口总是在第5 阶段被使用)。

每个流水段后面都要增加一个流水段寄存器,用于锁存本段处理完的所有数据,以保证本段的执行结果能在下个时钟周期给下一流水段使用,如图所示。各种寄存器和数据存储器均采用统一时钟 CLK 进行同步,每来一个时钟,各段处理完的数据都将锁存到段尾的流水段寄存器中,作为后段的输入。同时,当前段也会收到前段通过流水段寄存器传递过来的数据。

5段流水线数据通路基本框架

流水段之间有一个流水段寄存器,例如,IF/ID寄存器是介于IF段和ID段之间的寄存器。每个流水段寄存器用来存放从当前流水段传到后面所有流水段的信息。因为每个段间传递的信息不一样,所以各流水段寄存器的长度也不一样。

PC和各个流水段寄存器都没有写使能信号。这是因为每个时钟都会改变PC的值,所以PC不需要写使能控制信号;每个流水段寄存器在每个时钟都会写入一次,因此,流水段寄存器也不需要写使能控制信号。此外,前两个流水段的功能每条指令都相同,是公共流水段,因此,也不需控制信号。其余段的控制信号如下。

Exec 段的控制信号有以下5个。

  1. ExtOp(扩展器操作):1-符号扩展;0-零扩展。
  2. ALUSrc(ALU的B口来源):1-来源于扩展器;0-来源于busB。
  3. ALUop(用于辅助局部ALU控制逻辑来决定ALUctr的操作信号):3位编码。
  4. RegDst(指定目的寄存器):1−Rd1-Rd1−Rd;0−Rt0-Rt0−Rt。
  5. R-type(区分是否为R-型指令):1-R-型指令;0-非R-型指令。
    Mem段的控制信号有以下3个。
  6. MemWr(数据存储器DM的写信号):sw指令时为1,其他指令为0。
  7. Branch(是否为分支指令):分支指令时为1,其他指令为0。
  8. Jump(是否为无条件转移指令):无条件转移指令时为1,其他指令为0。
    Wr段的控制信号有两个。
  9. MemtoReg(寄存器的写入源):1−DM1-DM1−DM 输出;0-ALU输出。
  10. RegWr(寄存器堆写信号):结果写寄存器的指令都为1,其他指令为0。

每个流水段寄存器中保存的信息包括两类:一类是后面阶段需要用到的所有数据信息,包括PC+4、指令、立即数、目的寄存器、转移目标地址、ALU运算结果、标志信息等,它们是前面阶段在数据通路中执行的结果;还有一类是前面传递过来的后面各阶段要用到的所有控制信号。

流水线处理器中控制信号一旦在Reg/Dec(ID)阶段由控制器生成,就不会改变,并和数据信息同步地依次传递到后面的流水段中。

C. 结构冒险

结构冒险:由不同指令在同一时刻争用同一功能部件而形成的冲突,也称资源冲突,即由硬件资源竞争造成的冲突。

不区分指令存储器和数据存储器而只用一个存储器的话,则在load指令取数据的同时,随后的指令正好取指令,此时发生访存冲突。同样,如果不对寄存器堆的写口和读口独立设置的话,load和随后的指令也会发生寄存器访问冲突。

解决结构冒险的策略包含两方面:

  1. 通过功能段划分原则(一个部件每条指令只能使用一次,且只能在特定时钟周期使用),可以避免一部分结构冒险;
  2. 通过设置多个独立的部件来避免硬件资源冲突。
    例如,对于寄存器访问冲突,可将寄存器读口和写口独立开来,利用时钟上升沿和下降沿两次触发,使得前半周期使用写口进行寄存器写,后半周期使用读口进行寄存器读;
    对于存储器访存冲突,可把指令存储器IM和数据存储器DM分开,从而使指令和数据的访问各自独立,这样就不会发生结构冒险。事实上,现代计算机都引入了cache机制,而且L1 cache通常采用数据cache 和代码cache 分离的方式,因而也就避免了结构冒险的发生。
D. 数据冒险

数据冒险/数据相关:后面指令用到前面的指令结果,前面指令结果还没有产生

在按序执行的流水线中,只可能产生写后读冲突(前面指令写结果之前,后面指令就需要读取造成的解决方法

1 延迟执行相关指令 软件插入空操作 nop指令,浪费3条指令空间与时间;硬件阻塞 stall 气泡 不增加指令条数2.转发旁路技术 将数据通路中生成的中间数据直接转发到ALU的输入端

  1. load-use数据冒险的处理 load指令与其身后紧邻的运算类指令存在数据相关问题编译器插入nop指令

最好的办法是在程序编译时进行优化,通过调整指令顺序以避免出现load-use现象。

load-use 冒险发生的条件是:上条是load指令,并且从存储器装入寄存器的数据是当前指令的源操作数。

load-use冒险的检测越早越好,但是,再早也要在load随后的指令被取出并译码之后,因此,检测点可安排在其译码(ID)阶段。此时,若是load-use冒险,则load指令应处于执行(Ex)阶段。为了能够确定上条是否是load指令,可引入一个新的控制信号MemRead,load指令时该信号取值为1,否则取值为0。

E. 控制冒险

控制冒险:当遇到改变指令执行顺序情况,例如执行转移或返回指令,发生中断或异常时,会改变PC值,从而造成断流,也称控制冲突

对于由转移指令引起的冲突,最简单的处理方法就是推迟后续指令的执行。通常把因流水线阻塞带来的延迟时钟周期数称为延迟损失时间片C。

有以下几种办法解决控制冲突:

  1. 对于由转移指令引起的冲突,可采用和解决数据冲突相同的软件插入"nop"指令和硬件阻塞(stall)的方法。比如,延迟损失多少时间片,就插入多少条nop指令。

  2. 对转移指令进行分支预测,尽早生成转移目标地址。分支预测分为简单(静态)预测和动态预测。若静态预测的条件总是不满足,则按序继续执行分支指令的后续指令。动态预测根据程序转移的历史情况,进行动态预测调整,有较高的预测准确率。

  3. 简单预测

    简单预测与指令执行历史无关,因此,它是一种静态预测方式。可以简单预测分支指令的条件总是不满足(not taken)或总是满足(taken)。对于预测不满足的情况,流水线总是按顺序继续执行分支指令的后续指令,如果在数据通路中检测到实际条件确实不满足时,则预测正确,没有任何时间损失;如果检测到实际条件满足时,则预测不正确,此时,将分支指令后续不该执行的指令的控制信号清零,就能保证不会改变指令执行结果,相当于执行了空操作。

分支指令的转移目标地址在EX段,并在MEM由标志以确定是否将PC值更新为转移目标地址,MEM段结束后才更新地址送入PC输入端

  1. 动态预测
    它利用分支指令发生转移的历史情况来进行预测,并根据实际执行情况动态调整预测位。

(1·)一位预测位

采用一位预测位时,总是按上次实际发生的情况来预测下次分支情况,可用1表示最近一次发生转移(taken),0表示未发生转移(not taken)。

  1. 两位预测位

    4个状态中,有两个状态预测发生转移,有两个状态预测不发生转移。假定11状态表示预测发生(强转移),实际不发生时,转到状态10(弱转移),下次仍预测发生转移,如果再次预测错误(即实际不发生),才使下次预测调整为00状态(强不转移)。

  2. 延迟分支

    其主要思想是:采用编译优化来调整指令顺序,把分支指令前与分支指令无关的指令调到分支指令后面执行,以填充延迟损失时间片,不够时用nop操作指令填充。分支指令后面被填的指令位置称为分支延迟槽(branch delayslot),需要填入的指令条数(即分支延迟槽数)等于延迟损失时间片。

    因为延迟分支技术通过编译器重排指令顺序来实现,所以它属于静态调度技术。

异常或中断引起的控制冒险:

通过在数据通路的不同流水段中加入相应的检测逻辑可检测出哪条指令发生了异常。

例如,"溢出"可在Ex段检出;"无效指令"可在ID段检出;"除数为0"可在ID段检出;"无效指令地址"可在IF段检出;"无效数据地址"可在load/store指令的Ex段或Mem段检出。检测出异常的那个流水段正在执行的指令,就是发生异常的指令。

外部中断的检测可以放在第一个流水段IF或最后一个流水段Wr中进行。若放在IF中检测,因为可在取指令前进行,若发现有中断请求发生,则能确保在该时钟周期就开始执行中断服务程序,并让已经在流水线中的指令继续执行完,不需要进行指令冲刷;若放在Wr阶段进行,则需要将刚执行完的指令后面几条指令从流水线中清除掉。

对同时在5个指令流水段中发生的异常进行排序时,其顺序为 Wr>Mem>Ex>ID>IFWr>Mem>Ex>ID>IFWr>Mem>Ex>ID>IF。

处理器硬件对异常和中断引起的冒险的处理大致做法如下:当检测到有异常或中断后,首先清除发生异常的指令以及其后在流水线中的所有指令,然后保存断点,并将异常处理程序的首地址送PC的输入端。指令清除的方式和上述分支预测错误时指令清除方式类似,通常是通过相应的冲刷(flush)控制信号将指令或指令的控制信号清零(主要保证写信号RegWr和MemWr清零)来实现。许多处理器都能提供一种精确的异常和中断方式。所谓精确的异常和中断,是指处理器能够确定异常和中断发生的精确位置,即处理器响应异常和中断时,所保存的断点是精确的返回地址。

通常的做法是,每个时钟周期内,在多个流水段发生的异常的原因和断点只是被记录到特定的寄存器中,并将发生异常的标记同时记录到流水段寄存器,发生异常的指令继续在流水线中执行,直到执行到最后一个阶段,由最后阶段内的硬件检测本指令是否发生过异常或此时是否有外部中断发生,若有,则清除流水线中后面所有阶段正在执行的指令,然后转到相应的异常处理程序执行。

F. 超标量和动态流水线的基本概念

流水线吞吐率流水线的吞吐率是指在单位时间内流水线所完成的任务数量,或输出结果的数量。

流水线吞吐率(TP)的最基本公式为 TP=n/TkTP=n/T_{k}TP=n/Tk

式中,n是任务数,TkT_{k}Tk 是处理完n个任务所用的总时间。设k为流水段的段数,Δ t\Delta\,tΔt 为时钟周期。

在输入流水线中的任务连续的理想情况下,一条k段流水线能在k+n-1个时钟周期内完成n个任务。得出流水线的吞吐率为 TP=n/(k+n−1)Δ tTP=n/ (k+n-1)\Delta\,tTP=n/(k+n−1)Δt

连续输入的任务数 n→∞n \to \inftyn→∞ 时,得到最大吞吐率为 TPmax=1/Δ tTPmax=1/\Delta\,tTPmax=1/Δt。、

  1. 流水线的加速比
    完成同样一批任务,不使用流水线与使用流水线所用的时间之比。
    流水线加速比(S)的基本公式为 S=To/TkS=To/T_{k}S=To/Tk
    式中,T0表示不使用流水线的总时间;TkT_{k}Tk 表示使用流水线的总时间。一条k段流水线完成n个任务所需的时间为 Tk=(k+n−1)Δ tT_{k}=(k+n-1)\Delta\,tTk=(k+n−1)Δt。顺序执行n个任务时,所需的总时间为 T0=knΔ tT0=kn\Delta\,tT0=knΔt。将T0和 TkT_{k}Tk 值代入上式,得出流水线的加速比为
    S=knΔ t/((k+n−1)Δ t)=kn/(k+n−1)S= kn\Delta\,t/( (k+n-1)\Delta\,t )= kn/(k+n-1)S=knΔt/((k+n−1)Δt)=kn/(k+n−1)
    连续输入的任务数 n→∞n \to \inftyn→∞ 时,得最大加速比为 Smax=kSmax=kSmax=k。

超流水线(super-pipelining)技术,通过增加流水线级数来使更多的指令同时在流水线中重叠执行。超流水线并没有改变CPI的值,CPI还是1,但是,因为理想情况下流水线的加速比与流水段的数目成正比,所以,流水段越多,时钟周期越短,指令吞吐率越高。

多发射流水线(multiple issue pipelining)技术,通过同时启动多条指令(如整数运算、浮点运算、存储器访问等)独立运行来提高指令并行性。要实现多发射流水线,其前提是数据通路中有多个执行部件,如定点、浮点、乘/除、取数/存数部件等。多发射流水线的CPI能达到小于1,因此,有时用CPI的倒数IPC来衡量其性能。IPC(instructions percycle)是指每个时钟周期内完成的指令条数。例如,四路多发射流水线的理想IPC为4。

实现多发射流水线必须完成两个任务:指令打包和冒险处理。指令打包任务就是将能够并行处理的多条指令同时发送到发射槽中,因此处理器必须知道每个周期能发射几条指令,哪些指令可以同时发射。这通过推测(speculation)技术来完成,可以由编译器或处理器通过猜测指令执行结果来调整指令执行顺序,使指令的执行能达到最大可能的并行。需要结合软件推测和硬件推测来进行,软件推测指编译器通过推测来静态重排指令,此种推测一定要正确;而硬件推测指处理器在程序执行过程中通过推测来动态调度指令。根据推测打包任务主要由编译器静态完成还是由处理器动态执行,可将多发射技术分为两类:静态多发射和动态多发射。

静态多发射处理器主要通过编译器静态推测来辅助完成"指令打包"和"冒险处理"。指令打包的结果可看成将同时发射的多条指令合并到一个长指令中。通常将一个周期内发射的多个指令看成一条多个操作的长指令,称为一个发射包。静态多发射指令最初被称为超长指令字(very long instruction word,VLIW)。

静态多发射处理器的冒险处理主要是数据冒险和控制冒险。处理冒险的方式可有两种:一种是完全由编译器通过代码调度和插入nop指令来静态地消除所有冒险,无须硬件实现冒险检测和流水线阻塞;另一种是由编译器通过静态分支预测和代码调度来消除打包指令的内部依赖,由硬件检测数据冒险并进行流水线阻塞。

对于静态多发射处理器的静态调度来说,编译结果与机器结构密切相关;而对于动态调度来说,由于完全由硬件决定某个时钟周期发射哪几条指令,因而编译器仅进行指令顺序调整,而不需要根据机器结构进行指令打包。

动态多发射处理器也称为超标量(superscalar)处理器。多数超标量处理器都结合动态流水线调度(dynamic pipeline scheduling)技术,处理器通过指令相关性检测和动态分支预测等手段,投机性地不按指令顺序执行,当发生流水线阻塞时,根据指令的依赖关系,动态地到后面找一些没有依赖关系的指令提前执行。这种指令执行方式称为乱序执行(out-of-order execution)。

动态多发射流水线的执行模式有3种:按序发射、按序完成;按序发射、无序完成;无序发射、无序完成。

7. 多处理器基本概念

A. SISD、SIMD、MIMD、向量处理器的基本概念

单指令流单数据流SISD结构 单处理器 单存储器

单指令流多数据流SIMD结构 数据并行技术 单指令控制部件 多处理单元组成多指令流单数据流MISD结构 实际不存在

多指令流多数据流MIMD结构

多计算机系统 消息传递MIMD

处理器 共享多处理器SMP 共享存储MIMD

向量存储器是SIMD的变体

SIMD 数据级并行模式

MIMD 并行程度更高的线程级并行或线程级以上并行计算模式

B. 硬件多线程的基本概念

硬件多线程

细粒度多线程 多个线程之间轮流交叉执行指令,多个线程指令不相关

粗粒度多线程 连续几个时钟周期都执行同一线程的指令序列,仅在当前线程出现较大开销阻塞时,才切换线程,如Cache缺失同时多线程 SMT 在实现指令级并行的同时,实现线程级并行

C. 多核(multi-core)处理器的基本概念

多核处理器:将多个处理单元集成到单个CPU上,每个处理单元称为一个核,也称片上多处理器

D. 共享内存多处理器(SMP)的基本概念

具有共享的单一物理地址空间的多处理器称为共享内存多处理器(SMP)。

● 统一存储访问(UMA)多处理器。每个处理器对所有存储单元的访问时间是大致相同的,即访问时间与哪个处理器提出访存请求及访问哪个字无关。

● 非统一存储访问(NUMA)多处理器。某些存储器的访存速度要比其他的快,具体取决于哪个处理器提出访问请求及访问哪个字,这是由于主存被分割分配给了不同处理器。

总结(本章速记)

本章知识骨架:

    1. CPU的功能和基本结构
    1. 指令执行过程
    1. 数据通路的功能和基本结构
    1. 控制器的功能和工作原理
    1. 异常和中断机制
    • A. 异常和中断的基本概念
    • B. 异常和中断的分类
    • C. 异常和中断的检测与响应
    1. 指令流水线
    • A. 指令流水线的基本概念
    • B. 指令流水线的基本实现
    • C. 结构冒险
    • D. 数据冒险
    • E. 控制冒险
    • F. 超标量和动态流水线的基本概念
    1. 多处理器基本概念
    • A. SISD、SIMD、MIMD、向量处理器的基本概念
    • B. 硬件多线程的基本概念
    • C. 多核(multi-core)处理器的基本概念
    • D. 共享内存多处理器(SMP)的基本概念

关键速记清单:

  • CPU具体功能
  • 数据加工。对数据进行算术和逻辑运算。
  • 中断处理。对运行过程中出现的异常情况和中断请求进行处理。
  • 运算器(指令的ALU实现 P136)
  • CPU中的寄存器按汇编语言(或机器语言)程序是否可访问,可分为两类:
  • CPU工作周期取指周期间址周期执行周期中断周期
  • 访存目的
  • 取操作数有效地址
  • 取操作数、存操作数
  • 保存断点、执行中断服务程序、恢复断点
  • 取指周期
  • 取指周期的数据流向如下:
  • PC------>MAR------>地址总线------>存储器。
  • CU发出读命令------>控制总线------>主存储器。
  • 主存储器数据总线MDR&IR(存放指令)。
  • CU发出控制信号9PC加1。
  • 间址周期
  • 间址周期的数据流向如下:
  • Ad(IR)(或MDR)1MAR2地址总线3主存储器。
  • CU发出读命令4控制总线5主存储器。
  • 主存储器数据总线7MDR(存放有效地址)。
  • 其中,Ad(IR)表示取出IR中存放的指令字的地址字段。
  • 执行周期
  • 中断周期
  • 中断周期的数据流向如下:
  • CU控制将SP减1,SP1MAR2地址总线3主存储器。
  • CU发出写命令4控制总线5主存储器。
  • PCMDR7数据总线8主存储器(程序断点存入主存储器)。
  • CU(中断服务程序的入口地址)9PC。
  • CPU执行一条指令的大致过程如下:
  • 取指令。从PC指出的内存单元中取出指令送到指令寄存器(IR)。
  • 单周期处理器
  • 多周期处理器
  • 流水线处理器
  • 组合逻辑元件(操作元件)
  • 时序逻辑元件(状态元件)
  • 状态元件属于时序逻辑电路,具有存储功能
  • 带"写使能"输入的暂存寄存器,实现指令寄存器,通用寄存器组P131
  • 输出端带一个三态门寄存器,通常用于与总线相连的寄存器
  • 带复位(清0)功能的寄存器
  • 带计数(自增)功能的寄存器
  • 带移位功能的寄存器
  • CPU内部单总线方式 将ALU及所有寄存器都连接到一条内部总线
  • 数据通路和控制情况见右边
  • CPU内部多总线方式
  • 专用数据通路方式
  • 通用寄存器之间传送数据
  • PCout 和MARin有效,PC内容→MAR
  • (PC)→MAR(PC) \to MAR(PC)→MAR
  • 从主存读取数据 从主存中读取信息可能是数据或者指令
  • 将数据写入主存
  • 执行算术或者逻辑单元
  • 修改程序计数器的值
  • 控制器部件
  • 运算器部件通过数据总线与内存储器、输入设备和输出设备传送数据。
  • 从主存中取出一条指令,并指出下一条指令在主存中的位置。
  • 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作。
  • 指挥并控制CPU、主存、输入设备和输出设备之间的数据流动方向。
  • 控制单元(CU)的输入信号来源如下:
  • 经指令译码器译码产生的指令信息。它与时钟配合产生不同的控制信号。

结语

CPU 这一章,是把前四章的零件拼成一台会思考的机器。数据通路是"肌肉",控制器是"神经",时钟则是"心跳"。而流水线,是本章真正的灵魂:它用空间换时间,却也带来了结构冒险、数据冒险、控制冒险这三大代价------几乎所有现代处理器技术的演进,都可以看作是围绕这三类冒险的持续攻防:转发与冒泡化解数据冒险,分支预测缓解控制冒险,超标量与多发射则把并行度推向更深。理解到这一层,再看多核、硬件多线程与向量处理器,便只是同一思路的延伸。

参考资料

  1. 王道考研《计算机组成原理考研复习指导》
  2. 唐朔飞.计算机组成原理(第2版).
  3. 袁春风.计算机组成与系统结构.
相关推荐
2601_9499506318 小时前
考研英语资料太散?用小程序把真题、词汇和错题放到一起
人工智能·学习·考研·小程序·刷题·小程序推荐
搜词研究员3 天前
# 德立教育和达德教育哪个好?学历提升选哪家?
考研·职场和发展·学习方法·高考
博界IT精灵3 天前
浮点数的表示--IEEE 754浮点数标准
考研
唐维康3 天前
昆明理工891计算机考研真题:2022—2026五年完整收录整理
考研
aichitang20243 天前
快乐泛函每一天:希尔伯特空间中的最佳逼近与正交投影定理
人工智能·考研·算法·ai·面试·泛函分析
唐维康4 天前
昆工817信号与系统2026真题分值与复习建议
考研·昆明理工大学
唐维康4 天前
2026年昆工891考研真题应用题分值分布与重点题型解析
考研
IT毕设实战小研4 天前
基于安卓的考研资讯系统设计与实现
android·大数据·vue.js·爬虫·python·考研·课程设计
博界IT精灵5 天前
浮点数的规格化
考研