2012-02-25 44 views
0

我知道一个ISR需要非常快,并且应该很快处理一个中断。但我不明白相同的原因。为什么要满足这个条件?而且,为了做到这一点,ISR代码有什么限制吗?通常,什么都不应该包含在ISR的代码中?什么都不能在中断服务程序?

感谢

回答

2

我知道一个ISR需要非常快速,应该处理的 很快中断。但我不明白的 相同

最严格的要求的原因是,一个ISR不能块 - 它无法入睡。所以你不能使用信号量。

每个中断都与硬件有关。想想一个网络设备。它有一个非常小的内存,然而它以高速接收帧。你最好把它的东西快速复制到主内存中,否则这些帧会压倒设备,并且会造成画面溢出。

+0

因此,我可以将其视为中断处理程序以非常快的速度从I/O设备接收数据,因此它必须将其写入内存,否则我们可能会丢失一些数据。对?如果是的话,我们如何确保我们的ISR速度足够快以至于框架不会泄漏? – 2012-02-25 08:35:49

+0

@DeeptiJain你不能。只要确保其速度尽可能快。 – cnicutar 2012-02-25 08:37:17

+0

非常感谢..要学习新东西 – 2012-02-25 08:39:51

4

当ISR执行时,不能在同一个CPU上执行线程,所以线程调度会受到影响,执行时间越长,影响就越大。根据实现(软件和硬件)的不同,在执行ISR时可能会禁用所有中断(或较低优先级的中断),这意味着如果ISR需要很长时间才能完成,其他中断可能处理得不够快,这意味着会出现延迟甚至错过中断。

还有一些其他的事情要考虑:

  1. 使用锁ISR中
  2. ISR中
  3. 感人分页内存

如果您获得了在ISR锁,可以是已经锁定,如果没有其他ISR或CPU释放该锁,则可能会进入无限循环。

如果您触摸交换到磁盘的内存页面,则可能会遇到类似的情况,因为页面错误处理程序可能无法将该页面从磁盘移动到内存(如果它在某个线程中执行的话)并且该线程无法执行,因为与ISR相比,该线程的优先级较低并且从不计划。

+0

谢谢亚历克斯,我希望我可以标记多个答案是正确的。 – 2012-02-25 08:41:45

相关问题