irq_check_poll的有什么作用

一、介绍一下线程化中断

不知道什么是线程化中断。
中断是指CPU终止当前运行程序转而处理系统中优先级较高的事件,事件处理完后,回来接着原来的程序运行。被中断程序的状态必须得到完好的保存,中断子程序结束后,原程序应该能继续正确运行。
中断按中断源来分可以分为:
软中断:中断由运行程序本身产生。如TRAP;程序自己执行一些指令来改变程序正常运行流程
硬中断:中断由硬件信号产生;如看门狗引起
中断按严重程度分:
不可屏蔽中断:属于优先级较高的事件;只要发生就不能被忽视,必须处理
可屏蔽中断:  可以通过软件配置屏蔽这类中断;即使发生系统也可不理

二、generic irq抽象出了对控制器的操作与以及对edge or level trigger的处理,那原来__do_IRQ里的哪些代码区别对待了edge-triggered和level-triggered。

较新的处理器对edge or level trigger的处理, 完全由硬件处理,软件只需对软件源进行初始化配置。edge or level trigger决定于中断源。在每个CPU的手册里,都列出该系统所有中断源,中断源对应的序号,edge or level trigger型或两种都可;软件对中断源初始化时,就要决定用edge还是level来产生中断;一旦决定了,如果中断源锁定一个有效的信号,就会在中断控制器把相应的中断信号使能。基本上有硬件完成,软件不区分。

三、8259在不能与CPU与交互的情况下是否能锁存住一次edge-triggered中断。
8259太老了,研究一下powerpc或arm的中断控制器吧
8259和CPU之间应该只是硬件连线,没有程序交互;如果锁存住一次edge-triggered中断,它应该只是硬件上传递一个中断信号到CPU

四、举出具体例子,从中断发出方的视度来看中断的整个流程。如果设备是level-triggered,它什么时候撤消中断信号?如果设备是edge-triggered,某一次边沿变化后,它会马上还原为之前的电平信号还是下一次再想中断时才变化?

如果中断源是CPU自己的外设,如powerpc DSPI送完最后一个frame EDQ(endof queue) bit set, EQQ bit会触发中断;这类中断由CPU生产厂商考虑,不论是edge还是 level trigger;CPU都会保证送到最后一帧时会产生一次中断;如果设备不是CPU外设,而是用户自己设计设备;CPU对输入的中断信号有要求;硬件设计者要进行很多的信号时序匹配测试,保证输出的信号能引起中断,并只中断一次。你的这个问题是硬件的问题,不是软件的问题。

Generic IRQ似乎就是抽象出了一种假想的中断控制器,假定它具有某些操作,然后真正硬件控制器驱动组合使用primitive operations来到达期待的效果。但是初学者不好理解假定的细节啊。比如ack方法有什么效果?level-triggered中断是不是先ack控制器,再ack设备?而edge-triggered中断只需要ack控制器?

这个问题应该是platform dependant.和硬件有关;powerpc,CPU只管有没有中断,不管edge or level trigger;只需ack中断控制器。

另外为什么 handle_edge_irq里有个循环而handle_level_irq里没有?irq_check_poll的有什么作用最终达成何种效果? handle_edge_irq注释里的一段话:

不管是edge trigger 还是level trigger,只要中断源发出的中断信号能被中断控制器锁定,这就是一个中断;中断处理程序应该只要知道是哪一个设备发生中断请求,不应关心中断信号是一个edge 还是level;linux里可能有很多太老的设备要维护,所以需要这么分开处理。至于中断查询,用得更少了。


QUOTE:   This requires to reenable the interrupt inside
      of the loop which handles the interrupts which have arrived while
      the handler was running.

这是一个中断嵌套问题,当前有一个中断正在处理,新的优先级高的中断又发生;这是如果中断还是开放状态,当前中断就会被抢夺,转而执行优先级高的中断。
加注释的地方就是告诉你,目前的中断处理到这里时,可以很安全的被抢夺,你可以在这里重新打开中断,如果有更高级中断发生就可及时得到处理。


建议:
如果想研究中断,找新一点的ARM或Powerpc; 花很多时间到老旧产品上不大合适;你问的这些level/edge处理方法,现代硬件用得很少了。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值