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

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. 控制逻辑实现

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

相关推荐
糊涂君-Q16 分钟前
Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
python·学习·程序人生·考研·职场和发展·学习方法·改行学it
qiyi.sky18 分钟前
JavaWeb——Web入门(8/9)- Tomcat:基本使用(下载与安装、目录结构介绍、启动与关闭、可能出现的问题及解决方案、总结)
java·前端·笔记·学习·tomcat
dal118网工任子仪38 分钟前
web安全漏洞之ssrf入门
笔记·学习·计算机网络·网络安全
键盘敲没电1 小时前
【iOS】知乎日报前三周总结
学习·ios·objective-c·xcode
Lyqfor1 小时前
云原生学习
java·分布式·学习·阿里云·云原生
大懒的猫猫虫2 小时前
Upload-Labs-Linux1学习笔迹 (图文介绍)
学习
ctrey_2 小时前
2024-11-13 学习人工智能的Day26 sklearn(2)
人工智能·学习·sklearn
杜若南星2 小时前
保研考研机试攻略(满分篇):第二章——满分之路上(1)
数据结构·c++·经验分享·笔记·考研·算法·贪心算法
Allen zhu3 小时前
【PowerHarmony】电鸿蒙学习记录-编写helloworld!
学习·华为·harmonyos
Json____3 小时前
学法减分交管12123模拟练习小程序源码前端和后端和搭建教程
前端·后端·学习·小程序·uni-app·学法减分·驾考题库