当前位置: 技术问答>linux和unix
设备在发出中断后如何处理
来源: 互联网 发布时间:2016-09-18
本文导语: 在读内核代码的时候有一个地方不太明白。当中断服务程序ISR在处理一个中断的时候,同一CPU上相同的IRQ在PIC上是被屏蔽的(对于APIC好像同一个IRQ可以在不同的CPU上嵌套发生),也就是PIC不再允许后来的相同IRQ的中...
在读内核代码的时候有一个地方不太明白。当中断服务程序ISR在处理一个中断的时候,同一CPU上相同的IRQ在PIC上是被屏蔽的(对于APIC好像同一个IRQ可以在不同的CPU上嵌套发生),也就是PIC不再允许后来的相同IRQ的中断再次发送到CPU,直到ISR执行完毕想PIC做出确认为止。如果在ISR运行期间设备再次发出中断会不会丢失呢?
很多资料中对PIC到CPU这一段的处理描述的很清楚,但是对设备到PIC之间的情况却提到的不多。我做出一个猜测是当设备发出中断后要等到确认后才再次发出后续中断。这种确认要么是在ISR确认PIC后由PIC来确认,要么是由ISR来确认(ISR知道它服务设备的寄存器地址)。不知道是否是这样。如果是这样,当设备工作很频繁而ISR服务的又很慢,会不会导致设备中数据的丢失?
很多资料中对PIC到CPU这一段的处理描述的很清楚,但是对设备到PIC之间的情况却提到的不多。我做出一个猜测是当设备发出中断后要等到确认后才再次发出后续中断。这种确认要么是在ISR确认PIC后由PIC来确认,要么是由ISR来确认(ISR知道它服务设备的寄存器地址)。不知道是否是这样。如果是这样,当设备工作很频繁而ISR服务的又很慢,会不会导致设备中数据的丢失?
|
1、硬件发出中断后不需要等待确认。
2、如果ISR服务很慢,确实会造成中断丢失的现象。因此慢速的ISR一般分成两部分处理:上半部分和下半部分。上半部分一般在尽可能短的时间内运行完,只保存下半部分需要用到的参数,然后就退出ISR。这时系统又可以接受新来的中断。在上半部分完成后,系统再运行下半部分来实际处理中断。
2、如果ISR服务很慢,确实会造成中断丢失的现象。因此慢速的ISR一般分成两部分处理:上半部分和下半部分。上半部分一般在尽可能短的时间内运行完,只保存下半部分需要用到的参数,然后就退出ISR。这时系统又可以接受新来的中断。在上半部分完成后,系统再运行下半部分来实际处理中断。
|