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实现或许更加灵活

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值