简介
1.基于Linux0.11代码进行分析。
2.中断类型分类以及具体的中断。
3.中断向量的注册。
4.中断处理流程。
5.各类型中断的具体执行流程。
中断的类型及具体的种类
Linux0.11内核注释
1.可屏蔽硬件中断。优先级较低,可以被忽略或者延后处理,通常有键盘,打印机。
2.不可屏蔽硬件中断。CPU必须无条件响应,优先级非常的高,通常有电源断电,内存校验错误。
3.软件中断--错误。缺页异常?内存访问时产生缺页异常中断,在中断处理程序中实际分配内存,然后在缺页中断处理完成后,继续访问内存。
4.软件中断--陷阱。常见的例子有系统调用,int 0x80,首先会调用中断处理程序,处理完成后,会继续执行后面的指令。
5.软件中断--放弃。常见的例子有除零,该错误发生后,调用中断处理程序,中断处理程序中会产生SIGFPE信号,程序可通过注册对应的信号处理函数处理该信号。
中断向量的注册
1.源码在head.s这个文件中。
2.0x20-0x2f是硬件中断,在head.s中初始化为ignore_int后,后续的硬件初始化过程中会初始化其中断处理函数。
3.中断向量存储在全局的中断向量数组结构中,该数组长度256,每个元素8个字节,在head.s文件中定义。在system.h文件中,定义了设置该数组的接口。代码如下:
// head.s
.al