4.9 异常处理

异常:程序执行过程中,出现异常。CPU 需要终止正在执行的程序,处理异常后,再返回终止的程序继续执行。

异常的类型:

类型原因描述
内中断指令引起异常指令“主动”设计成会在某种条件下触发异常。
如溢出,或者用户定义的异常。
内中断处理器检测异常CPU“被动”发现执行错误,不得不触发异常。
如除零,单步跟踪。
外中断INTR (Interrupt Request) 可屏蔽中断线CPU 是否响应由EFLAGS 寄存器中的 IF(Interrupt Flag)控制:
IF = 1 → CPU 允许响应 INTR
IF = 0 → CPU 忽略(屏蔽)INTR
外中断NMI (Non-Maskable Interrupt) 不可屏蔽中断线紧急状况、严重硬件故障、重要监控事件
CPU 无法屏蔽该中断,必须立即响应

异常处理机制

  • 关中断:使处理器处于“禁止中断”状态,以防止新异常(或中断)破坏断点和现场
  • 保护断电和程序状态:将断点和程序状态保存到堆栈或特殊寄存器中。
    • PC 存放到 堆栈或 EPC(专门存放断点的寄存器);
    • PSWR 存放在堆栈或者 EPSWR(存放程序状态字的寄存器)
  • 识别异常事件
    • 软件识别
    • 硬件识别
设别方法识别流程添加部件
软件识别(非向量中断,MIPS)记录异常原因→查询异常状态→识别异常事件→转入中断服务程序EPC:存放断点。
故障时,EPC = PC - 4
自陷或中断时:EPC = PC.
Cause:记录异常原因的类型。

对应控制信号:EPCWr, CauseWr, IntCause
新增 PCSource 输入流,将异常查询程序入口地址写入 PC。
硬件识别(向量中断,8086)电路识别异常→从中断向量表读取入口地址→转入中断服务程序中断向量表 000H~03FFH 每个位置代表中断服务程序的入口地址。
$$中断向量地址 = 中断类型号 \times 4$$

流水线下的异常处理

  • 在关中断前,需要清除所有已在流水线中的指令:将寄存器和控制信号清零。
  • 识别哪一条发生异常:根据异常发生的流水段来确定。
  • 找到出错的指令地址:将每个阶段的指令地址都存放在每个阶段间的流水线寄存器当中,一旦出现异常,就把对应的地址放在 EPC 保存,以实现 精确中断
  • 错误的优先级:时钟周期靠前,中断优先级排队。
  • 异常处理中又出现异常或中断:中断屏蔽和中断嵌套机制。

控制器设置:有限状态机中增加异常处理的状态,每种状态占一个状态。

4.10 并行方法

指令级并行

指令级并行(Instruction-Level Parallelism, ILP):流水线中并行执行两个不存在相关性的指令。这样可以提高 CPU 执行指令的吞吐量。

指令级并行的方法:

  • 超流水线技术:增加流水线的级数,实现更多的指令执行。
  • 多发射技术:一种单时钟周期内发射多条指令的机制。通过复制计算机内的部件数量,使得每个流水线可以启动多条指令执行。

多发射处理器的两种方法:

  • 静态多发射:由编译器决定哪些指令可以并行执行。通过 超长指令字 来一次性执行多个指令。
  • 动态多发射:由处理器发射多条指令并处理冒险。
    • 超标量:试图在一个周期取出多条指令并行执行,通过在处理器中内置多条流水线来同时执行多个处理,允许指令以不同于原程序顺序的次序执行
    • 动态流水线调度:对指令进行重新排序以避免阻塞的硬件支持。

数据级并行

数据级并行:

  • 向量处理器:同一时间内执行一条指令但是处理多个数据。

线程级并行

线程级并行(TLP, Thread Level Parallel):为了加大程序执行的并行力度,将程序划分为多个独立的可执行部分,每个可执行部分称为一个线程。 不同线程共享数据空间,具有自己的执行堆栈和PC。 可以提高系统整体的吞吐量。

超线程技术:用一个物理处理器核心模拟成多个线程处理器。

多核技术:在一个物理封装中有多个核,每个核有独立的指令集和执行单元。

4.11 *微程序控制器设计(不考)

设计基本思想

微程序控制器是 用软件方法设计硬件优点:易于修改设计,保证软件兼容;减少实现复杂指令的成本。

每条指令是一个微程序,每个微程序包括若干条微指令,每个微指令包含若干位微命令。 一个微指令是一个状态,一个微命令是状态中的控制信号

每个微程序放在 控制只读存储器(Control Memory) 中,执行指令时,取出对应微程序里面的每条微指令。

基本概念

微命令:微操作的控制信号,由控制部件向执行部件发出。

微操作:执行部件接受微命令后所进行的最基本操作。

微指令:一个 CPU 周期中实现特定微命令的集合。

微程序:实现一条指令功能的若干条微命令组成的序列。

控制存储器:存放所有指令对应的微程序的存储器。

微指令周期:从控制存储器读取一条微指令并执行完相应的微操作所需的时间,一般式固定的。

技术分类:

  • 静态微程序设计:一台机器的机器指令只有一组微程序。
  • 动态微程序设计:可以通过改变微指令和微程序改变机器的指令系统。

Wilkes 模型IR -> FCMAR -> CMAR -> CM -> μIR -> FCMAR

微指令格式设计

方法描述
不译法(直接控制法)微命令直接从操作控制字段直接得到
字段直接编码将字段划分为若干小字段,每个小字段单独编码,表示一种微命令
字段间接编码某些微命令由多个控制字段定义
最短编码所有微命令统一编码,每个字段只包含一个微命令来编码