阅读:1909回复:11
怎样才能防止引发页故障呢?关于ExAllocatePool(NonPagedPool,...)函数的引用!
如题
[编辑 - 11/21/02 by freeshar] |
|
最新喜欢:![]()
|
沙发#
发布于:2002-11-22 10:29
问题已经搞得比较清楚了,这两日来多谢freeshar和Tom_lyd及各们大吓了!!小弟是个菜鸟级的人,以后还望多指点,俺会虚心向你们学习的.
|
|
|
板凳#
发布于:2002-11-22 10:16
[quote]还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张 如果你驱动里面有采取同步措施,则有可能是造成了死锁。比如SPIN_LOCK, MUTEX,Event等什么的,你仔细检查一下。 [/quote] 我是用DDK里的passthru例子修改的,只是自已曾加了两个函数,在这两个函数里面记得是没有采用同步措施的,(原来我试用了一下,后来已去掉了). 会不会出现内存共享的问题? |
|
|
地板#
发布于:2002-11-22 10:02
还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张 如果你驱动里面有采取同步措施,则有可能是造成了死锁。比如SPIN_LOCK, MUTEX,Event等什么的,你仔细检查一下。 |
|
|
地下室#
发布于:2002-11-22 10:00
还是Tom_lyd版主爽快,谢了! 缺页并不总是出现在你分配的是分页内存。 当访问一块已经释放的内存时,则不管是什么内存都会引异常; 如果内存访问越界,则非常容易引起缺页等异常; 不正常的字符串操作、没有正确地给字符串赋结束符、在内核中使用了不提倡用的C/C++ runtime 函数等都可能导致缺页等异常情况。 |
|
|
5楼#
发布于:2002-11-22 09:58
还有一个问题要请教UP的俩位,经过测试我的程序如果绑定到两张
NIC的时候就会容易死机,如果是一张测没有这现象. (我的w2k是两张网卡的) |
|
|
6楼#
发布于:2002-11-22 09:55
老兄这个问题确实已基本讨论清楚。你可以再去看一下 sorry!俺目前手头上还没有这本书,我会尽力找这方面的资料的。 |
|
|
7楼#
发布于:2002-11-22 09:52
最基本的一点是 还是Tom_lyd版主爽快,谢了! 俺的程序运行在DISPATCH_LEVEL或更高级别上那是肯定的。 但我不清楚 PVODI pBuffer = ExAllocatePool( NonPagedPool,size) 一般在什么情况下会引发缺页? |
|
|
8楼#
发布于:2002-11-22 09:48
老兄这个问题确实已基本讨论清楚。你可以再去看一下
Walter Oney书CHAPTER 3内存管理! |
|
|
9楼#
发布于:2002-11-22 09:41
最基本的一点是
清楚自己的代码运行于什么级别, 是PASSIVE_LEVL,还是DISPATCH_LEVEL,还是更高。 内存的使用与级别的关系是:在PASSIVE_LEVEL可以使用分页内存,在DISPATCH_LEVEL及更高一定不能使用分页内存,而必须使用非分页内存。 分页内存与非分页内存的最常用的分配方法是: PVODI pBuffer = ExAllocatePool( NonPagedPool/PagedPool, size ). 另外,为了调试用,你还可以使用 ExAllocatePoolWithTag,把你分配的内存头尾用一对钳子钳起来,非常容易检查越界现象。 最后一点,在DISPATCH_LEVEL级别使用内存,都加上__try __except结构化异常处理。 |
|
|
10楼#
发布于:2002-11-22 09:28
是问题说得不清楚吗?
还是这个世界太冷了!!!!!! 那位大吓给点提示吧! [编辑 - 11/22/02 by freeshar] |
|
|
11楼#
发布于:2002-11-22 08:07
继续关注!!
|
|
|