【发布时间】:2012-03-15 14:16:09
【问题描述】:
我知道 ISR 需要非常快,并且应该非常快地处理中断。但我不明白同样的原因。为什么要满足这个条件?此外,为了做到这一点,对 ISR 代码的所有内容是否有任何限制?通常,ISR 的代码中不应包含哪些内容?
谢谢
【问题讨论】:
标签: operating-system linux-kernel interrupt
我知道 ISR 需要非常快,并且应该非常快地处理中断。但我不明白同样的原因。为什么要满足这个条件?此外,为了做到这一点,对 ISR 代码的所有内容是否有任何限制?通常,ISR 的代码中不应包含哪些内容?
谢谢
【问题讨论】:
标签: operating-system linux-kernel interrupt
当一个 ISR 执行时,没有线程可以在同一个 CPU 上执行,所以线程调度会受到影响,执行的时间越长,影响越大。根据实现(软件和硬件),所有中断(或较低优先级的中断)可能在 ISR 执行时被禁用,这意味着如果 ISR 需要很长时间才能完成,其他中断可能无法足够快地处理,这意味着存在将是延迟甚至错过中断。
还有一些其他的事情需要考虑:
如果您在 ISR 中获得了一个已经可以锁定的锁,如果没有其他 ISR 或 CPU 来释放该锁,您可能会进入无限循环。
如果您触摸已交换到磁盘的内存页面,您可能会遇到类似的情况,因为如果页面错误处理程序在线程中执行此操作,则可能无法将该页面从磁盘带到内存中并且该线程无法执行,因为与 ISR 相比优先级较低且从未被调度。
【讨论】:
我知道 ISR 需要非常快速并且应该处理 中断非常快。但我不明白原因 一样的
最严格的要求是ISR 不能阻塞——它不能休眠。所以你不能使用信号量。
每个中断都与硬件有关。想想网络设备。它有一个非常小的内存,但它可以高速接收帧。您最好将其中的内容快速复制到主内存中,否则帧会淹没设备并且会溢出帧。
【讨论】: