티스토리 뷰

시스템이 초기화 될 때, 메모리 관리자는 커널모드 구성 요소들이 시스템 메모리를 할당하기 위해 사용하는 두 가지 종류의 동적으로 크기가 변화는 메모리 풀 공간 즉 Paged pool NonPaged pool을 생성한다.


Nonpaged Pool (비페이징 풀)
언제나  실제 메모리에 상주하여 언제든지 어느 수준 IRQL 수준에서나 어느 프로세스 컨텍스트에서나 페이지 폴트를 내지 않고 엑세스 할 수 있다고 보장된 시스템 가상 주소 영역이다.

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.

 

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.


 

Paged pool(페이징 풀)
실제 메모리에서 제거 되어 페이징 파일에 기록 될(page out) 수도 있고 반대로 페이징 파일에서 실제 메모리로 올라올(Paged in)  수 있는 시스템 공간의 가상 메모리 영역이다.

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.

 

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,


위 두 가지 메모리 풀들이 주소 공간의 시스템 부분에 위치해 있고 모든 프로세스의 가상주소 공간에서 매핑된다.


Nonaged pool과 Paged pool은 시스템에서 실제 메모리 양을 기반으로 최기 크기로 시작하여 필요 한 경우 시스템 부팅 시에 계산 된 최대 크기 까지 점점 증가 한다. 


시스템 별 최대 풀 크기 사이즈는 아래 링크에서도 확인 가능 하지만 가장 정확한 값을 측정 하기 위해서는 Windows debugging tool을 이용해야 한다. 확인 방법은 아래 포스팅을 통해서 ^^

* Windows server 커널 메모리 값 => http://ryuchan.kr/16

* 시스템 커널 리소스(Nonpaged pool, Paged pool) 모니터링 방법 #1 =>http://ryuchan.kr/87

nonpaged pool limits across different version of Windows:

 

32-bit

64-bit

XP, Server 2003

up to 1.2GB RAM: 32-256 MB  
> 1.2GB RAM: 256MB

min( ~400K/MB of RAM, 128GB)

Vista, Server 2008, 
Windows 7, Server 2008 R2

min( ~75% of RAM, 2GB)

min(~75% of RAM, 128GB)

 

summary of paged pool limits across operating systems:

 

32-bit

64-bit

XP, Server 2003

XP: up to 491MB 
Server 2003: up to 650MB

min( 4 * nonpaged pool limit, 128GB)

Vista, Server 2008, 
Windows 7, Server 2008 R2

min( system commit limit, 2GB)

min( system commit 

 HKLM\System\CurrentControlSet\Control\SessionManager\Memory Management


 

그리고.......  각 각의 Pool에 어떤 것들이 존재 할까?

 

Nonpaged pool 에는  Kernel-mode drivers(.sys), User mode 공간에서 실행 중인 어플리케이션의 handles 등이 존재 하며Paged pool에는 Token Objects, Kernel-mode drivers 그리고 Registry 등이 존재 한다.


[참고 사이트]


Understanding Pool Consumption and Event ID: 2020 or 2019

http://blogs.msdn.com/b/kocoreinternals/archive/2008/09/04/pool-event-id-2020-2019.aspx


Pushing the Limits of Windows: Paged and Nonpaged Pool
http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx

 


감사합니다^^

 

 


댓글
댓글쓰기 폼