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
  • 恢复阶段。恢复保存在内核栈中的各个寄存器的内容,切换到用户态并返回到当前进程的逻辑控制流的断点处继续执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值