Linux是几级页表?
地址:逻辑地址 --(段表)–> 线性地址 --(页表)–> 物理地址
页表的启用,体现在线性地址上,若启用页表,要完成线性地址和物理地址的转化;逻辑地址到线性地址,就是取低48位,64位中用于寻址的,实际只用了48位。
先看下系统的页表大小:
root@hw2:~# getconf PAGE_SIZE
4096
Linux的页表分配是根据cpu来设计的,不同平台(cpu)分页不同,这里考虑x86平台:
平台
linux页表
地址分配
可表示大小
x86
二级页表
10,10,12=32
4GB
x86_amd
四级页表
9,9,9,9,12=48(线性地址)
256TB
intel 48物理地址划分:
对应是:
单元
描述
页全局目录
Page Global Directory
页上级目录
Page Upper Directory
页中间目录
Page Middle Directory
页表
Page Table
页内偏移
Page Offset
Linux把计算机分成独立层/依赖层两个层次,对于页面的映射和管理也是;linux从最初的2级页表,到3级页表(x86支持物理地址扩展),再到4级页表(64cpu)。
总结来说:页表大小位4KB,所以页内地址需要12位,虚拟地址64位,需要8B,那一页最多存储4KB/8B=2^9,即一级页表占用9位,intel x86_64平台使用48位物理地址,剩余的48-32=9x4可以构成四级页表,48位物理地址可以表示多大的内存空间,2^48B=256TB,此外,x86系列是向后兼容的,为什么是4级页表?因为linux一路从2级页表、3级页表,再到当前的4级页表,满足当前需要,若未来那天不够用了,当然会扩展出更大的。
参考:
Linux分页机制之概述–Linux内存管理(六)
内核必须懂(七): Linux四级页表(x64)
逻辑地址、线性地址、物理地址和虚拟地址理解
操作系统 内存地址(逻辑地址、线性地址、物理地址)概念