4120|3

87

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

!!请问Windows中的缺页中断处理是在那个中断级别啊,是APC_LEVEL吗 ??? [复制链接]

我看到一篇文章写道:“APC_LEVEL当一个asynchsonous procedure call产生时,processor进入到APC_LEVEL。在这个level上,会无视其他的APC,屏蔽APC LEVEL的中断,比如,一些I/O completion APC。可以访问pagable memory。系统在APC_LEVEL处理缺页中断,所以,执行在>=APC_LEVEL上的代码必须存放在NON-PGAE内存中。”
可是又在MSDN上看到,“The routine using the corresponding paged-pool virtual addresses must be running at IRQL <= APC_LEVEL,if a page fault occurs while running at IRQL > APC_LEVEL, it is a fatal error.”
照MSDN上推断,缺页中断应该在DISPATCH_LEVEL ,因为只要是DISPATCH_LEVEL以下都可以是可分页的(paged)
!!请问Windows中的缺页中断处理是在那个中断级别啊,是APC_LEVEL吗 ,还是DISPATCH_LEVEL得???

最新回复

应该是在DISPATCH_LEVEL这个级别。 在APC级别可以发生page fault,说明处理page fault的中断级别要比APC高,而在DISPATCH_LEVEL级别则不能出现page fault,因为处理page fault的也是在DISPATCH_LEVEL级别,这样处理page fault的DISPATCH_LEVEL不能中断同级的正在支行的DISPATCH_LEVEL,所以就会出现死机的情况。   详情 回复 发表于 2007-1-15 12:47
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是apc_level这个是肯定的。 所以只有apc一下的才可以使用分页内存。以上的 ,和平级的,都不可以使用分页内存。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼上的理解有误,MSDN上面说了IRQL <= APC_LEVEL是可以处理page fault的,只有IRQL >= DISPATCH_LEVEL才不能处理页错误。具体原因,看看这本书:
《Microsoft Windows Internals, Fourth Edition》
By Mark E. Russinovich, David A. Solomon
Publisher: Microsoft Press

书中有这样一段话,解释得比较明白:
One important restriction on code running at DPC/dispatch level or above is that it can't wait for an object if doing so would necessitate the scheduler to select another thread to execute, which is an illegal operation because the scheduler synchronizes its data structures at DPC/ dispatch level and cannot therefore be invoked to perform a reschedule. Another restriction is that only nonpaged memory can be accessed at IRQL DPC/dispatch level or higher. This rule is actually a side-effect of the first restriction because attempting to access memory that isn't resident results in a page fault. When a page fault occurs, the memory manager initiates a disk I/O and then needs to wait for the file system driver to read the page in from disk. This wait would in turn require the scheduler to perform a context switch (perhaps to the idle thread if no user thread is waiting to run), thus violating the rule that the scheduler can't be invoked (because the IRQL is still DPC/dispatch level or higher at the time of the disk read). If either of these two restrictions is violated, the system crashes with an IRQL_NOT_LESS_OR_EQUAL crash code.
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

4
 
应该是在DISPATCH_LEVEL这个级别。

在APC级别可以发生page fault,说明处理page fault的中断级别要比APC高,而在DISPATCH_LEVEL级别则不能出现page fault,因为处理page fault的也是在DISPATCH_LEVEL级别,这样处理page fault的DISPATCH_LEVEL不能中断同级的正在支行的DISPATCH_LEVEL,所以就会出现死机的情况。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表