精确异常

时间:2019-01-29 10:29:45

标签: exception freebsd

我正在阅读《 FreeBSD操作系统的设计与实现》一书,偶然发现了这一点:

  

这种重新启动指令的能力称为精确异常。   当出现以下情况时,CPU可以通过保存足够的状态来实现重启:   指令开始,可以在发生故障时恢复状态   发现。另外,指令可能会推迟任何修改   或副作用,直到发现任何故障为止,以便   指令执行不需要重新启动之前备份

我不明白什么呢

  

修饰或副作用

在段落中提及。谁能详细说明?

1 个答案:

答案 0 :(得分:1)

FreeBSD书中的描述是非常以操作系统为中心的。我什至不同意其定义,这种重新启动指令的能力称为精确异常。发生电源故障后,您无需重新启动指令。因此,与其建议您找出McKusick的含义,不如建议其他地方对异常进行更好的描述。

顺便说一句,我更喜欢史密斯的定义:

  

如果保存的过程状态与   程序执行的顺序模型,其中一条指令在另一条指令开始之前先完成。

https://lagunita.stanford.edu/c4x/Engineering/CS316/asset/smith.precise_exceptions.pdf

几乎所有现代处理器都支持精确的异常。因此,艰苦的工作已经完成。操作系统必须做的是为硬件发生的异常注册陷阱处理程序。例如,将有一个页面错误处理程序,浮点数……。要弄清楚这些处理程序的必要性,您必须阅读处理器的操作原理。

尽管看似坚韧不拔的系统细节,但还是相当高的水平。它没有说明硬件的功能,因此FreeBSD的描述非常简捷。

要真正理解精确的异常,您需要在计算机体系结构书中以流水,乱序,超标量,...的上下文来阅读该内容。我会建议《计算机体系结构定量方法》第6版。第C-38页的处理异常部分介绍了不同类型的异常的分类法。 FreeBSD的描述仅描述了一些例外。然后介绍了管道如何处理每种异常类型。

此外, Linux编程接口在POSIX信号接口上有3章。我知道这不是FreeBSD,但是它涵盖了应用程序在例如发生浮点异常并将SIGFPE信号发送到进程时将看到的内容。