Intel x86共有256种异常或者中断,也就是常说的中断向量,分别有对应的中断类型码,分布如下
0-31 | 异常和非屏蔽中断 |
32-47 | 由I/O设备引起的屏蔽中断,书中所讲为8259A单片机来处理响应34号中断外的其他中断 |
48-255 | 标识软中断,linux系统只使用了128号即0x80来实现系统内调用,在用户态下执行int 0x80汇编,cpu切换到内核态,执行system_call()函数 |
对于cpu跑指令的过程中遇到的突发情况分为两大类
CPU内部
cpu内部出现的问题,必须马上处理,所以叫异常;
CPU外部
cpu外部出现问题,可以不马上处理,所以采用可屏蔽和不可屏蔽中断的方式来区分。
为了管理方便,异常和不可屏蔽中断都当作异常来处理,这类问题有专门的异常处理程序,是linux要解决的问题。
0-17号是intel定义异常,除了3,4,5(以及后面的128)号是陷进外(留给系统调用),其他的都是故障,cpu跑不下去了,所以需要处理
18-31号为将来的cpu保留
32-47由8259A响应,对应下面的IRQ0-IRQ15,34号中断也就是IRQ2不知道做什么
还有个128号软中断系统调用
新闻热点
疑难解答