许吉友 - 运维

中断详解

中断指CPU在执行过程中,出现某些突发事件急待处理,CPU暂停执行当前程序,转去处理突发事件,处理完后CPU又返回原程序被中断的位置继续执行。

中断的分类:

屏蔽中断和不可屏蔽中断:

向量中断和非向量中断:

中断号

中断既然是体系结构的机制,就需要有硬件支持。x86由2个8259A芯片级联支持,支持16种硬件产生的中断,通过IRQ n表示,IRQ就是中断号,又有被称为中断线,是硬件中断独有的,以下提到的异常没有IRQ。

由于有多种中断类型,不只上面提供的硬件中断,还有cpu内部的异常,为了对所有中断进行统一管理,cpu使用中断向量。x86提供了256个可用的中断向量,中断向量号为0~255,当某个中断向量号被assert时,cpu会找到对应的中断门描述符,其中包含处理函函数的入口地址。中断向量号的分布如下:

1、0~31:处理cpu异常和非屏蔽中断,它实际上被Intel保留,操作系统不可使用。

2、32~127:由外部硬件触发,它又分为可屏蔽中断(INTR)和非可屏蔽中断(NMI)。

3、128:linux用于系统,当执行int 0x80时,就会陷入内核态执行system_call。

对于硬件中断来说,中断向量号 = IRQ + 32,因为前31个是cpu异常。IRQ0对应的中断向量号是32(0x20)。