计算机体系结构——精确例外 & ROB详解

本文介绍了CPU乱序执行中的精确例外概念,以及如何通过重排序缓冲区(ROB)实现精确例外,确保在指令提交前不进行不可撤销的更新。ROB在指令发射、执行、写结果和提交四个阶段中起到关键作用,确保在异常发生时能快速恢复现场,保持处理器状态的整洁。同时,详细阐述了提交阶段的操作,包括正常提交和分支预测错误时的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 精确例外

上一篇文章提到的Tomasulo算法,是一个非精确的例外,也就是说一旦发生例外,硬件就很难处理,因为是乱序执行,怎么才能给软件一个干净的现场呢?
所以操作系统就希望动态流水线提供精确例外。
精确例外:指在处理例外的时候,发生例外指令之前所有的指令都已经执行完了,例外指令后面的所有指令都还没执行。

所以我们要怎么做呢?就是扩展Tomasulo算法来支持推测,我们必须将指令结果的旁路从一条指令的实际完成操作中分离出来,进行这种分离之后,就可以允许执行一条指令,并将其结果旁路给其他指令,但不允许这条指令执行任何不能撤销的更新操作,直到确认这条指令不再具有不确定性为止。
其实简单来说,就是增加一个缓冲区暂时存放结果,直到这个数据不再更新,再写回寄存器堆。

2 重排序缓冲区(ROB)

重排序缓冲区像Tomasulo算法通过保留站扩展寄存器集一样,提供了附加寄存器。ROB会在一定时间内保存指令的结果,这段时间从与指令相关的运算完成开始,到该指令提交完毕为止。
提交(commit): 就是在流水线中增加了一个commit阶段,只有在这个阶段才能真正修改计算机的状态。其他时候都是修改ROB中的值。
所以现在指令的执行步骤就分为四步,分别是发射、执行、写结果和提交

2.1 ROB包含的内容

ROB中的每个项目包含4个字段:
· 指令类型——分支指令、存储指令、寄存器操作指令
· 目的地字段——提供写入结果的寄存器编号
· 值字段——在提交指令前保存指令结果
· 就绪字段——指令已经完成执行,结果值准备就绪

2.2 增加了ROB的流水线结构

在这里插入图片描述

2.3 提交(commit)阶段详解

利用ROB实现了乱序执行后的有序结束,防止在指令提交之前采取任何不可撤销的动作。那么我们重点介绍一下提交阶段的具体操作。
当一个指令到达ROB的头部而且其结果出现在缓冲区中时,则正常提交,此时处理器用结果更新其寄存器,并从ROB中清除该指令。
当预测错误的分支指令到达ROB头部时,他指出推测是错误的。那么ROB被清空,执行过程从该分支的正确后续指令重新开始。如果对该分支的预测正确,则该分支完成提交。
指令一旦提交完毕,它在ROB的相应项将被收回,寄存器或存储器目的地址将被更新,并且不再需要ROB项。
任意一条指令发生例外,就清除操作队列以及ROB,保证了现场的干净,因为在例外之前的指令都已经执行完毕,而后面的指令都未执行(未把结果写回)。

2.4 流水线执行情况详解

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

3 总结

有序发射、乱序执行、有序结束
ending~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值