Physical memory layout (was Re: skbuff->dev and sk_buff->input_dev)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux