首页
社区
课程
招聘
[求助]为什么nonpagedpool的大小要超过paged pool
发表于: 2008-7-31 15:15 14408

[求助]为什么nonpagedpool的大小要超过paged pool

2008-7-31 15:15
14408
下面是我机器上的用!vm查出来的结果。发现NonPagedPool居然打到200M,而PagedPool只有可怜的160M。不是说NonPagedPool是有限资源么?
我查过注册表。HKLM\SYSTEM\CurrentControlSet\ Control\Session Manager\Memory Management\NonPagedPoolSize和HKLM\SYSTEM\CurrentControlSet\ Control\Session Manager\ Memory Management\PagedPoolSize都是0,所以这两个值应该是OS系统自己算出来的。
我的机器是WinXP SP2

*** Virtual Memory Usage ***
    Physical Memory:      261688 (  1046752 Kb)
    Page File: \??\C:\pagefile.sys
     Current:  1572864 Kb  Free Space:  1548908 Kb
     Minimum:  1572864 Kb  Maximum:      3145728 Kb
    Available Pages:      181287 (    725148 Kb)
    ResAvail Pages:      194730 (    778920 Kb)
    Locked IO Pages:          51 (      204 Kb)
    Free System PTEs:    183765 (    735060 Kb)
    Free NP PTEs:          32767 (    131068 Kb)
    Free Special NP:      24854 (    99416 Kb)
    Modified Pages:          529 (      2116 Kb)
    Modified PF Pages:      529 (      2116 Kb)
    NonPagedPool Usage:    1316 (      5264 Kb)
    NonPagedPool Max:      52945 (    211780 Kb)
    PagedPool 0 Usage:      5740 (    22960 Kb)
    PagedPool 1 Usage:      559 (      2236 Kb)
    PagedPool 2 Usage:      537 (      2148 Kb)
    PagedPool 3 Usage:      543 (      2172 Kb)
    PagedPool 4 Usage:      560 (      2240 Kb)
    PagedPool Usage:        7939 (    31756 Kb)
    PagedPool Maximum:    40960 (    163840 Kb)
    Shared Commit:          1428 (      5712 Kb)
    Special Pool:          1003 (      4012 Kb)
    Shared Process:        2239 (      8956 Kb)
    PagedPool Commit:      7939 (    31756 Kb)
    Driver Commit:          1435 (      5740 Kb)
    Committed pages:      53049 (    212196 Kb)
    Commit limit:        629866 (  2519464 Kb)

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己顶一下,没有人能回答这个问题么?
2008-8-1 18:30
0
雪    币: 248
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
对系统来说NonPagedPool是金子,而paged pool是银子。paged pool可能某时要换出物理内存。
2008-8-4 11:06
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
Maximum:      3145728 Kb这个才是Paged总量吧
2008-8-4 15:22
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
To sixL
   对系统来说NonPagedPool是金子,而paged pool是银子。哪为什么系统给金子般珍贵的NonPagedPool申请了200M空间,而给银子般便宜的paged pool只给了区区160M,要知道,开发驱动的时候,一般很少申请NonPagedPool空间的。
   另外,我查过文档,文档上说NonPagedPool最大只能设置206M, 而Paged Pool却可以设置431M,这样,Paged Pool远远大于nonpaged Pool。但是实际上,却是相反的。

To forgot
   Maximum:      3145728 Kb这个是NonPage和Page两个Pool里面的Page总量
2008-8-4 16:02
0
雪    币: 248
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
假如你是老板,而我是马仔,你要我搞一个项目。
如果我与你一心一意,则我会少用你的金子,多用你的银子;如果我与你三心二意,则我会少用你的银子,尽可能多用你的金子。(除了态度,还与能力相关。)
NonPagedPool是系统重要的核心态资源,它的减少,导致整个系统性能急剧下降,甚至崩溃。
2008-8-4 17:24
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
但是对老板来说,在设置资源的时候,金字总是比银子少的,总不会老板对马仔说,这个项目你能动用的金子比银子多吧。而现在微软恰恰是这么作的,他对我们说,nonpaged pool是非常珍贵的,一共只有200M,你用完了,系统就崩溃了,不太珍贵的paged pool有160M,而且你真正能分配出来的可能少于100M。 这个不是很有问题么?
我作过试验,如果系统装的驱动比较多,那么在驱动当中能分配出的paged pool不会超过80M,之后你没有办法再分配出来了。而同时nonpaged pool却还有将近200M空余,因为我们基本不会分配nonpage pool的空间。但这种情况不是很异常么?
2008-8-5 16:12
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很正常吧,我觉得,200M不让换出而已,可以看看用的什么杀毒软件,为了追求效率,可能看你内存够大,直接就占了nopaged。
2008-8-6 15:00
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
NonPagedPool Usage:    1316 (      5264 Kb)
    NonPagedPool Max:      52945 (    211780 Kb)
最大200M,很正常吧?windows需要确保系统足够稳定,当然要留大的空间了
pagedpool无所谓了,他可以自己加大,按照需要分配,相对灵活得多。
2008-8-6 15:04
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
要是你做操作系统,害怕崩溃也会这样吧,看你机器有1G,拿200M出来操作系统作非分页共享池用不过分吧。
因为你可能不会很变态的用,万一碰到一些很变态的,200M可能还不够他们用呢。撑爆了可能就挂了,windows给各种各样的人用,他们不能不妨着点,免得我们出问题骂他
2008-8-6 15:06
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我觉得能不能这样理解。
非分页池要求物理连续性和性能要求相对高,分页池则相反,那么显然,运行态增加非分页池代价大和效果差,而非分页池则相反
所以非分页池相对固定
分页池相对灵活
也就是说:如果非分页的不够,很难动态给它增加,基本上开机就固定了,所以一定要留尽量大的余量,否则关键代码拿不到内存整个系统立刻就挂。并且在非分页环境下,一般IRQL比较高,甚至高于异常处理的IRQL,这样无法进行异常处理,直接当机。

而相反分页池要求不高,发现不够的时候,运行时增加最大值也是可以的,所以,可以做到按需调整,普通情况下用的不多,所以比较小,如果你的需求量大,那么它动态增加到很大代价也不会很大的。即便分配不出,也可以通过异常处理解决一些,因为通常IRQL不高。
想想分页文件,不够的时候,windows会自己加大,给个提示就了事。
2008-8-6 15:14
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
分页池好像不能运行时候增加的吧,也是开机再固定的吧。控制分页池大小的是在注册表中,这个和非分页池是一样的,修改他必须重启才能成功。
另外,分页池从本质上讲,是给内核驱动一般使用的。如果他分光了,驱动也会在很大程度上完蛋的。
2008-8-7 14:25
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
刚刚加code运行了一下,paged pool是没有办法自动增加的,到了最大量,你1k也分不出。结果现在一个很搞笑的情况,驱动需要内存80M,但是nonpaged pool有200M空间,paged pool只能提供70M,根据spec,paged pool才是驱动一般使用的内存。却分不出。而non paged pool大把的内存却不敢用。结果不是系统崩溃就是App崩溃。
2008-8-7 14:28
0
游客
登录 | 注册 方可回帖
返回
//