Kernel 在x86上,当操作系统禁用中断时,中断是消失,还是排队并';等等';让中断重新出现?

Kernel 在x86上,当操作系统禁用中断时,中断是消失,还是排队并';等等';让中断重新出现?,kernel,driver,interrupt,interrupt-handling,kmdf,Kernel,Driver,Interrupt,Interrupt Handling,Kmdf,我的平台是x86和x86-64,在Windows上 中断优先级系统的要点是让最高优先级的中断击败其他中断。为了实现这一点,我猜测Windows将完全禁用所有较低级别的中断,直到较高级别中断的ISR完成 但是如果CPU没有监听中断,会发生什么?他们只是默默地消失吗?或者他们在硬件中排队,等待中断再次启用?如果储存在哪里?排队人数是否有限制?如果太多的中断未被处理,会发生什么?在中断处理被积压的罕见情况下,存在哪些检测工具来检测问题?某些背景 来自外围设备的中断不直接由CPU处理,而是由称为“可编程

我的平台是x86和x86-64,在Windows上

中断优先级系统的要点是让最高优先级的中断击败其他中断。为了实现这一点,我猜测Windows将完全禁用所有较低级别的中断,直到较高级别中断的ISR完成


但是如果CPU没有监听中断,会发生什么?他们只是默默地消失吗?或者他们在硬件中排队,等待中断再次启用?如果储存在哪里?排队人数是否有限制?如果太多的中断未被处理,会发生什么?在中断处理被积压的罕见情况下,存在哪些检测工具来检测问题?

某些背景

来自外围设备的中断不直接由CPU处理,而是由称为“可编程中断控制器”的硬件处理。早期的系统使用PIC-(英特尔),但由于其缺乏对SMP系统的支持,现在使用了Adavnced PIC-APIC(英特尔)。APIC有两个组件,IO APIC(主板的一部分)将这些中断请求转发给本地APIC(CPU的一部分)。
但这些硬件只是将消息传递给CPU,实际处理由特定设备的设备驱动程序完成

现在回答您的问题

但是如果CPU没有监听中断,会发生什么?他们只是默默地消失吗?或者他们在硬件中排队,等待中断再次启用

这篇文章根据中断处理程序的执行速度讨论了两类中断处理程序:
1.快速:在禁用更多中断的情况下运行,
2.慢速:在启用中断的情况下运行。
但是现在两者之间的区别已经过时了,因为小任务/工作队列(上半部分和下半部分-敲响了警钟?)使得处理程序的执行时间非常少,因此现在中断处理程序是在启用中断的情况下运行的。对于I2C等速度较慢的设备,我们采用了一种新技术,称为I2C,它甚至比上/下半部分方法更好。对于某些设备,如果上述技术不起作用,那么处理程序将在禁用中断的情况下执行,是的,在这种情况下,您会不断丢失中断,但我找不到发生这种情况的任何实例

如果储存在哪里?排队人数是否有限制?如果太多的中断未被处理,会发生什么

不,它们没有排队,如果中断需要被禁用,那么这是一个糟糕的中断处理程序设计,而且在更长的时间内也是如此

在中断处理积压的罕见情况下,存在哪些检测工具来检测问题


如果中断被禁用,那么您就无能为力,但是如果它们被启用,并且您不断得到更多的中断,那么就会导致中断嵌套,从而导致系统崩溃。然后可以使用核心转储来检测原因。

这个问题与Windows有关,而不是与Linux有关,您的大多数答案都与Linux有关。