我知道一个ISR需要非常快,并且应该很快处理一个中断。但我不明白相同的原因。为什么要满足这个条件?而且,为了做到这一点,ISR代码有什么限制吗?通常,什么都不应该包含在ISR的代码中?什么都不能在中断服务程序?
感谢
我知道一个ISR需要非常快,并且应该很快处理一个中断。但我不明白相同的原因。为什么要满足这个条件?而且,为了做到这一点,ISR代码有什么限制吗?通常,什么都不应该包含在ISR的代码中?什么都不能在中断服务程序?
感谢
我知道一个ISR需要非常快速,应该处理的 很快中断。但我不明白的 相同
最严格的要求的原因是,一个ISR
不能块 - 它无法入睡。所以你不能使用信号量。
每个中断都与硬件有关。想想一个网络设备。它有一个非常小的内存,然而它以高速接收帧。你最好把它的东西快速复制到主内存中,否则这些帧会压倒设备,并且会造成画面溢出。
当ISR执行时,不能在同一个CPU上执行线程,所以线程调度会受到影响,执行时间越长,影响就越大。根据实现(软件和硬件)的不同,在执行ISR时可能会禁用所有中断(或较低优先级的中断),这意味着如果ISR需要很长时间才能完成,其他中断可能处理得不够快,这意味着会出现延迟甚至错过中断。
还有一些其他的事情要考虑:
如果您获得了在ISR锁,可以是已经锁定,如果没有其他ISR或CPU释放该锁,则可能会进入无限循环。
如果您触摸交换到磁盘的内存页面,则可能会遇到类似的情况,因为页面错误处理程序可能无法将该页面从磁盘移动到内存(如果它在某个线程中执行的话)并且该线程无法执行,因为与ISR相比,该线程的优先级较低并且从不计划。
谢谢亚历克斯,我希望我可以标记多个答案是正确的。 – 2012-02-25 08:41:45
因此,我可以将其视为中断处理程序以非常快的速度从I/O设备接收数据,因此它必须将其写入内存,否则我们可能会丢失一些数据。对?如果是的话,我们如何确保我们的ISR速度足够快以至于框架不会泄漏? – 2012-02-25 08:35:49
@DeeptiJain你不能。只要确保其速度尽可能快。 – cnicutar 2012-02-25 08:37:17
非常感谢..要学习新东西 – 2012-02-25 08:39:51