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