【发布时间】:2010-12-19 09:07:04
【问题描述】:
中断和事件有什么区别?
【问题讨论】:
-
这取决于上下文。您是在谈论编程语言吗?操作系统 ?硬件 ?术语中断和事件通常取决于上下文。
-
操作系统内核是标签。所以,我认为这解释了上下文。
-
中断是硬件事件,事件是软件中断。
中断和事件有什么区别?
【问题讨论】:
这两个概念都为“系统/程序”提供了处理在某些程序正常展开过程中发生的各种“条件”的方法,这可能需要“系统/程序”在之前做其他事情返回(或不......)原始任务。然而,除了这种功能相似性之外,它们是在不同上下文、不同层次上使用的非常不同的概念。
中断提供了一个低级设备来中断CPU在给定时间内正在处理的任何程序的正常展开,并让CPU开始处理另一个地址的指令。中断对于处理需要 CPU 立即处理的各种情况(例如处理击键或串行通信通道中新数据的到达)很有用。
许多中断是由硬件产生的(通过某些电子设备改变 CPU 的一个引脚上的极性),但也有由程序本身调用特定指令引起的软件中断。 (或者也可以通过 CPU 检测到某些东西与自身或正在运行的程序有关)。
一个非常著名的中断是INT 0x21,它程序invoke[d]从MS-DOS调用服务。
中断通常通过向量表进行调度,CPU 在内存中有一个特定的位置,其中包含一个地址数组[特定中断处理程序所在的位置]。通过修改中断表的内容[如果允许的话……],程序可以重新定义为给定的中断号调用哪个特定的处理程序。
另一方面,事件是系统/语言级别的“消息”,可用于表示各种硬件或软件情况(我会使用word 事件),例如鼠标点击、键盘输入,以及应用程序级别的情况,例如“新记录插入数据库”或高度消化的请求和消息,用于模块化程序中用于程序各个部分之间的通信/请求。
与完全由 CPU 定义的 [相对简单] 行为的中断不同,存在各种事件系统系统,在操作系统级别以及各种框架(例如:MS Windows、JavaScript、.NET、 QT 等 GUI 框架)。所有的事件系统,虽然它们的实现不同,但通常共享一些共同的属性,例如
【讨论】:
中断是在硬件 (CPU) 内部实现的,用于中断通常是线性的程序流程。这对于键盘输入等外部事件很重要,对于在多任务操作系统中中断程序也很重要。
事件是软件工程的一种手段,可能最常见于 GUI 工具包。在那里,工具包/操作系统将诸如击键或鼠标输入之类的事件包装到“事件”中。然后将它们分派给程序,这些程序会自行注册以接收此类事件。它可能有点像一个邮件系统。
从用户空间程序的角度比较两者:
-中断会迫使你的程序停止,以便让一些较低级别的代码执行(如操作系统代码)
-事件通常从较低级别的代码发送给您并触发您的代码执行
【讨论】: