Memory layout of x86_64 in Linux

Blue : User Space 128TB
Red : Kernel Space 512MB
The rest of the address space goes to various parts of the system, along with a few unusable holes.

-----------

<previous description obsolete, deleted> Virtual memory map with 4 level page tables: 0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm hole caused by [48:63] sign extension ffff800000000000 - ffff80ffffffffff (=40 bits) guard hole ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory ffffc80000000000 - ffffc8ffffffffff (=40 bits) hole ffffc90000000000 - ffffe8ffffffffff (=45 bits) vmalloc/ioremap space ffffe90000000000 - ffffe9ffffffffff (=40 bits) hole ffffea0000000000 - ffffeaffffffffff (=40 bits) virtual memory map (1TB) ... unused hole ... ffffffff80000000 - ffffffffa0000000 (=512 MB) kernel text mapping, from phys 0 ffffffffa0000000 - ffffffffff5fffff (=1525 MB) module mapping space ffffffffff600000 - ffffffffffdfffff (=8 MB) vsyscalls ffffffffffe00000 - ffffffffffffffff (=2 MB) unused hole The direct mapping covers all memory in the system up to the highest memory address (this means in some cases it can also include PCI memory holes).

 33#define __PAGE_OFFSET           _AC(0xffff880000000000, UL)
  34
  35#define __START_KERNEL_map      _AC(0xffffffff80000000, UL)
vmalloc space is lazily synchronized into the different PML4 pages of the processes using the page fault handler, with init_level4_pgt as reference. Current X86-64 implementations only support 40 bits of address space, but we support up to 46 bits. This expands into MBZ space in the page tables. -Andi Kleen, Jul 2004

BY https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt
posted @ 2013-11-28 21:24  jeremyatchina  阅读(2148)  评论(0编辑  收藏  举报