koo*_*eak 6 kernel interrupt linux-device-driver linux-kernel interrupt-handling
即使在一些写得很好的内核书籍中,我也无法找到以下问题的正确答案:
他们说ISR无法入睡,因为它不能重新安排ISR,因为它没有与任何进程相连,所以当更高优先级的中断抢占执行进程时会发生什么呢?中断的ISR不会再次重新安排(执行)?如果是的话,谁将做这项工作?
很多时候我们会禁用中断(例如:1.在关键区域2.当执行快速中断时,它会禁用当前处理器中的所有中断),那么当中断被禁用时发生的中断会发生什么?他们被简单地丢弃了?或将被存储在某处以供以后执行?如果是,在哪里以及如何?
当ISR执行时,它将禁用当前IRQ线中的中断以避免重入(防止同一线路上的另一个ISR被执行),但为什么呢?如果ISR是可重入的,那该怎么办?
*ISR =中断服务程序
*他们= Book的作者
据我所知,ISR 可以被另一个中断抢占,然后继续运行。我认为没有理由可以将进程放入堆栈而 ISR 则不能。
进程是操作系统级别的事物,而 ISR 是 CPU 级别的事物。如果你在一个进程中调用 sleep() ,你就告诉操作系统你没有正确知道的工作,并且它可能会运行另一个进程。这不适用于 ISR。
另外,禁用中断是什么意思?