Interrupt(中断)
1. 概念
所谓中断,是指CPU在正常执行程序的过程中,由于某个外部或内部事件的作用,强迫CPU停止当前正在执行的程序,转去为该事件服务(称为中断服务),待服务结束后,又能自动返回到被中断的程序中继续执行。
2. 背景
中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使得CPU纠结在某一个IO上,一直在等待它的响应,如果它不响应,CPU就在原地一直的等下去。这样就导致了其他IO口也在等待CPU的服务,如果某个IO出现了important or emergency affairs,CPU也抽不出身去响应这个IO。 为了解决这个纠结的问题就------>出现了中断。
中断控制的主要优点是只有在IO接口需要服务时才去响应它,使得CPU很淡定的做它自己的事情,只有IO口有需求的时候才去响应它。同时中断中也设计了中断优先级,来处理一些很紧急的事件
3. 分类
按照CPU与中断源(把能够提出中断请求的设备和事件称为中断源)的位置关系可分为内部中断和外部中断。
1) 内部中断:也称为异常中断,属于非屏蔽中断,是处理器检测到异常情况或执行软件中断指令引起的一种中断。通常有:除法出错中断(INT0)、断点中断(INT3)、溢出中断(INT4)和单步执行中断(INT1)等。异常又分为故障和陷阱。
2) 外部中断:也称为硬件中断,是由CPU外部引脚触发的一种中断,分为不可屏蔽中断NMI(INT2)和可屏蔽中断INTR。
4. 中断源的优先权级别
内部中断最高(除单步执行中断),其次为NMI中断,再次为INTR中断。单步执行中断最低。
5. 中断向量表
在实地址模式中,CPU把内存中从0开始到1KB的空间作为一个中断向量表。
中断向量表是中断类型号和中断服务程序入口地址之间的链接表。
系统将中断源分成256种类型,类型号由0~255(0~FFH)表示。每个中断类型分配4个连续的字节单元,用于存放该中断服务程序的入口地址,两个高字节单元存放入口的段基址,两个低字节单元存放入口的偏移地址。所以256个中断向量占用系统最低的1KB的内存。
中断类型号n与其对应的中断服务程序入口地址为4n,即入口的偏移地址存放在由4n和4n+1指示的存储单元中,入口的段基址存放在由4n+2和4n+3指示的存储单元中。
中断类型号0~31是CPU保留的, 32~255是User Defined.
6. 中断描述符表
在保护模式下,由4个字节的表项构成的中断向量表已经不能满足要求了。在保护模式下,中断向量表中的表项由8个字节组成。此时他也有了新的名字---->中断描述表(Interrupt Descriptor Table,IDT),其中的每个表项叫做一个门描述符(gate descriptor) 。
门类型符主要分为
a.中断门(interrupt gate):其类型码为110,中断门包含了一个中断或异常处理程序所在段的选择符和段内偏移量。
当控制权通过中断门进入中断处理程序时,处理器清IF标志即关中断这样就避免了中断嵌套的发生。
中断门中的DP