中断与异常
在任何一台计算机中,在程序正常执行期间,都有可能发生导致CPU暂时停止的事件。像这样的事件叫做中断。中断可能由软件或硬件故障引起。硬件中断称为(简单地)中断,而软件中断称为异常。一旦中断(软件或硬件)被触发,控制权就被转移到一个称为ISR(中断服务程序)的特殊子程序上,该子程序可以处理由中断引起的条件。
什么是中断?
术语中断通常是为硬件中断保留的。它们是由外部硬件事件引起的程序控制中断。这里,external是指CPU之外的。硬件中断通常来自许多不同的来源,如定时器芯片、外围设备(键盘、鼠标等)、I/O端口(串行、并行等)、磁盘驱动器、CMOS时钟、扩展卡(声卡、视频卡等)。与硬件相关的事件几乎永远不会发生。例如,用户在键盘上按键或内部硬件计时器超时等事件都会引发这种中断,并通知CPU某个设备需要注意。在这样的情况下,CPU将停止它正在做的事情(即暂停当前程序),提供设备所需的服务,并返回正常程序。当发生硬件中断且CPU启动ISR时,其他硬件中断被禁用(例如在80×86机器中)。如果需要在ISR运行时发生其他硬件中断,则需要通过清除中断标志(使用sti指令)来显式地执行此操作。在80×86机器中,清除中断标志只会影响硬件中断。
什么是例外?
异常是一个软件中断,它可以被标识为一个特殊的处理程序例程。异常可以标识为自动发生的陷阱(陷阱可以标识为控制权的转移,由程序员启动)。通常,没有与异常相关联的特定指令(陷阱是使用特定指令生成的)。因此,异常是由于程序执行期间发生的“异常”条件而发生的。例如,除零、执行非法操作码或内存相关错误都可能导致异常。每当发生异常时,CPU会暂时挂起正在执行的程序并启动ISR。ISR将包含如何处理异常。它可以纠正问题,或者如果不可能,它可以通过打印适当的错误消息优雅地中止程序。虽然特定指令不会导致异常,但异常总是由指令引起的。例如,除法零错误只能在除法指令执行期间发生。
中断和异常有什么区别?