码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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内核源码中会用到PDG、PUD、PMF和PT等简称,但在ARM芯片手册上会使用L1、L2、L3等术语

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

    在这里插入图片描述

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

    3、一级页表项

    在这里插入图片描述

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

    4、二级页表项

    在这里插入图片描述

    二、ARM64页表

    1、ARMv8-A架构

    在这里插入图片描述

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

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

    在这里插入图片描述

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

    1、查询页表

    在这里插入图片描述

    2、判断页表项的状态

    在这里插入图片描述

    3、修改页表

    在这里插入图片描述

    四、研究实例

    在这里插入图片描述在这里插入图片描述

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

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

    在这里插入图片描述- ARM32不是只有两级页表吗,为什么要需要遍历这么多?

    在这里插入图片描述

    在这里插入图片描述

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

    五、ARM32页表和Linux页表解惑

    1、ARM32页表和Linux页表

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    六、其他实例问题

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【Python】迭代器__iter__、__next__
    2022/9/25 考试总结
    了解 IPv4 和 IPv6 之间的区别?
    公司刚来的阿里p8,看完我构建的分布式框架,甩给我一份文档
    Python:最低要求
    【数据结构】堆的创建
    纳米/荧光/磷脂/荧光探针/聚合物/化合物/磁性纳米粒子修饰AIE微球相关研究
    steam搬砖好做吗?真如别人说的很能赚?
    socket网络编程-socket()、bind()、setsockopt()、recvfrom()、sendto()函数
    机器学习可解释性之shap模块的使用(一)
  • 原文地址:https://blog.csdn.net/qq_44629819/article/details/132868322
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号