Linux中断处理
对大多数异常,Linux将异常处理异常的当前过程发送信号即可结束异常处理,具体异常处理转移到信号处理程序。
由于中断事件的发生可能与正在执行的当前过程无关,因此向当前过程发送信号毫无意义。
Linux中断有三种类型
- IO中断,IO外设中断请求。
- 中断时钟,中断时钟的请求,告知固定时间间隔
- 多处理器系统中处理器系统中发出的处理器中断请求
IO中断:每个能发中断请求的外设控制器都有一条IRQ线,所有IRQ连接到可编程中断控制器的线PIC(programmable Interrupt Controller)对应的IRQ引脚上,PIC中每个IRQ引脚有一个数字,比如IRQ0,IRQ1,…IRQi,…,将与IRQi相关中断型号设置为32 i。IRQ是中断请求号。IRQ是中断请求号。 Interrupt ReQuest
可编程:寄存器可被CPU存取控制。
PIC中间寄存器:中断屏蔽字寄存器,中断请求寄存器。CPU可以通过OUT将一个字送到中断屏蔽字寄存器。CPU发出中断查询(控制线),设置屏蔽字。中断请求信号INTR和中断型号都是送给和中断型号的CPU(数据线)。
指令结束后,在执行下一个指令之前查看中断,如果没有,则继续执行下一个指令。
确定优先级,然后查找编码。
处理过程
检测、响应、处理。
PIC虚对所有外设来的IRQ如果至少有一个请求按优先级排队IRQ如果要求,未被屏蔽的,PIC向CPU的INTR引脚中断请求。
CPU每次执行一个指令,都会查询INTR,如发现中断请求,则进入中断响应过程(关闭中断,保护断点和现场,发送中断查询信号),调出中断服务程序执行。
所有中断服务程序的结构相似,分为以下三个阶段:
- 准备阶段。各通用寄存器和旧屏蔽状态字(称为现场信息)的内容保存在内核栈中,请求IRQi的值,并给PIC回发响应信息,允许其发送新的中断请求信号。
- 处理阶段IRQi相应的中断服务例程ISR(Interrupt Server Routine)。中断类型号32 i
- 恢复阶段。恢复内核栈中各寄存器的内容,切换到用户状态,返回到当前流程逻辑控制流的断点。