【问题标题】:Difference between interrupt and event中断和事件的区别
【发布时间】:2010-12-19 09:07:04
【问题描述】:

中断和事件有什么区别?

【问题讨论】:

  • 这取决于上下文。您是在谈论编程语言吗?操作系统 ?硬件 ?术语中断和事件通常取决于上下文。
  • 操作系统内核是标签。所以,我认为这解释了上下文。
  • 中断是硬件事件,事件是软件中断。

标签: operating-system kernel


【解决方案1】:

这两个概念都为“系统/程序”提供了处理在某些程序正常展开过程中发生的各种“条件”的方法,这可能需要“系统/程序”在之前做其他事情返回(或不......)原始任务。然而,除了这种功能相似性之外,它们是在不同上下文、不同层次上使用的非常不同的概念

中断提供了一个低级设备来中断CPU在给定时间内正在处理的任何程序的正常展开,并让CPU开始处理另一个地址的指令。中断对于处理需要 CPU 立即处理的各种情况(例如处理击键或串行通信通道中新数据的到达)很有用。

许多中断是由硬件产生的(通过某些电子设备改变 CPU 的一个引脚上的极性),但也有由程序本身调用特定指令引起的软件中断。 (或者也可以通过 CPU 检测到某些东西与自身或正在运行的程序有关)。

一个非常著名的中断是INT 0x21,它程序invoke[d]从MS-DOS调用服务。

中断通常通过向量表进行调度,CPU 在内存中有一个特定的位置,其中包含一个地址数组[特定中断处理程序所在的位置]。通过修改中断表的内容[如果允许的话……],程序可以重新定义为给定的中断号调用哪个特定的处理程序。

另一方面,

事件系统/语言级别的“消息”,可用于表示各种硬件或软件情况(我会使用word 事件),例如鼠标点击、键盘输入,以及应用程序级别的情况,例如“新记录插入数据库”或高度消化的请求和消息,用于模块化程序中用于程序各个部分之间的通信/请求。

与完全由 CPU 定义的 [相对简单] 行为的中断不同,存在各种事件系统系统,在操作系统级别以及各种框架(例如:MS Windows、JavaScript、.NET、 QT 等 GUI 框架)。所有的事件系统,虽然它们的实现不同,但通常共享一些共同的属性,例如

  • 处理程序的概念,它是程序的特定函数/方法,被指定用于处理来自特定事件源的特定类型的事件。
  • 事件的概念,它是一个 [通常很小的] 结构,包含有关事件的信息:其类型、来源、自定义参数(其语义取决于事件类型)
  • 一个队列,其中事件由源插入并由消费者/处理程序轮询(或更准确地说,由调度程序,取决于系统...)

【讨论】:

    【解决方案2】:

    中断是在硬件 (CPU) 内部实现的,用于中断通常是线性的程序流程。这对于键盘输入等外部事件很重要,对于在多任务操作系统中中断程序也很重要。

    事件是软件工程的一种手段,可能最常见于 GUI 工具包。在那里,工具包/操作系统将诸如击键或鼠标输入之类的事件包装到“事件”中。然后将它们分派给程序,这些程序会自行注册以接收此类事件。它可能有点像一个邮件系统。

    从用户空间程序的角度比较两者:

    -中断会迫使你的程序停止,以便让一些较低级别的代码执行(如操作系统代码)

    -事件通常从较低级别的代码发送给您并触发您的代码执行

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2010-10-16
      • 1970-01-01
      • 2019-10-21
      • 2015-05-16
      相关资源
      最近更新 更多