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

摘要:
许多DBA不清楚非页面池和页面池的使用。他们也被perfmon中的指令弄糊涂了。发件人:http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspxNonpagedPoolThekernelanddevicedriversusenonpagedpooltostoredatathatmightbeaccessedwhenthesystemcan“而不是页面错误。当内核执行中断服务路由和引用程序调用时,内核会进入一个状态,这些调用是硬件中断的相关功能。当内核或设备驱动程序获取一个锁时,页面错误就会出现,因为它们是唯一可以在ISR和DPC中使用的锁类型,必须用于保护从ISR或DPC中访问的数据结构,以及由执行所有读取的ISR或DPS或代码访问的数据。如果不遵守这些规则,将导致最常见的故障代码IRQL_ NOT_ LESS_ OR_ EQUAL。内核或设备驱动程序使用非分页池来存储可以访问的数据,但在访问期间不会发生错误。如果驱动程序在执行整个规则时出错,它将得到一个IRQL_ NOT_ LESS_ OR_ EQUAL Nonpagedpools的崩溃代码,因此需要显示物理内存,而非Pagedpools虚拟内存分配给物理内存,引用文件(表示为文件对象)和I/O请求包(表示I/O操作)。非分页池总是报告内存中的错误。非分页池的虚拟地址由物理地址分配。在Windows Vista和更高版本中,分页池的最大用户是注册表。引用的注册表项和其他注册表数据存储在分页池中。

很多DBA对nonpage pool 和 paged pool 搞不太清楚干嘛用的,看perfmon中的说明也看得稀里糊涂。找到一个资料就翻译一下。

From:http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx

Nonpaged Pool(非分页池)

The kernel and device drivers use nonpaged pool to store data that might be accessed when the system can’t handle page faults. The kernel enters such a state when it executes interrupt service routines (ISRs) and deferred procedure calls (DPCs), which are functions related to hardware interrupts. Page faults are also illegal when the kernel or a device driver acquires a spin lock, which, because they are the only type of lock that can be used within ISRs and DPCs, must be used to protect data structures that are accessed from within ISRs or DPCs and either other ISRs or DPCs or code executing on kernel threads. Failure by a driver to honor these rules results in the most common crash code, IRQL_NOT_LESS_OR_EQUAL.

内核或者设备驱动使用非分页池来保存可能访问的数据,但是在访问的时候又不能出现也错误。当内核执行中断服务程序并且延迟调用过程的时候就会进入这种状态,这个状态和硬件中断相关联。当内核或者设备驱动在这个状态后,获取了一个自旋锁,页错误也是不被允许的,自旋锁是唯一能在延迟调用或者中断服务程序中能用的锁类型,用来保护被延迟过程调用和中断服务程序访问的数据,可能来自于延迟过程调用和中断服务程序,也可能来自其他的延迟过程调用和中断服务程序,或者其他的内核线程。如果驱动程序在执行整个规则的时候出错会得到一个 IRQL_NOT_LESS_OR_EQUAL 的崩溃代码

Nonpaged pool is therefore always kept present in physical memory and nonpaged pool virtual memory is assigned physical memory. Common system data structures stored in nonpaged pool include the kernel and objects that represent processes and threads, synchronization objects like mutexes, semaphores and events, references to files, which are represented as file objects, and I/O request packets (IRPs), which represent I/O operations.

非分页池因此总是报错在内存中,非分页池的虚拟地址被物理地址分配。通用的系统数据结构被保存在非分页池中包含内核和代表进程和线程的对象,互斥对象,同步信号量,引用文件(代表文件对象),和I/O请求包(代表I/O操作)

Paged Pool(分页池)

Paged pool, on the other hand, gets its name from the fact that Windows can write the data it stores to the paging file, allowing the physical memory it occupies to be repurposed. Just as for user-mode virtual memory, when a driver or the system references paged pool memory that’s in the paging file, an operation called a page fault occurs, and the memory manager reads the data back into physical memory. The largest consumer of paged pool, at least on Windows Vista and later, is typically the Registry, since references to registry keys and other registry data structures are stored in paged pool. The data structures that represent memory mapped files, called sections internally, are also stored in paged pool.

分页池,从字面意思来说,也就是可以存到系统的分页文件中,允许物理内存重定向。如用户模式的虚拟内存,当驱动或者系统引用分页池内存在分页文件中,那么一个操作就会调用页错误,内存管理系统把数据从分页文件中读取到物理内存。在windows vista和之后的版本,分页池最大的使用者是注册表,引用的注册键值和其他注册表数据都是存储在分页池中。内存映射文件(内部叫做内存对象[Sections])也存在分页池中。

 

Device drivers use the ExAllocatePoolWithTag API to allocate nonpaged and paged pool, specifying the type of pool desired as one of the parameters. Another parameter is a 4-byte Tag, which drivers are supposed to use to uniquely identify the memory they allocate, and that can be a useful key for tracking down drivers that leak pool, as I’ll show later.

设备驱动可以使用ExAllocatePoolWithTag API来申请非分页池和分页池,可以使用参数来指定在那个类型的池中申请。另外一个参数是4个字节的tag,用来唯一标示分配内存的驱动程序,并且在跟踪驱动程序是否缺少池十分有用。

免责声明:文章转载自《Nonpaged Pool(非分页池) 和 Paged Pool(分页池) 在Windows中的用处》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Blocks,注意什么叫碎片,碎片对io的影响以及什么叫物理顺序,什么叫逻辑下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第二百三十九节,Bootstrap路径分页标签和徽章组件

Bootstrap路径分页标签和徽章组件 学习要点: 1.路径组件 2.分页组件 3.标签组件 4.徽章组件 本节课我们主要学习一下 Bootstrap 的四个组件功能:路径组件、分页组件、标签组件 和徽章组件。 一.路径组件 路径组件也叫做面包屑导航。 面包屑导航 breadcrumb样式class类,写在<ul>或...

jQuery LigerUI 插件介绍及使用之ligerGrid

一,简介 ligerGrid的功能列表: 1,支持本地数据和服务器数据(配置data或者url) 2,支持排序和分页(包括Javascript排序和分页) 3,支持列的“显示/隐藏” 4,支持明细行(表格内嵌) 5,支持汇总行 6,支持单元格模板 7,支持编辑表格(ligerGrid的一个特色,需要其他表单插件的支持) 8,支持树表格(待加入) 8,支持分组...

随说秋色园从Access升迁到MSSQL过程

秋色园的运行环境概况: 目前运行在国外godaddy的虚拟主机的一个子目录中,数据库为Access。 随说Access分页: 1:top max(id) 在CYQ.Data 数据框架支持上Access时,以top max(id)为分页方式。 在秋色园没有多少文章的情况下,基本上维持着正常的秩序。 直到秋色园在进化版本时,多字段排序的情况出现,如:or...

Asp.Net中的三种分页方式

Asp.Net中的三种分页方式 通常分页有3种方法,分别是asp.net自带的数据显示空间如GridView等自带的分页,第三方分页控件如aspnetpager,存储过程分页等。 第一种:使用GridView自带分页,最简单的分页方法。 前台: <asp:GridView ID="GridView1" AllowPaging="true"...

分页技术COUNT STOPKEY和SORT ORDER BY

<pre name="code" class="sql">COUNT STOPKEY : 条件有rownum的时候出现 扫描表,到前n行停止 SORT ORDER BY STOPKEY SORT ORDER BY 分页语句有SORT ORDER BY STOPKEY和SORT ORDER BY 表示重新对数据集进行排序。...

sql server分页

表结构 CREATE TABLE v_home ( vid int IDENTITY(1,1) not null,-- AUTO_INCREMENT,chapter varchar(20) not null , section varchar(20) not null, showorder int null, title varchar (1...