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