linux2.4.0内核中断嵌套处理,可能性分析如下:
1,同一中断线:是否可嵌套,取决于ack是否发屏蔽中断线信号给硬件?
可嵌套中断:
场景:[cpu0 A进程 i ii] [cpu1 B进程] ,先i中断执行后执行ii。若有iii,同理。
两中断(i及ii)被中断控制器分配到同一核cpu0处理,此时使用的堆栈空间均为A的
i ii中断嵌套处理使用边缘触发方式,即i在可中断环境 handle_IRQ_event中处理未返回,ii中断进入do_IRQ流程,发现此时i未完成(简单这样理解),不做handle_IRQ_event处理即刻返回,多嵌套同理。返回i中断处理时,判断当前中断线是否有pending,因该场景pending者ii,为保证所有中断都得到处理机会,会触发再遍历处理一次,ii得以处理。
场景:[cpu0 A进程 i] [cpu1 B进程 ii]
两中断(i及ii)分别被中断控制器分配到cpu0 cpu1中处理 此时各自使用命中进程的堆栈空间,此时无中断嵌套。
不可嵌套中断:
在进入do_IRQ时便ack屏蔽了该中断线,使得同一中断线上中断无法嵌套。
场景:[cpu0 A进程 i ii] [cpu1 B进程]
严格串行化处理
场景:[cpu0 A进程 i] [cpu1 B进程 ii]
处理等同于可嵌套中断的场景:[cpu0 A进程 i] [cpu1 B进程 ii]
2,混合中断线:不同中断线定是可以中断嵌套的
若同线可嵌套:
场景ÿ