Thread (9 messages) flat view 9 messages, 4 authors, 2015-03-15

Understanding the mapping of physical memory to kernel address space

From: Arun KS <hidden>
Date: 2015-03-12 18:03:22

Hello Sunny,

On Thu, Mar 12, 2015 at 10:32 PM, Sunny Shah [off-list ref] wrote:
Hello,

This is my first mail on this list, so please let me know if I'm erring.

I'm reading Bovet and Cesati's "Understanding the Linux Kernel",
specifically the chapter "Memory Addressing", sub-section "Kernel Page
Tables". Here they describe how Linux initializes its page tables for
various RAM sizes and how much of the physical address space is mapped onto
the kernel virtual address space.

I have several questions from my reading:

My understanding is that the 32 bit virtual address space of a process is
split into 2 parts - the first 3 GiB for the user space and the remaining
1GiB for the kernel (with the same kernel mapping being used for all
processes. However, although the kernel is mapped into the higher portion of
the address space, it resides in the lower 1 GiB of RAM. Is this correct?
Yes. Incase of 3:1 mapping, kernel virtual address starts at
0xc0000000. You can also have 2:2 mappings aswell. It is a
configurable option
There is a frequent mention of "mapping RAM to the kernel address space". Is
the whole RAM mapped to the kernel space? What would happen in the case of a
machine having only 1 GiB of RAM?
If you are using 3:1 user to kernel mapping, your kernel will have 1GB
of virutal addres space.
And if you have 1GB of RAM, whole ram cannot be mapped to kernel
virtual address, because you have to spare some virtual kernel address
space for io memory, vmalloc area etc. So you have to map some of DDR
memory as HIGH_MEM.

Related to the above, what exactly is max_low_pfn? It is mentioned it is the
"Page frame number of the last page frame directly mapped by the kernel (low
memory)". What would it's value be for a machine with 1 GiB RAM? For a
machine with 4 GiB RAM, would it be the number of the frame covering the
last portion of kernel space (896 MiB)?
max_low_pfn is the pfn of the last page mapped as low memory. All the
other pfn belongs to HIGH_MEM. They can be dynamically mapped to
vmalloc virutal address space or directly to user virutal address
space. User space memory is the main consumer of HIGH_MEM.

Thanks,
Arun
Sorry if my questions are a bit vague. I'm still new to this and having
difficulty relating everything.


Thanks,
Sunny

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help