编程语言捕获和处理的异常是否算作软件中断?

时间:2015-12-04 13:36:06

标签: java c++ exception programming-languages interrupt

https://en.wikipedia.org/wiki/Interrupt开始,它表示软件中断可能是由处理器本身的异常情况引起的(通常称为陷阱或异常)。

在许多编程语言(C ++,Java,Python,...)中,有一些语言支持用于捕获和处理默认定义的异常,还有自定义的异常。例如,try {...} catch ...。让我称之为两种例外情况"语言支持的异常" (因为我不知道什么是正确的术语)。

  1. 语言支持的异常是否算作软件中断?
  2. 当语言支持的异常发生时,做同样的事情 发生在处理软件中断?具体来说,是吗 cpu将当前进程保存到堆栈中,然后切换到运行 OS内核然后调用异常处理程序,之后 完成运行处理程序,恢复运行已保存的进程?

4 个答案:

答案 0 :(得分:5)

  1. 不,java语言异常与软件中断无关
  2. Java语言异常只是在同一个进程和线程中启动一些异常处理代码。

答案 1 :(得分:4)

没有

中断导致调用中断处理程序。一旦该处理程序完成,原始代码将从中断发生时的位置继续执行。

异常在catch块中处理。程序流程直接受到影响。

从您的链接:

  

处理器通过暂停其当前活动,保存其状态,并执行一个称为中断处理程序(或中断服务程序,ISR)的函数来处理事件。这种中断是暂时的,并且,在中断处理程序完成后,处理器恢复正常活动

答案 2 :(得分:1)

问题1否。根据您的维基参考,一个解释是

  

前者通常被称为陷阱或异常,用于   程序执行期间发生的错误或事件   非常特殊,无法在程序中处理   本身。

您可以处理程序中的任何Java异常。这是一个区别。 Java异常可能由处理器内的异常条件触发,但程序中的异常处理程序正在响应JVM中生成的事件,而不是直接响应软件中断。考虑软件中间产品的更常规方式是

  

软件中断指令的功能与子程序类似   呼叫并用于各种目的,例如请求   来自设备驱动程序等低级系统软件的服务。

进行一些关于如何使用INT x86指令调用BIOS或MS / DOS服务的研究(这会产生软件中断)。

问题2.不一定。 JVM可以生成与异常处理器条件无关的异常。想想空引用。

答案 3 :(得分:1)

没有。例外不算作软件中断,也不算作软件中断。

具体而言,语言支持的异常不需要来调用操作系统;通常不需要上下文切换。相反,抛出异常会调用用户端代码,该代码了解如何查找处理程序,展开调用堆栈,等等。对于该特定语言。

以另一种方式看待它:通用操作系统不会知道或关心处理语言支持的异常所必需的语言特定细节。软件中断属于操作系统ABI的类别,它不需要与给定语言实现的内部标准远程相似。