主要搞清楚下列问题:linux
1.X86-64 页式管理有哪些改变?electron
2.Linux是怎样支持64bit地址管理?布局
3.64bit 内存布局是怎么样的?spa
查看《64-ia-32-architectures-software-developer-manual》-> VOLUME3 -> Chapter 4 paging -> 4.5 IA-32E PAGING,重点查看**地址转换**图。blog
另外参考《X86-64上的Linux VM管理系统》更容易理解。进程
查看随内核文档《https://www.kernel.org/doc/Documentation/x86/x86_64/mm.txt 》,初次看有些费解,注意:内存
内存布局重要分三大块,从低地址到高地址,依次是:用户空间,空洞(目前换没用), 内核空间; 文档
用户空间至关简单是连续的,而内核空间又分红不少小的区域,如直接映射区,vmalloc,text区和内核模块区等,而且各区域由空洞隔开;get
要弄懂三大区域进一步是如何布局的,就比较费事了,参考问题3会有个大概了解。it
内存布局的配置文件见《http://lxr.free-electrons.com/source/arch/x86/include/asm/
pgtable_64_types.h?v=3.8#L26》
为了观察一个具体进程的内存布局,能够sudo cat /proc/pid/maps,特殊能够直接sudo cat /proc/self/mpas查看当前进程内存布局。