2015-11-05 50 views

回答

1
0000000000000000 - 00007fffffffffff (=47 bits) user space, different per mm 
hole caused by [48:63] sign extension 
ffff800000000000 - ffff87ffffffffff (=43 bits) guard hole, reserved for hypervisor 
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 ... 
ffffec0000000000 - fffffc0000000000 (=44 bits) kasan shadow memory (16TB) 
... unused hole ... 
ffffff0000000000 - ffffff7fffffffff (=39 bits) %esp fixup stacks 
... 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 

直接映射覆蓋系統中的所有內存到最高 內存地址(這意味着在某些情況下,還可以包括PCI內存 孔)。

vmalloc空間被懶惰地同步到不同的PML4頁面 使用頁錯誤處理程序的進程,init_level4_pgt作爲 引用。

當前的X86-64實現只支持40位地址空間, ,但我們最多支持46位。這擴展到頁表中的MBZ空間。

所以,總之用戶空間得到247字節= 128TiB,而內核得到512MiB。其餘的地址空間會連接到系統的各個部分,以及一些不可用的漏洞。

您也可以在這裏閱讀關於64位系統。 x86_64 Canonical address space