Hello,
Next time, please post your question in a new thread, with a correct
subject, and avoid the stupid disclaimer at the end of your message. Thanks!
Anurag Verma wrote:
Please let me know why the Normal Zone is from 16MB-896 MB.
I'll assume you're talking about x86 architecture.
Physical memory on x86 architecture is divided in 3 zones :
- ZONE_DMA : from 0 to 16 Mb
- ZONE_NORMAL : from 16 to 896 Mb
- ZONE_HIGHMEM : above 896 Mb
ZONE_DMA is a zone of physical pages "reserved" for ISA DMA. ISA DMA
controllers are limited to 24-bits addresses, so they can't access
physical memory above 16 Mb. So, the Linux Kernel decided to separate
this 0-16 Mb zone from the rest of the physical memory in order to be
able to reserve and allocate pages in this specific zone.
ZONE_NORMAL is the amount of physical memory which is identity-mapped
into the kernel space. In Linux, on x86 architecture, each address space
is split into two areas : the user program area (0 -> 3G) and the kernel
area (3G -> 4G). The latter is simply an identity-mapping of the
physical memory. So ZONE_NORMAL is limited in size to the amount of
physical memory that is identity-mappable into the kernel area, i.e
around 1G.
ZONE_HIGHMEM is all the memory above 896M. It cannot be accessed
directly by the kernel. It can be used by user space applications and
can be mapped temporarly inside the kernel using bounce buffers.
For more information, I strongly recommend you to read Mel Gorman's book
«Understanding the Linux Virtual Memory Manager »,
http://www.phptr.com/content/images/0131453483/downloads/gorman_book.pdf
Don't hesitate to correct me if I said something wrong.
Sincerly,
Thomas
--
Thomas Petazzoni
thomas.petazzoni@xxxxxxxx
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/