我对中断、异常与信号定义的理解是否正确?

Is my undersanding of Interrupts, Exceptions vs signal definitions correct?

中断 是基于硬件的并且是异步发生的(数据传入套接字,一些 I/O 已准备好读取或写入,用户按下键盘。

异常 也是基于硬件的,但它们是同步的,并且在执行指令时由 CPU 引起。例如,虚拟内存地址 space 中的一个页面没有实际的 RAM 块映射到它会导致页面错误。异常是故障、陷阱和中止的总称。

中断和异常由硬件生成并由内核中的处理程序处理space。它们可以看作是硬件和内核之间的通信方式。

信号 信号可以被视为运行进程和内核之间的一种通信方式。在某些情况下,Interrupt/Exception 将使用信号作为内核处理的一部分。

中断

In computing, an interrupt is an asynchronous signal indicating the need for attention or a synchronous event in software indicating the need for a change in execution.

(从Whosebug的标签描述中获得的定义)

所以,它并不是不必要的异步。仅当它由硬件发出时才是异步的。将虚拟设备或仿真器作为同步中断的示例,当您对相机进行编程时,您拥有一个仿真器而不是真实设备,您可以对其进行编程以模拟中断。

例外情况

来自微软 docs:

Most of the standard exceptions recognized by the operating system are hardware-defined exceptions. Windows recognizes a few low-level software exceptions, but these are usually best handled by the operating system.

Windows maps the hardware errors of different processors to the exception codes in this section. In some cases, a processor may generate only a subset of these exceptions. Windows preprocesses information about the exception and issues the appropriate exception code.

异常不一定是硬件生成的,也不一定是同步的。

如果它们是同步的,那么就是软件发出的(比如相机模拟器)。异步异常几乎可以在任何地方引发。

在更高级的编程语言中,可以使用异常处理程序,不同种类的异常都有自己的异常子类。该程序可以使用命令发出异常,通常是与异常实例配对的 throw 关键字。参见:https://www.geeksforgeeks.org/throw-throws-java/

可以根据业务逻辑实现自定义异常类,参见https://www.baeldung.com/java-new-custom-exception

所以,异常的范围比你最初想象的要广泛得多。

信号

信号是通知进程发生了事件。信号有时被描述为软件中断。信号类似于硬件中断,因为它们会中断程序的正常执行流程;在大多数情况下,无法准确预测信号何时到达。它们在 C 标准中定义并在 POSIX 中扩展,但许多其他编程 languages/systems 也提供对它们的访问。

你对信号的看法或多或少是正确的。