linux 中断嵌套整理

Linux 的中断处理程序不需要重入,同一中断处理程序不会并发处理嵌套中断,简化了编程。中断处理分为上半部和下半部,上半部处理紧急任务并屏蔽中断,下半部则允许其他中断,提高响应能力。例如,网卡接收中断的上半部包括接收、应答和拷贝数据,下半部则延迟执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一阵子,有人问linux支持中断嵌套吗。  了解了解linux对硬件中断的处理吧,如有错误还望指正,不胜感激
《linux kernel development》中有一段话相当经典:
 
Reentrancy and Interrupt Handlers
 
Interrupt handlers in linux need not be reentrant.When a given interrupt handler is executing,the corresponding interruupt line is masked out on all processors, preventing another interrupt on the same line from being received,Normally all other interrupts are enabled,so other interrupts are serviced,but the current line is always disabled. Consequently, the same interrupt interrupt hander is nerver invoked concurrently to service a nested interrupt. This greatly simplifies writing your interruupt handler
 
 
意思是:linux中的中断处理程序是无需重入的。当一个给定的中断处理程序正在执行时, 相应的中断线在所有处理器上都会被屏蔽掉, 以防止在同一中断线上接收另一个新的中断。 通常情况下,所有其他的中断都是打开的,所以这些不同中断线上的其他中断都能被处理 ,但当前中断线总是被禁止的。由此可以看出,同一个中断处理程序绝对不会被同时调用以处理嵌套的中断这极大的简化了中断处理 程序的编写。
说明:
linux会把处理硬件中断的过程分为两个部分叫做top halves 和 Bottom halves 上半部分做的工作是时间要求比较紧,操作硬件,或不能被别的中断打断的的重要工作,这时会在所有处理器上屏蔽当前中断线,如果这个中断处理是 SA_INTERRUPT标记的,那么所有的本地中断都会全局的被屏蔽掉。下半部分则会恢复响应所有中断,这就使系统处于中断屏蔽状态的时间尽可能的短 了,中断响应能力自然也就高了。下半部分完成的工作对时间也不那么敏感,和硬件无关了,可以稍后点执行。
 
就比如本上有个例子:说的是网卡接收中断处理,上半部分:中断开始,接收,进入中断处理程序,应答网卡,拷贝网络数据包到内存sk_buff,之后就是下半部了。
书中第六章第七章有具体的介绍。详细了解下是到那吧
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值