我是靠谱客的博主 诚心大山,最近开发中收集的这篇文章主要介绍Linux中对中断的处理Linux中对中断的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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中对中断的处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部