例外&中断

时间:2010-06-03 13:08:12

标签: exception assembly terminology interrupt interrupted-exception

当我在寻找异常和中断之间的区别时, 我在SO上发现了这个问题Interrupts and exceptions

有些答案不合适(至少对于汇编级别):

“异常是中断的软件版本” 但是存在软件中断!!
“中断是异步的,但异常是同步的” 是吗?
“中断经常发生”
“中断是硬件实现的陷阱,例外是软件实现” 与上面相同!


我需要找到其中一些答案是否正确,如果有人能提供更好的答案,我将不胜感激......

谢谢!

2 个答案:

答案 0 :(得分:2)

中断通常是用信号通知硬件状态变化的方法。外围设备将通过电信号连接到中断控制器,中断控制器优先考虑并为每个可能的信号分配地址向量。中断控制器将检测到的中断条件转发给CPU,CPU可以或可以不“中断”其当前执行状态以处理发信号通知的状态改变(取决于是否启用了中断和/或该特定输入是否是不可屏蔽的)。在某些体系结构上,除了硬件输入之外,中断条件可以由软件启动(例如在x86上有一个助记符)。

例外情况涉及更广泛的实施范围。在某些CPU架构(如68K)中,异常可能类似于中断,但是由某些需要处理的CPU状态生成。例如,存在产生异常的条件,例如除以零,非法指令,I / O总线超时等。通过处理这些异常,可以执行诸如模拟指令和虚拟扩展指令集之类的事情。

异常也可能是纯软件概念,例如在C ++语言中,可以捕获和处理某些错误条件。

因此,一般而言,您尝试查找有效性的陈述可能是真或假,具体取决于您应用它们的确切平台。

答案 1 :(得分:1)

最常用的异常是编程语言中的一种控制流形式,用于处理程序正常逻辑流程之外的事件,以避免程序的业务逻辑在错误处理逻辑中淹没。异常的“处理”是特定于上下文的。对于许多有用的用例来说,它更像是一种GoTo。

中断是硬件辅助的“陷阱”,用于在发生特定事件时触发某些操作,作为计时器滴答或程序“调用”INT21。有一个处理程序注册了预定义的东西。

两者可能同步也可能不同步。