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

Java 编程语言捕获和处理的异常是否算作软件中断?,java,c++,exception,programming-languages,interrupt,Java,C++,Exception,Programming Languages,Interrupt,从一开始,它就说软件中断可能是由处理器本身的异常情况(通常称为陷阱或异常)引起的 在许多编程语言(C++、Java、Python等)中,都支持捕获和处理默认定义的异常,也支持自定义异常。例如,尝试{…}捕获…。让我把这两种异常都称为“语言支持的异常”(因为我不知道什么是正确的术语) 语言支持的异常是否算作软件中断 当语言支持的异常发生时,执行相同的操作 处理软件中断时会发生什么情况?具体来说,是否 cpu将当前进程保存到堆栈中,然后切换到运行 然后调用异常处理程序的操作系统内核,以及 完成处理程

从一开始,它就说软件中断可能是由处理器本身的异常情况(通常称为陷阱或异常)引起的

在许多编程语言(C++、Java、Python等)中,都支持捕获和处理默认定义的异常,也支持自定义异常。例如,
尝试{…}捕获…
。让我把这两种异常都称为“语言支持的异常”(因为我不知道什么是正确的术语)

  • 语言支持的异常是否算作软件中断
  • 当语言支持的异常发生时,执行相同的操作 处理软件中断时会发生什么情况?具体来说,是否 cpu将当前进程保存到堆栈中,然后切换到运行 然后调用异常处理程序的操作系统内核,以及 完成处理程序的运行后,是否继续运行保存的进程
  • 不,java语言异常与软件中断无关
  • Java语言异常只是在同一进程和线程中启动一些异常处理代码
  • 没有

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

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

    从您的链接:

    处理器的响应方式是暂停其当前活动,保存其状态,并执行称为中断处理程序(或中断服务例程,ISR)的函数来处理事件。此中断是暂时的,在中断处理程序完成后,处理器恢复正常活动


    问题1不。根据你的维基参考资料,一个解释是

    前者通常称为陷阱或异常,用于 程序执行期间发生的错误或事件 异常到无法在程序内处理的程度 本身

    您可以处理程序中的任何Java异常。这就是一个区别。Java异常可能由处理器内的异常情况触发,但程序中的异常处理程序响应JVM内生成的事件,而不是直接响应软件中断。更传统的软件交互方式是

    软件中断指令的功能类似于子程序 调用和用于各种目的,例如请求 来自低级系统软件(如设备驱动程序)的服务

    研究一下如何使用INT x86指令调用BIOS或MS/DOS服务(这会生成软件中断)


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

    否。异常不算作软件中断,也不算作软件中断

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


    从另一个角度来看:通用操作系统不知道或不关心处理语言支持的异常所需的特定于语言的细节。软件中断属于操作系统的范畴,它不需要与给定语言实现的内部标准非常相似。

    我想说的可能不是它所说的1“异常到程序本身无法处理错误”(这对于Java来说并不完全正确,因为至少JVM会处理Java异常)和2)软件中断正在使用处理器来通信这些中断。因此,在这些语言中肯定存在可能导致中断的错误条件,但我要说的是,大多数内部处理的异常都是真正的中断。