第三章 系统运作机制


对于运行在 IRQL 等于或者大于dpc dispatch  leve 的code 有两个规则必须遵守:

1) 不能等待任何一个object。 因为这个操作会触发系统的scheduler去选择另外一个thread执行,但是系统的scheduler也是在dpc dispatch level运行,所以此时scheduler根本不会被执行。


2) 只能访问非分页 nonpaged 内存。 这是第一条规则的副作用。当访问分页paged内存是,有可能触发页错误 page fault,此时内存管理器 memory manager就会调用磁盘访问disk  I/O试图从磁盘读入数据,这就需要等待文件系统驱动程序,这个“等待”操作同样需要scheduler去进行线程切换,这就违反了第一条规则。


windows的系统服务system service是如何从user mode 转入 kernel mode的:

1) 对于32位的x86 系统,在Pentium II 以前,通过软中断 int 2E指令; 在Pentium II 以及 Pentium II以后,是通过专门的指令 sysenter。 

2) 对于64位系统,windows使用 syscall指令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值