查看精确异常与非精确异常的源代码
←
精确异常与非精确异常
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
这里的异常是指同步的 (Synchronous),非异步的中断。 非精确异常 (Imprecise Exception) 在多发射乱序执行的流水线 CPU 上,从指令进入流水线到异常事件的发生,期间要经过若干流水级,此时 PC 的值已指向其后的某条指令,在实现非精确异常的 CPU 上就把此时的 PC 值作为引起异常指令的所在(为了表达的方便,记为 eptr)。 简单地说就是 eptr 的指向,并非真正的引起异常的指令之所在,而是其后面的某条指令所在。 精确异常 (Precise Exception) 简单地说就是 eptr 的指向就是真正引起异常的指令之所在 而实现精确异常的 CPU,则在最后指令提交时 (commit) 按指令流的顺序提交,异常的抛出也在该指令提交时,这样就能精确计算出引起异常的指令相对于当前 PC 的偏移,从而保证精确异常。 不管是何类异常,eptr 之前的所有指令都会被执行完成 (commit),eptr 之后的指令不会被执行。 关于 eptr 的值,在 MIPS 上用 EPC 置之,在 PowerPC 上用 SRR0/CSRR0 置之,SPARC 上用 TPC[TL] 置之,x86 上当前 CS:EIP 即是,但 x86 将 CS:EIP 保存于栈上。 题外话: 关于 eptr 的指向,还有一些情形值得考虑: A. 位于延迟槽中的指令 (MIPS, SPARC) B. 由分支指令引起 (x86) C. 上下文切换时 (x86) <br><br><br><br><br><br><br><br>
返回到
精确异常与非精确异常
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面