我想知道哪些线程处理设备中断。当用户模式线程运行时出现中断时会发生什么?当系统处理中断时,其他用户线程是否也有机会运行?
请向我推荐一些描述窗口如何处理中断的参考资料。
设备中断本身(通常)由任何具有 CPU 接受中断的线程处理,但在环 0 中并处于不同的保护级别。这限制了中断处理程序可以采取的一些操作,因为大多数时候当前线程与等待中断指示的事件发生的线程无关。
内核本身是封闭源代码,仅通过其内部 API 记录。该 API 向设备驱动程序作者公开,并在驱动程序开发工具包中进行了描述。
一些帮助您入门的资源:
Solomon 和 Russinovich的任何版本的Microsoft Windows Internals。当前似乎是第 4 版,但即使是旧版也会有所帮助。
Sysinternals有工具和文章来探究和解释内核的行为。这曾经是一个独立的站点,直到微软厌倦了 Mark Russinovich 似乎比他们更了解内核的工作原理。;-)
请注意,许多常见设备驱动程序的源代码都包含在示例中的 DDK 中。尽管生产版本几乎可以肯定不同,但即使您不想自己实现驱动程序,阅读示例驱动程序也可以回答一些问题。
像任何其他操作系统一样,Windows 在内核模式下处理中断,具有更高的中断优先级(我认为他们称它们为 IRPL,但我不知道“R”代表什么)。任何运行在同一台机器上的用户线程或更低级别的Kernel线程都会在处理中断请求时被中断,并在ineterrupt处理完成后恢复。
为了更多地了解 Windows 上的设备中断,您需要学习设备驱动程序开发。这是一个小众话题,我认为您在网络上找不到很多有用的资源,您可能需要寻找书籍或培训课程。
无论如何,Windows 使用中断请求级别 (IRQL) 和延迟过程调用来处理中断。中断在内核模式下处理,它以比用户模式更高的优先级运行。适当的中断处理程序需要非常快速地做出反应。它只执行绝对必要的操作并注册一个延迟过程调用以在将来运行。这将在系统处于中断请求级别时发生。