Linux中的中断调度和处理

时间:2018-06-21 09:46:06

标签: linux-kernel interrupt-handling

假设我们从网络设备获得100个中断,从USB设备获得50个中断,从SPI设备获得25个中断,从I2c获得25个中断。

它依次如下 5Net-4USB-2SPI -2I2C,遵循相同的顺序。

顶级处理程序可以调度特定于设备的处理程序来服务中断

现在,处理器将在获得Net设备的中断后立即中断正在运行的任务。在完成Net设备的INTERrupt处理程序的上半部分后,它必须执行USB,SPI和I2C的上半部分。

在完成第一个序列集之后,将遵循相同的序列。中断的任务何时会再次唤醒?被中断的任务是否要等到所有100个中断都由其各自的特定于设备的处理程序处理?在多核系统中,如何处理数十万个中断,如何将中断共享给不同的内核?

据我所知,执行中断处理程序时,处理器将处于中断上下文中,因此不会进行任何上下文切换。由于不同的ISR必须服务于成千上万的中断,因此处理器是否始终处于中断上下文中?

1 个答案:

答案 0 :(得分:0)

被中断的任务何时再次唤醒?
清除中断后,调度程序决定给此任务处理器时间。

被中断的任务是否要等到所有100个中断都由其各自的设备专用处理程序来处理?
您仅描述了四个IRQ来源(某些网络设备,usb,spi,i2c)。因此,如果所有IRQ线都为高电平且使能,则处理这些irq的cpus将切换到特定的中断处理程序。如果在处理程序之后仍然触发了中断,则为其服务的cpu将一次又一次地跳转到中断处理程序,直到清除该中断为止。在具有5个CPU的多CPU系统上,四个可以同时为您的设备执行中断处理程序,而另一个可以执行您的任务。因此,您的任务可能根本不会中断。或者,当中断处理程序编写不当且从不清除IRQ行时,它可能会在单个cpu系统上永远等待cpu。

在多核系统中,由于必须处理大量中断,如何将中断共享给不同的内核?
我认为最好在这里进行解释:multi-core CPU interrupts

由于不同的ISR必须处理数十万个中断,因此处理器将始终处于中断上下文中吗?
它将保持在中断上下文中,直到启用IRQ并触发IRQ。您可以根据需要禁用IRQ线路,然后将CPU返回调度程序。