17

我的平台是 Windows 上的 x86 和 x86-64。

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

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

4

1 回答 1

12

一些背景

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

现在回答你的问题

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

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

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

不,它们没有排队,如果需要禁用中断并且需要更长的时间,这是一个糟糕的中断处理程序设计。

有什么工具可以检测问题,以防中断处理积压的罕见情况?

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

于 2014-03-09T11:50:28.177 回答