aswcy815174418 发表于 2022-4-16 14:27

为啥提高IRQL就能禁止线程切换?

本帖最后由 aswcy815174418 于 2022-4-16 14:29 编辑

最近看了一篇文章:[文章链接](https://github.com/iexp/iexp.github.com/blob/master/_posts/2013-01-30-irql.md)
文章说的是提高IRQL到DISPATCH_LEVEL,就可以防止线程切换,在这里忽略主动切换
我所理解发生顺序是:**IRQL提升到了DISPATCH_LEVEL->发生时钟中断->HalRequestSoftwareInterrupt(DISPATCH_LEVEL)->向自己发送的IPI被忽略**

我的问题就在**向自己发送的IPI被忽略**

> **文章明确指出由于vector 41对应的tpr等于当前apic的tpr值,所以 被block,即hal!HalpDispatchInterrupt不会响应,也就不会发生线程切换。**

时钟中断的函数调用顺序:**HalBeginSystemInterrupt()->KeUpdateSystemTime()->KeUpdateRunTime()->HalEndSystemInterrupt()**

从时钟中断调用**HalBeginSystemInterrupt()**到**HalEndSystemInterrupt()**之间,**TPR一直都是0xC1(时钟中断向量号)**,文章为什么会说当前APIC的TPR会是**0x41**呢?
页: [1]
查看完整版本: 为啥提高IRQL就能禁止线程切换?