Syc 大佬有话说 :
关于【Centos8内存机制】的疑问解答
本帖最后由 Syc 于 2020-6-2 02:11 编辑
关于这个问题 《Centos8内存机制》,需要了解Linux的内存分页机制。
问题直通车:https://www.hostloc.com/forum.php?mod=viewthread&tid=697531
背景知识:Centos8之前版本中,内存分页为4级,而由 Centos8 开始,为了更好地适应“堆硬件”环境,内存分页改为5级,有更大的寻址空间。
在Linux中的每个进程都对应一个页表,
以Centos7的4级分页为例:4G的内存,4K每页
如果是一级页表映射,那需要 2^20 =1M 个页表项 (无论系统用不用都映射,此时系统不知道哪个地址是否会被访问)
1M * 4 == 4M每个进程初始化的时候就需要4M的页表负责
而如果是2级页表映射,就只需要一个页目录 + 1个页表项(此时,进程只使用1级页表的4M内存的情况就足够了,2级开始只需要目录+实际地址)
1个页目录占4K,一个页表项占4个字节,但另起了一页,每个进程总体则占8K。以此类推。
:lol:lol 所以,Centos8之后的5级分页机制会导致系统在内存上预先占用更多内存空间。
[*]页全局目录(Page Global Directory):包含若干页上级目录的地址;
[*]页上级目录(Page Upper Directory):依次包含若干页中间目录的地址;
[*]页中间目录(Page Middle Directory):包含若干页表的地址;
[*]页表(Page Table):每一个页表项指向一个页框
https://i.loli.net/2020/06/02/jE6J7d1FlHMNK28.pnghttps://cdn.jsdelivr.net/gh/hishis/forum-master/public/images/patch.gif