【问题标题】:Is my undersanding of Interrupts, Exceptions vs signal definitions correct?我对中断、异常与信号定义的理解是否正确?
【发布时间】:2019-12-22 10:22:20
【问题描述】:

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

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

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

信号 信号可以看作是正在运行的进程和内核之间的一种通信方式。在某些情况下,中断/异常将使用信号作为内核处理的一部分。

【问题讨论】:

    标签: exception signals ipc interrupt


    【解决方案1】:

    中断

    在计算中,中断是一个异步信号,指示 需要注意或软件中的同步事件表明 需要改变执行。

    (从stackoverflow的标签描述中得到的定义)

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

    例外情况

    来自微软docs

    操作系统识别的大多数标准异常是 硬件定义的异常。 Windows 可以识别一些低级 软件异常,但这些通常最好由 操作系统。

    Windows 将不同处理器的硬件错误映射到 本节中的异常代码。在某些情况下,处理器可能 仅生成这些异常的子集。 Windows 预处理 有关异常的信息并发出相应的异常 代码。

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

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

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

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

    因此,异常的范围比您最初想象的要广泛得多。

    信号

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      相关资源
      最近更新 更多