首页
社区
课程
招聘
[求助]IRQ被微软扩展成IRQL是怎么落实在硬件的机制上的?
发表于: 2008-11-29 17:14 5461

[求助]IRQ被微软扩展成IRQL是怎么落实在硬件的机制上的?

2008-11-29 17:14
5461
请教一下  
KeRaiseIrql 内核IRQL提权函数 如何实现的?一般我们的驱动需要同步执行时候都会进行这样的提权操作。(或者通过自旋锁)。
这里为了不被系统分配时间片消耗完后中断执行,因为NT内核负责线程调度的组件是运行在DISPATCH_LEVEL级别的。那么通过该函数的调用
KeRaiseIrql(DISPATCH_LEVEL,&oldirql);
线程就不会发生切换了。但是其函数内部是如何做的的?是不是调用HAL函数对APIC的操作?时钟中断对应的中断处理程序应该就是线程调度程序吧,那么这里就找到时钟IRQ号,一般是一个常数不会每次开机都变吧,然后修改软件中断IRQ号为这个(就是NT下陷入内核的那条指令int 2e对应的IRQ号),然后系统就不响应时钟中断了。

IRQL是微软对中断机制又进行了扩展搞出的中断请求级的概念。不过具体上是怎么落实在硬件操作上的,还请知道的牛们请教一下,不知道的也讨论讨论

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
这里有一篇文章,《Understanding IRQL》

Understanding IRQL.pdf

可以参考一下。

根据我做嵌入式内核的经验,猜测NT内核对中断服务程序的优先级管理是通过软件的方式来实现的。也就是说,设备驱动程序向系统注册的ISR(通过IoConnectInterrupt())是被内核调用的,而不是直接写到IDT中对应的入口的。

所以硬件中断到来时,是NT内核处理的,内核查询相关的内核对象,判断当前的IRQL,再决定是否调用设备注册的ISR,如果当前设备中断被屏蔽,则将该中断请求调度到系统IRQL降低的时候再执行。

我对NT内核不了解,所以以上说的可能不正确,欢迎大家指正。
上传的附件:
2008-11-29 17:46
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
支持APIC的PC,IRQL的实现有APIC的支持。否则全部用软件模拟IRQL
2009-1-11 21:32
0
雪    币: 207
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
2楼高手啊~~
2014-12-27 11:25
0
游客
登录 | 注册 方可回帖
返回
//