如果软件抛出异常,操作系统层面会发生什么?

如果软件抛出异常,操作系统层面会发生什么?

在高级编程语言(例如 Java)中,有异常的概念。

这些异常可以隐式或显式抛出。抛出异常后,可在某些特殊的错误处理分支中捕获该异常。

现在我想知道:引擎盖下发生了什么?

对于操作系统来说什么是例外?

如何“捕获”异常?

答案1

来自 MSDN 的信息:这里

异常类似于 CPU 处理的中断。当发生异常时,无论是软件还是硬件,处理器都会停止执行并将控制权移交给系统。系统会保存当前线程状态和异常信息。然后它会尝试查找处理程序。这基本上就是“捕获”的方式。

寻找处理程序的顺序是:

  • 附加到程序的调试器
  • 查找基于框架的异常处理程序(特定于语言)
  • 再次询问调试器
  • 如果未调试,或者调试器未处理异常,则操作系统将提供其默认处理。对于大多数异常,默认操作是调用 ExitProcess。

如果是内核模式代码(操作系统),则它会尝试查找异常处理程序。如果没有,或者可用的异常处理程序无法处理该特定异常,则调用 ExitWindows 函数。如果您能猜出它的作用,则可获得加分。

换句话说,处理异常的是高级语言,操作系统只是提供了最后的选择。

相关内容