中断和异常的区别
中断是异常的类别之一。有 4 类异常——中断、陷阱、故障和中止。虽然,中断属于异常,但它们之间仍然存在许多差异。
在任何计算机中,在其正常执行程序期间,都可能发生导致 CPU 暂时停止的事件。像这样的事件称为中断。中断可能由软件或硬件故障引起。硬件中断称为中断,而软件中断称为异常。一旦引发中断,控制权就会转移到称为中断服务程序 (ISR) 的特殊子程序,该子程序可以处理由中断引发的条件。
陷阱、故障和中止是什么?
陷阱 - 它通常是由异常情况(例如断点、被零除、无效内存访问)引起的一种同步中断。
故障 - 客户端应用程序中使用错误异常来捕获合同指定的 SOAP 错误。通过简单的异常消息,您无法确定异常的原因,这就是故障异常有用的原因。
中止 — 这是一种在指令获取导致错误时发生的异常。
中断是什么?
术语中断通常是为硬件中断保留的。它们是由外部硬件事件引起的程序控制中断。这里,外部是指 CPU 外部。硬件中断通常来自许多不同的来源,例如定时器芯片、外围设备(键盘、鼠标等)、I/O 端口(串行、并行等)、磁盘驱动器、CMOS 时钟、扩展卡(声卡、视频 卡等)。这意味着由于与执行程序相关的某些事件,几乎不会发生硬件中断。
中断例子 - 用户在键盘上按下按键或内部硬件定时器超时等事件都可以引发此类中断,并可以通知 CPU 某个设备需要注意。在这种情况下,CPU 将停止它正在做的任何事情(即暂停当前程序),提供设备所需的服务并返回正常程序。当硬件中断发生并且 CPU 启动 ISR 时,其他硬件中断被禁用(例如在 80×86 机器中)。如果您需要在 ISR 运行时发生其他硬件中断,则需要通过清除中断标志(使用 sti 指令)明确地执行此操作。在 80×86 机器中,清除中断标志只会影响硬件中断。
异常是什么?
异常是软件中断,可以识别为特殊的处理程序。异常可以识别为自动发生的陷阱。通常,没有与异常相关的特定指令(陷阱是使用特定指令生成的)。因此,由于程序执行期间发生的“异常”情况而发生异常。
例子 - 除以零、执行非法操作码或内存相关故障可能会导致异常。每当引发异常时,CPU 都会暂时挂起它正在执行的程序并启动 ISR。ISR 将包含如何处理异常。它可能会纠正问题,或者如果不可能,它可能会通过打印合适的错误消息来优雅地中止程序。尽管特定指令不会导致异常,但异常总是由指令引起。例如,除零错误只能在除法指令执行期间发生。
中断和异常的区别:
中断 | 异常 |
---|---|
中断是硬件中断。 | 异常是软件中断。 |
硬件中断的发生通常会禁用其他硬件中断。 | 就异常而言,这不是一个真实的情况。 |
中断是对服务的异步外部请求(如键盘或打印机需要服务)。 | 异常是基于异常事件的同步内部服务请求(想想非法指令、非法地址、溢出等)。 |
由于是异步的,中断可以发生在程序的任何地方。 | 由于是同步的,当程序中出现异常事件时会发生异常,例如除以零或非法内存位置。 |
中断是正常事件,不应干扰计算机的正常运行。 | 异常是异常事件,通常会导致程序终止 |