Hi,
I have some doubts on paged pool (read some books/articles, but that didnt
give me clear picture). So thought of asking it here. Please note I am from
linux background.
This is about 32-bit windows 2k3 server having around 4GB of RAM where
default distribution is 2GB for user virtual address space and 2GB for
kernel virtual address space. For this configuration there is 256MB of
non-paged pool and upto 650MB of paged pool in the system (got these figures
from
http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx?PageIndex=2
).
Questions:
-
Is non-paged pool similar to “directly mapped kernel” addresses in linux
which is always resident in memory? -
When one allocates from non-paged pool, is that memory physically
contiguous (which is the case with memory allocated by kmalloc in linux)? -
Is “Paged pool” actually the amount of kernel virtual memory (addresses)
available for use, i.e. memory allocated from paged pool is virtually
contiguous but may not be physically contiguous (similar to vmalloc() in
linux with exception that “paged pool” is swappable and some part of it may
reside on “swap device”)? -
If “paged pool” size is 650MB and hypothetically if there are 13 kernel
modules each of which consume 50MB of paged pool (totaling 650MB), will the
“paged pool” exhaust meaning we wont be able to allocate any more memory
from “paged pool”, irrespective of how much RAM we put in the system,
irrespective of how much swap space (page file) we have? Is this the
“LowPagedPool” condition? -
If I have sufficient RAM (4 GB or more), will the system still need swap
space (page file) to manage “kernel pageable pool” (I guess to manage user
virtual address space “page file” will still be required), as sufficient
amount of physical memory will be available for the “kernel paged pool” of
size 650MB?
Thanks,
Sunil