Windows中的中断处理

Posted

技术标签:

【中文标题】Windows中的中断处理【英文标题】:Interrupt processing in Windows 【发布时间】:2009-04-03 05:43:43 【问题描述】:

我想知道哪些线程处理设备中断。当用户模式线程运行时出现中断时会发生什么?当系统处理中断时,其他用户线程是否也有机会运行?

请向我推荐一些描述窗口如何处理中断的参考资料。

【问题讨论】:

【参考方案1】:

设备中断本身(通常)由 CPU 处理中断的任何线程处理,但在环 0 中并处于不同的保护级别。这限制了中断处理程序可以执行的一些操作,因为大多数时候当前线程与等待中断指示的事件发生的线程无关。

内核本身是封闭源代码,仅通过其内部 API 记录。该 API 向设备驱动程序作者公开,并在驱动程序开发工具包中进行了描述。

一些帮助您入门的资源:

Solomon 和 Russinovich 的 Microsoft Windows Internals 的任何版本。现在好像是第 4 版,但即使是旧版也有帮助。

Windows DDK,现在更名为WDK。它的文档也是available online。请务必阅读Kernel Mode Design Guide...

Sysinternals 提供了一些工具和文章来探究和解释内核的行为。这曾经是一个独立的站点,直到微软厌倦了 Mark Russinovich 似乎比他们更了解内核的工作原理。 ;-)

请注意,示例中的 DDK 中包含许多常见设备驱动程序的源代码。尽管生产版本几乎肯定会有所不同,但即使您不想自己实现驱动程序,阅读示例驱动程序也可以回答一些问题。

【讨论】:

【参考方案2】:

与任何其他操作系统一样,Windows 以内核模式处理中断,具有更高的中断优先级(我认为他们称它们为 IRPL,但我不知道“R”代表什么)。任何运行在同一台机器上的用户线程或更低级别的Kernel线程都会在处理中断请求时被中断,并在ineterrupt处理完成后恢复。

【讨论】:

其实就是IRQL(Interrupt ReQuest Level)。其中有 32 个。用户模式代码在 PASSIVE (0) 级别运行。设备 IRQL/DIRQL 高于 DISPATCH (2) 级别。 您可能还记得传递给设备驱动程序的系统调用的内部表示称为 IRP(I/O 请求包)... 我不应该在深夜回答问题。我记得 VMS 操作系统,它们被称为 IPL - 中断优先级。回到我的技术童年。【参考方案3】:

要了解有关 Windows 上的设备中断的更多信息,您需要学习设备驱动程序开发。这是一个小众话题,我认为您在网络上找不到很多有用的资源,您可能需要寻找书籍或培训课程。

无论如何,Windows 使用中断请求级别 (IRQL) 和Deferred procedure calls 处理中断。中断在内核模式下处理,它以比用户模式更高的优先级运行。适当的中断处理程序需要非常快速地做出反应。它只执行绝对必要的操作并注册一个延迟过程调用以在将来运行。这将在系统处于中断请求级别时发生。

【讨论】:

嗨@kgiannakakis,我有一个Windows驱动程序问题,我认为你是可以帮助我的人。让我简短地解释一下。我正在研究串行端口驱动程序。中断是在总线驱动程序中为孩子创建的。&我必须在端口驱动程序中使用它。现在得到硬件中断和读取寄存器,但总线驱动程序没有得到中断服务的确认.我在网上搜索但没有找到正确的答案。如果可以的话,请帮我解决这个问题。 & 很抱歉在这里发布我的查询。 posted-***

以上是关于Windows中的中断处理的主要内容,如果未能解决你的问题,请参考以下文章

windows 中断处理学习笔记

处理器(中)_中断

C中的信号处理 - 中断中的中断

zynq7000 中断系统及在UCOSIII中的中断处理接口

Linux中断 - ARM中断处理过程

中断,异常和系统调用