从https://en.wikipedia.org/wiki/Interrupt开始,它表示软件中断可能是由处理器本身的异常情况引起的(通常称为陷阱或异常) .
在许多编程语言(C,Java,Python,...)中,有一些语言支持用于捕获和处理默认定义的异常,还有自定义的异常 . 例如, try {...} catch ...
. 让我调用两种异常"language-supported exceptions"(因为我不知道什么是正确的术语) .
-
语言支持的异常是否算作软件中断?
-
当语言支持的异常发生时,是否会发生与处理软件中断相同的事情?具体来说,cpu是否将当前进程保存到堆栈中,然后切换到运行OS内核然后调用异常处理程序,并在完成运行处理程序后,继续运行已保存的进程?
4 回答
不,java语言异常与软件中断无关
Java语言异常只是在同一进程和线程中启动一些异常处理代码 .
没有 .
中断导致调用中断处理程序 . 一旦该处理程序完成,原始代码将从中断发生时的位置继续执行 .
异常在
catch
块中处理 . 程序流程直接受到影响 .从您的链接:
问题1否 . 根据您的维基参考,一个解释是
您可以在程序中处理任何Java异常 . 这是一个区别 . Java异常可能由处理器内的异常条件触发,但程序中的异常处理程序正在响应JVM中生成的事件,而不是直接响应软件中断 . 考虑软件中间产品的更常规方式是
做一些关于如何使用INT x86指令调用BIOS或MS / DOS服务的研究(这会产生软件中断) .
问题2.不一定 . JVM可以生成与异常处理器条件无关的异常 . 想想空引用 .
不会 . 异常不算作软件中断,也不会作为软件中断 .
具体而言,语言支持的异常不需要调用操作系统;通常不需要上下文切换 . 相反,抛出异常会调用用户端代码,该代码可以理解如何查找处理程序,展开调用堆栈等等 .
以另一种方式看待它:通用操作系统不会知道或关心处理语言支持的异常所必需的语言特定细节 . 软件中断属于操作系统ABI的类别,它不需要与给定语言实现的内部标准远程相似 .