先决条件 – 中断和异常
中断是异常的类之一。异常有 4 类——中断、陷阱、故障和中止。虽然中断属于异常,但它们之间还是有很多区别的。
在任何计算机中,在其正常执行程序的过程中,都可能发生导致 CPU 暂时停止的事件。像这样的事件称为中断。中断可能由软件或硬件故障引起。硬件中断称为中断,而软件中断称为异常。一旦产生中断,控制权就会转移到一个称为中断服务程序 (ISR) 的特殊子程序,该子程序可以处理中断产生的条件。
什么是陷阱、故障和中止?
- 陷阱 –
它通常是由异常条件(例如,断点、除以零、无效内存访问)引起的一种同步中断。 - 过错 –
客户端应用程序中使用错误异常来捕获契约指定的 SOAP 错误。通过简单的异常消息,您无法确定异常的原因,这就是 Fault Exception 有用的原因。 - 中止——
它是当指令获取导致错误时发生的一种异常。
什么是中断?
术语中断通常保留用于硬件中断。它们是由外部硬件事件引起的程序控制中断。这里,外部意味着 CPU 外部。硬件中断通常来自许多不同的来源,例如定时器芯片、外围设备(键盘、鼠标等)、I/O 端口(串行、并行等)、磁盘驱动器、CMOS 时钟、扩展卡(声卡、视频卡等)。这意味着硬件中断几乎不会由于与正在执行的程序相关的某些事件而发生。
例子 –
用户在键盘上按下按键或内部硬件定时器超时等事件可以引发这种中断,并可以通知 CPU 某个设备需要一些注意。在这种情况下,CPU 将停止正在执行的任何操作(即暂停当前程序),提供设备所需的服务并返回正常程序。当硬件中断发生并且 CPU 启动 ISR 时,其他硬件中断被禁用(例如在 80×86 机器中)。如果您需要在 ISR 运行时发生其他硬件中断,您需要通过清除中断标志(使用 sti 指令)来明确地做到这一点。在 80×86 机器中,清除中断标志只会影响硬件中断。
什么是异常?
异常是一个软件中断,它可以被识别为一个特殊的处理程序。异常可以被识别为自动发生的陷阱。通常,没有与异常相关的特定指令(使用特定指令生成陷阱)。因此,异常是由于程序执行期间发生的“异常”条件而发生的。
例子 –
除以零,执行非法操作码或内存相关故障可能导致异常。每当出现异常时,CPU 都会暂时挂起它正在执行的程序并启动 ISR。 ISR 将包含如何处理异常。它可能会纠正问题,或者如果不可能,它可能会通过打印合适的错误消息来优雅地中止程序。虽然特定指令不会导致异常,但异常总是由指令导致。例如,被零除错误只能发生在除法指令的执行过程中。
中断和异常的区别:
Interrupt | Exception |
---|---|
These are Hardware interrupts. | These are Software Interrupts. |
Occurrences of hardware interrupts usually disable other hardware interrupts. | This is not a true case in terms of Exception. |
These are asynchronous external requests for service (like keyboard or printer needs service). | These are synchronous internal requests for service based upon abnormal events (think of illegal instructions, illegal address, overflow etc). |
Being asynchronous, interrupts can occur at any place in the program. | Being synchronous, exceptions occur when there is abnormal event in your program like, divide by zero or illegal memory location. |
These are normal events and shouldn’t interfere with the normal running of a computer. | These are abnormal events and often result in the termination of a program |