驱动开发(11)中断请求级

本文介绍了Windows驱动开发中的中断请求级(IRQL)概念,包括其与线程优先级的区别,以及在中断服务例程、驱动程序代码执行和内存管理中的应用。IRQL用于决定中断处理的优先级,例如,中断服务例程运行在硬件中断级别,高于软件中断。在IRQL大于DISPATCH_LEVEL时,代码不能使用分页内存,否则可能导致蓝屏死机。此外,文章提到了缺页中断和分页内存管理对IRQL的限制及其背后的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处:http://blog.csdn.net/zuishikonghuan/article/details/51062287

“中断”是一个非常重要的概念,在 80x86 的设备上,Windows 引入了“中断请求级”(IRQL)这一个概念,(在 x86 平台)其中0-2为软件中断,3-31为硬件中断。其中,软件中断从低到高(0,1,2)分别为: IRQL PASSIVE_LEVEL、IRQL APC_LEVEL 、IRQL DISPATCH_LEVEL。

中断请求级高的中断可以打断当前处于较低中断请求级的线程的工作。请注意,中断请求级和线程优先级是两个不同的概念。线程优先级是让操作系统进行线程调度的,换句话说,是用来操作系统决定如何分配给各个线程分配的时间片段的长度等。而中断请求级是用来让操作系统决定判断是否需要在某个中断出现时打断当前的工作的。

举个例子,系统调度两个线程,系统会优先调度线程优先级高的线程,线程是用户模式的线程,CPU 在执行这个线程时,处于最低的中断请求级,这时候一个中断出现了,它的中断请求级为 0x0C(假设,下同),CPU 会去执行这个中断,假设这个时候出现了一个中断请求级为 0x09 的中断,那么 CPU 不会去理睬这个中断,等到0x0C的中断处理完毕后,CPU 才会执行 0x09 的中断,执行完毕后恢复到原来的线程,如果这时候还有同样优先级的线程,操作系统通过调度使这两个线程“并行执行”,当这个线程执行完毕后,系统去调度更低优先级的线程。

驱动程序可以提升/降低中断请求级,通过调用 KeRaiseIrql/KeLowerIrql 内核函数。驱动程序还可以通过 KeGetCurrentIrql 函数得到当前中断请求级。

另外,中断请求级和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值