概述
Linux中对中断的处理
对于大部分异常,Linux只是给引起异常的当前进程发送一个信号就结束异常处理,具体的异常处理转到信号处理程序进行。
对于中断,因为中断事件的发生与正在执行的当前进程很可能没有关系,所以将一个信号发给当前进程没有意义。
Linux中有三种类型中断
- IO中断,IO外设的中断请求。
- 时钟中断,某时钟产生的中断请求,告知固定时间间隔到
- 处理器中断,多处理器系统中其他处理器发出的中断请求
IO中断:每个能发中断请求的外设控制器都有一条IRQ线,所有IRQ线连接到一个可编程中断控制器PIC(programmable Interrupt Controller)对应的IRQ引脚上,PIC中每个IRQ引脚都有一个编号,如IRQ0,IRQ1,…IRQi,…,将与IRQi关联的中断类型号设定为32+i。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
- 恢复阶段。恢复保存在内核栈中的各个寄存器的内容,切换到用户态并返回到当前进程的逻辑控制流的断点处继续执行。
最后
以上就是诚心大山为你收集整理的Linux中对中断的处理Linux中对中断的处理的全部内容,希望文章能够帮你解决Linux中对中断的处理Linux中对中断的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复