《linux内核设计与实现》Chapter6中断和中断处理程序(笔记)

本文深入探讨了中断处理的概念,包括同步中断与异常的区别,中断处理程序的分类及其在设备驱动程序中的注册与激活机制。同时介绍了中断上下文的概念,内核如何管理中断过程,以及如何实现中断控制。最后,总结了中断处理程序的编写规则,以及内核将处理中断分为上半部和下半部的原因。

6章中断和中断处理程序




6.1中断(使硬件与CPU通信)

不同设备中断不一样,有各自唯一标识

异常(不等于中断)

常称为同步中断(因与系统时钟有关)


6.2
中断处理程序
(硬件:HI,我有东西要你帮我处理呢CPUHI,我收到了,你回去继续值班吧)

1.上半部(tophalf)紧迫,有限的工作

2.下半部(bottomhalf)可延时性的工作


6.3注册中断处理程序

(每一设备有对应驱程,设备使用中断,驱程则注册一个中断处理程序)

注册并激活:

在一个驱动程序中请求一个中断线,并通过request_irq()安装中断处理程序

释放:

卸载驱动程序,注销相应中断处理程序,并通过free_irq()释放中断线


6.4编写中断处理程序

典型声明例子:

staticirqreturn_t intr_handler(int irq, void *dev_id, structpt_regs, *regs )
Linux
中断处理程序无需重入(也就是说一个中断线正在执行,另外的中断不能干扰)

1.共享中断处理程序

与非共享中断处理程区别(共享中断处理程序必须满足):

1flahs必须设置为SA_SHIRQ

2对每个注册的中断dev_id参数唯一

3中断处理程序必须区分设备是否产生了真中断


6.5中断上下文interruptcontext

注意啦,这里是中断上下文,而不是进程上下文,不记得的看回第一章,上面有说什么时候在进程上下文与中断上下文的

1.进程上下文(processcontext):一种内核所处的操作模式(可抢占,可sleep,可syscalls),此时内核代表进程执行

2.中断上下文(interruptcontext):

有严格的时间限制(打断了其他代码)

中断处理程序的栈是一个配置选项,共享中断进程的内核栈2

6.6中断处理机制的实现(注:原书有详细介绍)


6.7中断控制(提供一种接口操作中断状态)
中断控制原因:提供同步

1禁止&激活中断:

local_irq_disable()| local_irq_able()

load_irq_save() | load_irq_restore()

保存中断状态→ 禁止中断 →...→ 恢复中断状态→ 激活中断 (嘿(→...→ )这个表情屌)

2禁止指定中断线:

disable_irq() | enable_irq()

synchronize_irq() | disable_irq_nosyne()

3中断系统状态:

检查内核当前上下文接口

in_interrupt()

in_irq()


中断小结:
1.
对硬件管理的驱动程序注册中断处理程序(为响应并处理来自硬件的中断)

2.中断过程工作:

1.应答并设置硬件

2.设备拷贝数据到内存——内存拷贝数据到设备

3.处理硬件请求

4.发送新硬件请求

3.内核提供接口:

1.注册/注销中断处理程序

2.禁止中断

3.屏蔽中断线

4.检测中断系统状态

4.内核把处理中断分为——上半部&下半部

(不要混淆了,中断处理程序通常指上半部,中断处理与处理中断不一样哦)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值