PagedPool 和 NoPagedPool的区别

转载 2016年01月20日 16:46:30

摘自胡文亮Win64驱动编程基础


PoolTypeMSDN的介绍上有 N 种, 其实常用的只有 2 种:
PagedPool NonPagedPoolPagedPool是分页内存,简单来说就是物理内存不够时,会把这片内存移动到硬盘上,而NonPagedPool是无论物理内存如何紧缺,都绝对不把这片内存的内容移动到硬盘上。 在往下讲之前,先补充一个知识, 就是我们操作的内存,都是虚拟内存,和物理内存是两码事。 但虚拟内存的数据是放在物理内存上的,两者存在映射关系, 一般来说,一片物理内存可以映射为多片虚拟内存, 但一片虚拟内存必定只对应一片物理内存。 假设虚拟内存是 0Xfffff80001234567 在物理内存的地址是 0x123456, 当物理内存不够用时, 物理内存0x123456的原始内容就挪到硬盘上,然后把另外一片急需要用的内容移到物理内存里。 此时, 当你再读取 0Xfffff80001234567 的内容时,就会引发缺页异常, 系统就会把在硬盘上的内容再次放到物理内存中(如果这个过程失败,一般就死机了)。 

以上说了这么多废话,总结两句:1.NonPagedPool的总量是有限的( 具体大小和你物理内存的大小相关), 而PagedPool的总量较多。申请了内存忘记释放都会造成内存泄漏,但是很明显忘记释放NonPagedPool的后果要严重得多;2.一般来说,PagedPool用来放数据(比如你用ZwQuerySystemInformation枚举内核模块,可以申请一大片PagedPool存放返回的数据),而NonPagedPool用来放代码(你写内核shellcode并需要执行时, 必须使用NonPagedPool存放shellcode)。 以我的经验来说,访问到切换出去的内存没事,但是执行到切换出去的内存必然蓝屏( 这只是我的经验,正确性待定)。3.在用户态,内存是有属性的, 有的内存片只 能 读 不 能 写 不 能 执 行 (PAGE_READ), 有 的 内 存 片 可 以 读 可 以 写 也 可 以 执 行(PAGE_READ_WRITE_EXECUTE)。 在内核里,PagedPoolNonPagedPool都是可读可写可执行的, 而且没有类似VirtualProtect之类的函数。 

Nonpaged Pool(非分页池) 和 Paged Pool(分页池) 在Windows中的用处

转自:http://www.cnblogs.com/Amaranthus/archive/2012/11/15/2771523.html 很多DBA对nonpage pool 和 paged...
  • penaiyan
  • penaiyan
  • 2013-06-24 11:11:59
  • 2021

Working Set, Paged Pool and Non-paged pool

Working Set The working set of a process is the set of pages in the virtual address space of the pr...
  • directionofear
  • directionofear
  • 2012-11-06 21:39:21
  • 2339

Windows性能监控器的重要参数详解(针对进程)

Windows性能监控器的重要参数详解 详细: 一些重要的计数器解决性能问题的时候,我往往会让客户添加下面一些计数器进行性能收集。Process object下的所有计数器。Processor obj...
  • SmartArtisan
  • SmartArtisan
  • 2017-06-09 12:14:00
  • 695

TYPE POOLS 的用法...

 TYPE POOLS 的用法...  TYPE-POOLS: 方法1:在ABAP Dictionary (T-Code: SE11 ) -> Type Group -> Display / Chan...
  • zwxrain
  • zwxrain
  • 2008-07-24 17:20:00
  • 5485

netty5学习笔记-内存池2-PoolSubpage

前面我们讲过了负责内存分配的类PoolChunk,它最小的分配单位为page, 而默认的page size为8K。在实际的应用中,会存在很多小块内存的分配,如果小块内存也占用一个page明显很浪费,针...
  • youaremoon
  • youaremoon
  • 2015-08-25 21:39:04
  • 2092

修改非分页内存大小及禁用Null会话内存共享

修改非分页内存大小[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] ...
  • sdhongjun
  • sdhongjun
  • 2016-07-21 06:59:19
  • 828

Pushing the Limits of Windows: Paged and Nonpaged Pool

原文地址In previous Pushing the Limits posts, I described the two most basic system resources, physical ...
  • sdhongjun
  • sdhongjun
  • 2016-07-20 22:14:16
  • 830

PagedPool 和 NoPagedPool的区别

摘自胡文亮Win64驱动编程基础 PoolType 在 MSDN 的介绍上有 N 种, 其实常用的只有 2 种: PagedPool 和 NonPagedPool。 PagedPoo...
  • chence19871
  • chence19871
  • 2016-01-20 16:46:30
  • 3154

菜鸟之驱动开发12

在本节中,我们学习在驱动中如何操作双向链表:链表的创建,初始化,遍历,删除。驱动中有自己的链表接构,也有相专用的操作链表函数,也可以用C/C++中自已实现的链表。 驱动中的链表接构是:LIST_EN...
  • favormm
  • favormm
  • 2011-08-28 15:18:00
  • 1604

ExAllocatePool详解

格式有点乱,但是讲得还行就转载了。 #ifdef POOL_TAGGING     #ifdef ExAllocatePool    #undef ExAllocatePool    ...
  • yyylll62803112
  • yyylll62803112
  • 2014-03-17 14:35:08
  • 1004
收藏助手
不良信息举报
您举报文章:PagedPool 和 NoPagedPool的区别
举报原因:
原因补充:

(最多只允许输入30个字)