同一个定时器中断可以并行发生吗?

Can the same timer interrupt occur in parallel?

我在内核模块中实现了一个定时器中断处理程序。

这个定时器中断处理程序需要大约 1000us 到 运行。

我希望这个定时器每 10us 触发一次。

(这样做,我希望能并行执行相同的处理程序。)

(我知道这会产生大量的中断开销,但我想实现它以进行一些测试。)

但是这个处理程序似乎不能运行并行。

定时器中断似乎要等到正在进行的处理程序完成。

同一个定时器中断可以并行发生吗?

如果没有,是否有内核机制可以运行并行处理同一个处理程序?

如果计时器每 10 微秒触发一次,并且需要 1000 微秒(1 毫秒)才能完成,您将需要 100 个专用 cpu 才能勉强跟上计时器。简短的回答是否定的,中断系统不会支持这个。如果中断递归,它不可避免地会消耗中断处理程序堆栈。

中断通常通过在中断断言时直接调用一小段代码来工作。如果要完成更多的工作,这个短位会安排一个较慢的位来跟进,并抑制这个中断源。这是为了最大限度地减少不同设备寻求 cpu 注意力所造成的延迟。当较慢的位确定它已满足设备请求时,可以重新启用来自该源的中断。

[在linux中,短的位称为上半部;下半部分速度较慢。这有点令人困惑,因为几十年的内核实现 pre-linux 完全相反地命名了它。最好避免使用这些术语。 ]

获得您想要的效果的许多方法之一是让这个缓慢的处理程序释放一个信号量,然后重新启用中断。然后,您可以让适当数量的线程处于循环中,获取信号量然后执行您的任务。