深入理解计算机系统学习笔记

1.1异常处理

处理器中很多事情都会导致异常控制流,此时,程序执行的正常流程被破坏掉。异常可以由程序执行从内部产生,也可以由某个外部信号从外部产 生。

我们的指令集体系结构包括三种不同的内部产生的异常:

l)halt指令,

2)有非法指令和功能码组合的指令,

3)取指或数据读写试图访问一个非法地址。

我们把导致异常的指令称为异常指令。

通常在一个流水线化的系统中,异常处理包括一些细节问题。

首先,可能同时有多条指令会引起异常。例如,在一个流水线操作的周期内,取指阶段中有 halt指令,而数据内存会报告访存阶段中的指令数据地址越界。我们必须确定处理器应该向操作系统报告 哪个异常。基本原则是:由流水线中最深的指令引起的异常,优先级最高。

第二个细节问题是,当首先取出一条指令,开始执行时,导致了一个异常,而后来由于分支预测错误,取消了该指令。

第三个细节问题的产生是因为流水线化的处理器会在不同的阶段更新系统状态的不同部分。有可能会出现这样的情况,一条指令导致了一个异常,它后面的指令在异常指令完成之前改变了部分状态。

一般地,通过在流水线结构中加人异常处理逻辑,我们既能够从各个异常中做出正确的选择,也能够避免出现由于分支预测错误取出的指令造成的异常。

1.2PIPE 各阶段的实现

  1. PC 选择和取指阶段

这个阶段必须选择程序计数器的当前值,并且预测下一个PC值。用于从内存中读取指令和抽取不 同指令字段的硬件单元与SEQ中考虑的那些一样。

  1. 译码和写回阶段

这个阶段的复杂性主要是跟转发逻辑相关。它为后面的阶段将valP信号合并到valA信号,这样可以减少流水线寄存器中状态的数量。它还实现了源操作数valA的转发逻辑。合并信号valA和valP的依据是,只有 call和跳转指令在后面的阶段中需要 valP 的值,而这些指令并不需要从寄存器文件 A端口中读出的值。这个选择是由该阶段的 icode 信号来控制的。

  1. 执行阶段

图中展现的是PIPE 执行阶段的逻辑。这些硬件单元和逻辑块同SEQ中的相同, 使用的信号做适当的重命名。我们可以看到信号e _valE和e _dstE作为转发源,指向译码阶段。一个区别是标号为 "Set CC" 的逻辑以信号:m_stat和W _stat 作为输人,这个 逻辑决定了是否要更新条件码。

1.3流水线控制逻辑

在准备创建流水线控制逻辑,完成PIPE设计。这个逻辑必须处理下面4种控制情况.

加载/使用冒险:在一条从内存中读出一个值的指令和一条使用该值的指令之间,流水线必须暂停一个周期。

处理ret: 流水线必须暂停直到ret指令到达写回阶段。

预测错误的分支:在分支逻辑发现不应该选择分支之前,分支目标处的几条指令已经进人流水线了。必须取消这些指令,并从跳转指令后面的那条指令开始取指。

异常:当一条指令导致异常,我们想要禁止后面的指令更新程序员可见的状态,并且在异常指令到达写回阶段时,停止执行。

  1. 特殊控制情况所期望的处理

在这个阶段设计中,每个流水线寄存器中会包含一个状态码 stat,随着每条指令经过流水线阶段,它会记录指令的状态。当异常发生时,将这个信息作为指令状态的一部分记录下来,并且继续取指、译码和执行指令,就好像什么都没有出错似的。当异常指令到达访存阶段时,会采取措施防止后面的指令修改程序员可见的状态。

  1. 发现特殊控制条件

一些低级机制使得流水线控制逻辑能将指令阻塞在流水线寄存器中,或是往流水线中插入一个气泡。

假设每个流水线寄存器有两个控制输入:暂停(stall)和气泡(bubble)。这些信号的设置决定了当时钟上升时该如何更新流水线寄存器。

在正常操作下,这两个输入都设为 0,使得寄存器加载它的输入作为新的状态。

当暂停信号设为 1 时,禁止更新状态。相反,寄存器会保持它以前的状态。这使得它可以将指令阻塞在某个流水线阶段中。

当气泡信号设置为 1 时,寄存器状态会设置成某个固定的复位配置(configuration),得到一个等效于 nop 指令的状态。

  1. 流水线控制机制

图4-中的表给出了各个流水线寄存器在三种特殊情况下应该采取的行动。对每种情况的处理都是对流水线寄存器正常、暂停和气泡操作的某个组合。在时序方面,流水线寄存器的暂停和气泡控制信号是由组合逻辑块产生的。当时钟上升时,这些值必须是合法的,使得当下一个时钟周期开始时,每个流水线寄存器要么加载,要么暂停,要么产生气泡。

  1. 控制条件的组合

从这些图中我们可以看出,大多数控制条件是互斥的。例如,不可能同时既有加载/ 使用冒险又有预测错误的分支,因为加载/使用冒险要求执行阶段中是加载指令(mrmovq 或popq),而预测错误的分支要求执行阶段中是一条跳转指令。

  1. 控制逻辑实现

图中是流水线控制逻辑的整体结构。根据来自流水线寄存器和流水线阶段的信号,控制逻辑产生流水线寄存器的暂停和气泡控制信号,同时也决定是否要更新条件码寄存器。

相关推荐
小小洋洋1 小时前
BLE MESH学习1-基于沁恒CH582学习
学习
m0_689618282 小时前
水凝胶发生器,不对称设计妙,医电应用前景广
笔记
Ace'2 小时前
每日一题&&学习笔记
笔记·学习
IM_DALLA2 小时前
【Verilog学习日常】—牛客网刷题—Verilog进阶挑战—VL25
学习·fpga开发·verilog学习
挥剑决浮云 -2 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
丶Darling.2 小时前
LeetCode Hot100 | Day1 | 二叉树:二叉树的直径
数据结构·c++·学习·算法·leetcode·二叉树
新晓·故知3 小时前
<基于递归实现线索二叉树的构造及遍历算法探讨>
数据结构·经验分享·笔记·算法·链表
魔理沙偷走了BUG3 小时前
【数学分析笔记】第4章第4节 复合函数求导法则及其应用(3)
笔记·数学分析
z樾4 小时前
Github界面学习
学习