1
我想知道爲內核預留了多少空間以及用戶進程的數量。我如何找到64位linux內核的task_size?
我想知道爲內核預留了多少空間以及用戶進程的數量。我如何找到64位linux內核的task_size?
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