前一阵子,有人问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,之后就是下半部了。
书中第六章第七章有具体的介绍。详细了解下是到那吧
阅读(5705) | 评论(0) | 转发(0) |