现在的位置: 首页 > 综合 > 正文

第三章 系统运作机制

2013年11月30日 ⁄ 综合 ⁄ 共 484字 ⁄ 字号 评论关闭

对于运行在 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指令。

抱歉!评论已关闭.