中断与异常——与编程语言的关系
Interrupts and Exceptions - Relationship with programing language
我正在尝试了解 OS 中的中断/异常与编程语言之间的关系。请注意,这是基于我的理解,我可能完全不正确。
- 中断一般由硬件发起。软件中断也在那里 - 我有一个问题,我在下面提到过。
- 异常分为 3 种类型 - 陷阱、故障和中止
我来自 Java 背景,当我想到 Java(或任何编程语言)中的异常时,我正试图围绕这些概念。
我特别想了解编程语言提供的处理程序(不必限于 Java)与内核提供的用于处理中断和异常的处理程序之间的关系。
是否有来自 JDK 的陷阱、故障、中止类别的示例?我知道这些是 OS 概念,但我很想认为至少有一部分编程语言异常可能属于这些类别。
软件中断和陷阱(异常)有什么区别?
有没有来自 Java 的陷阱的例子?我认为导致系统调用(如打开文件)的可能是软件中断陷阱。
我知道这是一口,谢谢你的时间。
您混淆了分为 3 种类型(陷阱、故障和中止)的硬件异常和通常不是的软件异常。
trap、fault、abort的区别是异常发生后机器的状态,影响是否可以继续执行,是否会重新执行引起异常的指令,或者后面的指令.
软件异常通常以调用某个例程开始,例程的名称如 signal、raise 或 throw。然后异常分派器使用设计者认为合适的任何规则搜索处理程序。
(请注意,硬件异常可能会变成软件异常 - 例如,硬件陷阱到已知地址,然后处理程序有效地 'raises' 软件异常)。
软件异常可能是连续的,也可能不是,这取决于机制的设计。 Java 异常是不可继续的;在进入异常处理程序('catch' 语句)之前,堆栈被展开。因此,如果您真的想将 Java 异常映射到 trap/fault/abort 分类,最接近的匹配是 'abort'.
其他语言有不同的想法 - 处理程序可能在堆栈展开之前进入,并且处理程序可以展开堆栈,或者从异常点继续,可能在解决问题之后。然而,如今,这种方法 ('resumption semantics') 已经失宠,取而代之的是不可继续的异常 ('termination semantics')。
总结:软件系统或编程语言定义了异常的概念。硬件有类似但不完全相同的关注点,但 OS 或运行时系统有必要将硬件操作映射到软件异常。例如,硬件陷入内核模式,但软件异常需要传递给用户模式下的特定程序。
软件异常并不总是只是用编程语言实现的。例如,Windows(以及更早的系统,例如 VMS)将结构化异常处理作为系统级功能提供;语言功能可能在此基础上构建,但基本思想适用于所有程序,包括那些用汇编代码编写的程序。
我正在尝试了解 OS 中的中断/异常与编程语言之间的关系。请注意,这是基于我的理解,我可能完全不正确。
- 中断一般由硬件发起。软件中断也在那里 - 我有一个问题,我在下面提到过。
- 异常分为 3 种类型 - 陷阱、故障和中止
我来自 Java 背景,当我想到 Java(或任何编程语言)中的异常时,我正试图围绕这些概念。
我特别想了解编程语言提供的处理程序(不必限于 Java)与内核提供的用于处理中断和异常的处理程序之间的关系。
是否有来自 JDK 的陷阱、故障、中止类别的示例?我知道这些是 OS 概念,但我很想认为至少有一部分编程语言异常可能属于这些类别。
软件中断和陷阱(异常)有什么区别?
有没有来自 Java 的陷阱的例子?我认为导致系统调用(如打开文件)的可能是软件中断陷阱。
我知道这是一口,谢谢你的时间。
您混淆了分为 3 种类型(陷阱、故障和中止)的硬件异常和通常不是的软件异常。
trap、fault、abort的区别是异常发生后机器的状态,影响是否可以继续执行,是否会重新执行引起异常的指令,或者后面的指令.
软件异常通常以调用某个例程开始,例程的名称如 signal、raise 或 throw。然后异常分派器使用设计者认为合适的任何规则搜索处理程序。
(请注意,硬件异常可能会变成软件异常 - 例如,硬件陷阱到已知地址,然后处理程序有效地 'raises' 软件异常)。
软件异常可能是连续的,也可能不是,这取决于机制的设计。 Java 异常是不可继续的;在进入异常处理程序('catch' 语句)之前,堆栈被展开。因此,如果您真的想将 Java 异常映射到 trap/fault/abort 分类,最接近的匹配是 'abort'.
其他语言有不同的想法 - 处理程序可能在堆栈展开之前进入,并且处理程序可以展开堆栈,或者从异常点继续,可能在解决问题之后。然而,如今,这种方法 ('resumption semantics') 已经失宠,取而代之的是不可继续的异常 ('termination semantics')。
总结:软件系统或编程语言定义了异常的概念。硬件有类似但不完全相同的关注点,但 OS 或运行时系统有必要将硬件操作映射到软件异常。例如,硬件陷入内核模式,但软件异常需要传递给用户模式下的特定程序。
软件异常并不总是只是用编程语言实现的。例如,Windows(以及更早的系统,例如 VMS)将结构化异常处理作为系统级功能提供;语言功能可能在此基础上构建,但基本思想适用于所有程序,包括那些用汇编代码编写的程序。