Operating system 中断服务例程中不可能有什么?

Operating system 中断服务例程中不可能有什么?,operating-system,linux-kernel,interrupt,Operating System,Linux Kernel,Interrupt,我知道ISR需要非常快,并且应该非常快地处理中断。但我不明白原因是什么。为什么要满足这个条件?此外,为了做到这一点,是否对ISR代码的所有功能都有任何限制?通常,ISR代码中不应包含哪些内容 谢谢 我知道情报、监视和侦察需要非常迅速,并且应该处理紧急情况 打断得很快。但我不明白为什么会这样 同样的 最严格的要求是ISR无法阻止-无法睡眠。例如,你不能使用信号量 每个中断都与硬件有关。设想一个网络设备。它有一个非常小的内存,但它接收帧的速度很快。您最好快速将内容从它复制到主内存中,否则帧将淹没设备

我知道ISR需要非常快,并且应该非常快地处理中断。但我不明白原因是什么。为什么要满足这个条件?此外,为了做到这一点,是否对ISR代码的所有功能都有任何限制?通常,ISR代码中不应包含哪些内容

谢谢

我知道情报、监视和侦察需要非常迅速,并且应该处理紧急情况 打断得很快。但我不明白为什么会这样 同样的

最严格的要求是
ISR
无法阻止-无法睡眠。例如,你不能使用信号量


每个中断都与硬件有关。设想一个网络设备。它有一个非常小的内存,但它接收帧的速度很快。您最好快速将内容从它复制到主内存中,否则帧将淹没设备并溢出帧。

当ISR执行时,没有线程可以在同一CPU上执行,因此线程调度受到影响,执行时间越长,影响越大。根据实施情况(软件和硬件),在执行ISR时,所有中断(或低优先级中断)都可能被禁用,这意味着如果ISR需要花费大量时间来完成,则其他中断可能处理得不够快,这意味着会有延迟甚至错过中断

还有几件事需要考虑:

  • 在ISR中使用锁
  • 在ISRs中触摸分页内存
  • 如果您在ISR中获得了一个可以锁定的锁,如果没有其他ISR或CPU来释放该锁,您可能会进入无限循环


    如果您触摸一页已交换到磁盘的内存,您可能会遇到类似的情况,因为页面错误处理程序可能无法将该页面从磁盘带到内存,如果它在线程中执行该操作,那么该线程无法执行,因为与ISR相比优先级较低,并且从未被调度。

    因此,我可以将其可视化为中断处理程序从I/O接收数据设备的速度非常快,所以它必须将其写入内存,否则我们可能会丢失一些数据。正当如果是这样的话,我们如何确保我们的ISR足够快,这样画面就不会溢出?@DeeptiJain,你不能。请确保它尽可能快。谢谢Alex,我希望我能标记多个答案以确保正确。