Linux是几级页表?

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级页表,满足当前需要,若未来那天不够用了,当然会扩展出更大的。

参考:

  1. Linux分页机制之概述–Linux内存管理(六)
  2. 内核必须懂(七): Linux四级页表(x64)
  3. 逻辑地址、线性地址、物理地址和虚拟地址理解
  4. 操作系统 内存地址(逻辑地址、线性地址、物理地址)概念

你可能感兴趣的:(linux)