当一个硬件异常或者终端产生的时候,处理器在被中断的线程的内核栈中记录下足够多的机器状态信
息,因而它可以回到控制流中该点出继续进行。如果线程在用户模式下执行,那么windows就切换到
该线程的内核模式栈,在被中断的线程的内核栈上创建一个陷阱帧,并且把线程的执行状态保存到陷
阱帧中。用dt nt!_ktrap_frame可以看到陷阱帧的定义。
内核安装了中断陷阱处理器来响应设备的中断。中断陷阱处理器将控制权传递给一个负责处理该中断
的外部例程ISR,或者传递给一个响应该中断的内部内核例程。设备驱动程序提供了ISR来处理设备中
断,内核则为其他类型的中断提供了中断处理例程。
绝大多数x86系统依赖i8259A可编程中断控制器PIC或者i82489高级可编程中断控制器APIC
Windows所支持的硬件平台上,外部IO中断进入到中断控制器的一根线上,控制器然后在一根线上中
断处理器。一旦处理器被中断了,就询问控制器获取此中断请求(IRQ)。中断控制器将IRQ转译成一个
中断号,利用该号码作为在中断分发表IDT中的索引,并且将控制权传递给恰当的中断分发例程。
windows使用自己的中断优先级方案,称为中断请求级别IRQL,在x86中,内核在内部使用0-31的数值
代表IRQL,在x64和ia64中,内核采用0-15的数值来代表IRQL。数值越大,代表中断的优先级越高。
内核为软件中断定义了一组标准的IRQL,而HAL则将硬件中断号映射为IRQL。
31 高端
30 电源失败
29 处理器间的中断
28 时钟
27 性能剖析
26 设备n
.............
3 设备1
2 DPC/dispatch
1 APC (1和2是软件中断)
0 被动(普通线程在这一级别执行)
时间: 2024-10-15 03:46:26