中断和事件之间的区别

时间:2009-11-23 06:23:12

标签: operating-system kernel

中断和事件有什么区别?

2 个答案:

答案 0 :(得分:32)

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

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

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

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

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

另一方面,

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

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

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

答案 1 :(得分:1)

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

事件是软件工程的一种手段,可能最常见于GUI工具包。在那里,工具包/ OS将按键或鼠标输入等事件包含在“事件”中。然后将这些程序发送给自己注册接收此类事件的程序。它可能有点像邮件系统。

从用户空间程序视图中比较两者:

-Interrupts会强制你的程序暂停,以便让一些低级代码执行(比如操作系统代码)

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