中止异常“不允许精确定位导致异常的指令”是什么意思?

问题描述

摘自英特尔 80386 程序员参考手册 CH9:

异常根据方式分为故障、陷阱或中止 它们被报告以及是否重新启动导致 支持异常。

中止:中止是一种例外,它既不允许精确定位 导致异常的指令 或程序重新启动 导致异常。中止用于报告严重错误, 例如系统中的硬件错误和不一致或非法的值 表。

(强调我的)

中止是不允许精确定位导致异常的指令的异常究竟是什么意思?

解决方法

只有 2 个“中止”例外:

a) 双故障异常。当尝试启动一个异常导致第二个异常时会发生这种情况;其中指令指针(在启动双故障异常处理程序时由 CPU 保存)可能来自原始指令、第一个异常、第二个异常、其他或什么都没有。在这种情况下,因为 CPU 无法启动第一个或第二个异常处理程序,所以无论如何都无法从双重错误返回到第二个(或第一个)异常处理程序。

b) 机器检查异常。这纯粹是针对硬件故障,您可能不想假设内存、缓存或 CPU 实际工作。您不能指望故障硬件会产生“保证行为”。

注1:技术上,对于一些机器检查的原因,你可以返回到发生异常中断的任何地方的精确位置;您只需要非常小心地确定您是否可以/不能返回(并且需要某种方法来修复/解决硬件问题,以便从机器检查异常处理程序返回不会触发第二台机器检查异常)。

注意 2:双故障或机器检查之前的异常完全有可能由根本不是指令的东西引起(例如由 IRQ 引起)。在这些情况下,“指令的精确位置导致异常”将是“不存在的东西的精确位置”。英特尔的话应该被解释为有条件的(比如“一个异常,它既不允许导致异常的指令的精确位置(如果有),也不允许重新启动导致异常的程序(如果有)”)。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...