windows中断请求级(IRQL)

windows是完全按照模块化设计的,那么它很重要的一个概念就是“交互”。在linux中,没有所谓的“交互”,如果非要对应一个,那么交互就是函数 调用,而windows的内核却不是这样简单。这也许就是宏内核和微内核的区别吧?windows是一个基本的c/s模式的系统,内核里面也不乏这样的例 子,到处都是c/s的影子,不信你看,到处都是xx管理器。所以如果一个模块需要一个服务,那么它就得请求一个服务(消息传递?)。

windows中将硬件中断和部分系统级别的软件执行绪都抽象成中断,比如如果需要重新调度,那么就请求一个DISPATCH_LEVEL级别的中断,但 是如果当前正在执行更高级别的中断,那么这个请求将被排队。直到irql降低到DISPATCH_LEVEL之下。这就是说在 DISPATCH_LEVEL之上是不会发生线程切换的;另一个例子,考虑缺页异常,缺页异常被影射到DISPATCH_LEVEL优先级,也就是说在 DISPATCH_LEVEL之上的程序如果产生缺页中断,那么内核将崩溃。

windows的这种做法有很多优点,比如:还记得linux的自旋锁吗?在单处理器环境下,如果内核非抢占,那么什么也不做,如果内核可抢占,那么就禁 用抢占,这是linux的实现,在windows中根本没有那么复杂,实际上就是一句话就可以实现和自旋锁一样的效果,就是将cpu提升到 DISPATCH_LEVEL优先级(限于单处理器,这就禁用了抢占)。但是windows的这种做法也有弊端,就是越往上irql,就有越少的内核函数 可供使用,比如在isr里面就不能用分页内存,不能切换线程。两种系统孰好孰怀,这是很愚蠢的问题,只能说windows的实现更加自洽(少量原则决定一切),而linux实现或许更加灵活

原文链接: https://blog.csdn.net/dog250/article/details/5303588

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    windows中断请求级(IRQL)

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410087

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 上午11:48
下一篇 2023年4月26日 上午11:48

相关推荐