Linux内核源码分析 (B.x)Linux页表的映射

Linux内核源码分析 (B.x)Linux页表的映射

文章目录

  • Linux内核源码分析 (B.x)Linux页表的映射
  • 一、ARM32页表
    • 1、页表术语
    • 2、虚拟地址到物理地址转换
    • 3、一级页表项
    • 4、二级页表项
  • 二、ARM64页表
    • 1、ARMv8-A架构
    • 2、4KB大小页+4级映射
  • 三、Linux内核中关于页表的函数和宏
    • 1、查询页表
    • 2、判断页表项的状态
    • 3、修改页表
  • 四、研究实例
  • 五、ARM32页表和Linux页表解惑
    • 1、ARM32页表和Linux页表
    • 2、ARM32的PTE页表项和Linux页表不一样
  • 六、其他实例问题

一、ARM32页表

1、页表术语

Linux内核源码分析 (B.x)Linux页表的映射_第1张图片

  • 在Linux内核源码中会用到PDG、PUD、PMF和PT等简称,但在ARM芯片手册上会使用L1、L2、L3等术语

2、虚拟地址到物理地址转换

Linux内核源码分析 (B.x)Linux页表的映射_第2张图片

  • 针对两级级页表而言,这里的L1索引和L2索引分别对应于PGD(全局目录)和PT(页表项)
  • ARM32中的一级页表项和二级页表项大小均为4个字节

3、一级页表项

Linux内核源码分析 (B.x)Linux页表的映射_第3张图片

  • 如果只需要支持超级大段和段映射,那么只需要一级页表即可。如果要支持4KB页面或64KB大页映射,那么需要用到二级页表。不同大小的映射,一级或二级页表中的页表项的内容也不一样
    Linux内核源码分析 (B.x)Linux页表的映射_第4张图片
    • 00:缺页,虚拟存储空间没有被映射到物理存储空间,因而访问该存储空间将产生缺页异常。
    • 01:包含了粗粒度的二级页表的物理地址,它可以实现以大页和小页为单位的地址映射
    • 10:段描述符(Section Descriptor),段描述符定义了对应的 1MB 的虚拟存储空间的地址映射关系
    • 11:包含了细粒度的二级页表的物理地址
  • 关于段映射,更多请看,其实段映射跟页表映射的流程是差不多的,博客里面的段内偏移地址可以类比于页表中的VPO(Virtual Page Offset),下面展示别的博客里的图。
    Linux内核源码分析 (B.x)Linux页表的映射_第5张图片

4、二级页表项

Linux内核源码分析 (B.x)Linux页表的映射_第6张图片

二、ARM64页表

1、ARMv8-A架构

Linux内核源码分析 (B.x)Linux页表的映射_第7张图片

  • 为什么不是64根地址线?
    • 因为48根地址线就已经足够了(2^48=256T),再增加地址线只会增加系统的复杂度

2、4KB大小页+4级映射

Linux内核源码分析 (B.x)Linux页表的映射_第8张图片

三、Linux内核中关于页表的函数和宏

1、查询页表

Linux内核源码分析 (B.x)Linux页表的映射_第9张图片

2、判断页表项的状态

Linux内核源码分析 (B.x)Linux页表的映射_第10张图片

3、修改页表

Linux内核源码分析 (B.x)Linux页表的映射_第11张图片

四、研究实例

Linux内核源码分析 (B.x)Linux页表的映射_第12张图片Linux内核源码分析 (B.x)Linux页表的映射_第13张图片

  • special mapping:特殊映射 Linux内核不希望页面参与页面管理的活动中

  • pgd指向第一级页表(页全局目录)的基址。

Linux内核源码分析 (B.x)Linux页表的映射_第14张图片- ARM32不是只有两级页表吗,为什么要需要遍历这么多?

Linux内核源码分析 (B.x)Linux页表的映射_第15张图片

Linux内核源码分析 (B.x)Linux页表的映射_第16张图片

  • ARM32的二级页表没有用到PTE_SPECIAL标志位,而ARM64的三级页表中用到了。

五、ARM32页表和Linux页表解惑

1、ARM32页表和Linux页表

Linux内核源码分析 (B.x)Linux页表的映射_第17张图片
Linux内核源码分析 (B.x)Linux页表的映射_第18张图片Linux内核源码分析 (B.x)Linux页表的映射_第19张图片
Linux内核源码分析 (B.x)Linux页表的映射_第20张图片

Linux内核源码分析 (B.x)Linux页表的映射_第21张图片

  • 实现了两套平行页表
    • HW(HardWare)页表 ,属于ARM32架构的页表
    • SW(SoftWare)页表,属于Linux内核的页表

Linux内核源码分析 (B.x)Linux页表的映射_第22张图片

2、ARM32的PTE页表项和Linux页表不一样

Linux内核源码分析 (B.x)Linux页表的映射_第23张图片

  • 缺页中断和页面回收的时候会讲

六、其他实例问题

Linux内核源码分析 (B.x)Linux页表的映射_第24张图片
Linux内核源码分析 (B.x)Linux页表的映射_第25张图片

你可能感兴趣的:(Linux内核源码分析,linux,运维,服务器)