【ARMv8/v9 MMU 页表配置 01 】

news2024/11/15 7:46:56

文章目录

    • 1.1 MMU
      • 1.1.1 虚拟地址位宽配置
      • 1.1.2 页面大小(grandule size)配置
      • 1.1.3 AArch64 页表项描述符格式
      • 1.1.4 内存属性配置

1.1 MMU

1.1.1 虚拟地址位宽配置

64 位虚拟地址中,并不是所有位都用上,除了高 16 位用于区分内核空间和用户空间的虚拟地址外,虚拟地址的有效位的配置可以是:36, 39, 42, 47。在代码中,可以看到寄存器 TCR_EL1, Translation Control Register (EL1) 有关 T0SZ, T1SZ 的设置, 这个域就是用来配置这个项目的, 虚拟地址的有效位数为 64-TxSZ (或者, 也可以说 TxSZ 是用来设置高位无效位数的):
在这里插入图片描述

图 1-1 TCR_EL1

  • T1SZ, bits [21:16] 通过TTBR1寻址的内存区域的大小偏移量;
  • T0SZ, bits [5:0] 通过TTBR0 寻址的内存区域的大小偏移量;

比如, 我们如果希望使用 48 位的虚拟地址, 就会将TxSZ设置为 64-48=16, 也即 TRC_ELx.TxSZ 设置为 16。如果需要使用 39bit 的虚拟地址那么就设置为 25。
在这里插入图片描述
比如我使用的内核中有效位配置为 CONFIG_ARM64_VA_BITS=39:
用户空间地址范围:0x00000000_00000000 ~ 0x0000007f_ffffffff,大小为 512G;
内核空间地址范围:0xffffff80_00000000 ~ 0xffffffff_ffffffff,大小为 512G。

1.1.2 页面大小(grandule size)配置

支持 3 种页面大小:4KB, 16KB, 64KB,见 TRC_ELx.TGx
在这里插入图片描述

三种不同的粒度及虚拟地址位宽会影响所需 translation table level 的 数量配置大小配置

  • 4KB grandule size且 虚拟地址为 48bit 为例, 硬件可以使用四级查表。每一级的地址转换有 9 bit ,所以每个页表 2^9=512 项 (即 512个 entry),需要 VA 的 9位做索引。
    9位,9位,9位,9位,12位,如下图:
    在这里插入图片描述

    图 1-2 VA=48 Grandule=4K

    • VA的[47:39] 索引到 L0 表的 512项。每个表项对应512GB(2^39)范围,并指向 L1 表;
    • L1 table 中也有 512个 entry, 每一个entry指向 L1 table 或 1GB block;
    • L2 table 的 entry 指向 L3 的 table 或 2M block;
    • L3 table 的 entry 指向 4KB block 的基地址。

  • 16KB grandule size为例,每个页表 2^11 项=2048项,需要 VA11 位提供索引。
    1位,11位,11位,11位,14位:
    Level0 表仅包含两项,对应 128TB范围如下
    在这里插入图片描述

    图 1-3 VA=48 Grandule=16K

  • 64KB grandule size为例,每个页表2^13项=8192项,需要 VA 的13 位提供索引。
    13位,13位,13位,16位:
    在这里插入图片描述

图 1-4 VA=48 Grandule=64K

  • 4KB grandule size且 虚拟地址39bit 为例,如果要使用 leve0 table的话,那么只能使用 BIT[38:38]表示,我们从上文可以知道 BIT[38:30] 已经给 level1用了,所以这种情况下不需要使用 level0,直接从 level1开始就可以完全表示整个39bit 的虚拟地址空间了。
    在这里插入图片描述

图 1-5 VA=39 Grandule=64K

而如果虚拟地址空间只有 30 位,那么只需要从 level2 开始就可以完整表示整个地址空间了。也即, 虚拟地址空间越小,那么所需的level也就越小

1.1.3 AArch64 页表项描述符格式

AArch64 描述符格式被用在所有级别的表中,从Level 0 到 Level 3。
Level 0 描述符仅能输出 Level 1表的地址
Level 3 描述符不能指向其它表,仅能输出最终内存页的地址。因而 Level 3 格式稍有不同。
在这里插入图片描述

页表项的 [1:0] 位用于表示页表项的类型
在这里插入图片描述

  • bit[0] 为 0 表示表示该页表项无效, bit[1] 才表示该页表项有效;
  • bit[0] 为 1,bit[1] 为 0 表示该页表项是个 Block descriptor, 也就是该页表项中的 Output address 填写的是物理地址,也即下图中[49:n]域填写的是物理地址,该物理地址加上 [n-1:0] 偏移即可获取实际物理地址
    在这里插入图片描述
  • bit[0] 为 1,bit[1] 为 1 表示该页表指向下一级 table。

1.1.4 内存属性配置

在这里插入图片描述

  • UXN or XN Excute-never, 决定了descriptor指向的region是否excuteable

  • PXN privileged excute-never, 决定了descriptor指向的region在EL1是否excuteable

  • Contiguous 该表项是否为连续表项中的一项。即转换表在该表项前后是连续的,没有空洞。这样,这些连续的表项便有可能一次性加载到cache中(比如由一个TLB entry缓存)

  • DBM dirty bit modifier, dirty bit指示内存页有没有被修改

  • nG not global, 指明当前的 entry 是 global(nG=0,所有process都可以访问) 还是non-global(nG=1,only本process允许访问)。

    • 如果是global类型,则 TLB 中不会 tag ASID;
    • 如果是non-global类型,则 TLB 会 tag上 ASID,且 MMU 在 TLB 中查询时需要判断这个 ASID 和当前进程的 ASID 是否一致,只有一致才证明这条 entry 当前 process 有权限访问。
  • AF access flag,当该标志为0,标明对应的内存区域(一个block或者一个page)是第一次访问;

  • SH[1:0] shareable attribute: 指当前内存页表项的数据是否可以同步到其它CPU上,多核CPU调用带有该属性页表项的数据,一旦某个CPU修改了数据,那么系统将自动更新到其它CPU的数据拷贝,实现内存数据一致性。对于Normal类型的内存,有 3 种情况:

    • Inner Shareable, 该内存位置可以被InnerShareability domain 中的所有处理器访问,并且硬件保证该位置在这些处理器间的数据一致性,InnerShareability domain中的处理器一般被同一个虚拟机监视器或操作系统控制;

    • Outer Shareable, 该内存位置可以被OuterShareability domain中的所有处理器访问,并且硬件保证该位置在这些处理器间的数据一致性,InnerShareability domain 是OuterShareability domain的一个子集;

    • Non-shareable, 该内存位置一般只能被唯一处理器访问,如果还有其他处理器能访问该位置,可能需要软件用缓存一致性指令来保证缓存一致性。

  • AP[2:1] access permission, 设置数据访问的权限,可以设置为 4 种:
    在这里插入图片描述

  • NS security bit, 对于从安全状态访问内存,指定输出地址是在安全地址映射中还是在非安全地址映射中:

    • NS == 0 访问安全PA空间;
    • NS == 1 访问非安全PA空间 。
      对于从非安全状态进行的存储器访问,该位为RES 0,被PE忽略。
  • AttrIndx index into the MAIR_ELn, 指向内存区域的类型以及可缓存性(见下文)

推荐阅读
https://developer.arm.com/documentation/102416/0100/Single-level-table-at-EL3?lang=en

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud:ElasticSearch之数据聚合

聚合(aggregations) 可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售情况如何? 实现这些统计功能的比数据…

数组题目总结 -- 双指针

目录① 快慢指针:一. 删除有序数组中的重复项1. 思路和代码I. 博主的做法:II. 东哥的做法:2. 总结二. 删除排序链表中的重复元素(扩展)1. 思路和代码I. 博主的做法:II. 东哥的做法:2. 总结三. 移…

硬件语言Verilog HDL牛客刷题day08 综合部分

1. Johnson Counter 1.题目: 请用Verilog实现4位约翰逊计数器(扭环形计数器),计数器的循环状态如下。 电路的接口如下图所示 2.解题思路 2.1 一个简单的状态机的配置。 2.2 注意 起始状态 是 0000 就行 3.解题代码 timescale …

动态内存管理——C语言【进阶】(下)

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏:进阶C语言,本专栏主要讲解数据存储,进阶指针,动态内存管理&a…

前端面试题 - 计算机网络与浏览器相关

系列文章目录 vue常见面试题总结 htmlcss 面试题总结附答案 初级前端面试题总结(html, css, js, ajax,http) js基础面试题整理(包含ES5,ES6) 文章目录 系列文章目录一、网络协议相关1. 从浏览器地址栏输入url到显示页面的步骤…

蓝桥杯欲伸手CTF?有多远爬多远

注意:网络安全类比赛 或者说 CTF 参赛不会需要任何费用 只有国赛/省赛有可能会收取一定运维费用 其他比赛都不会收费 望周知。 先来看个特离谱的事情 早上起床看到几位师傅的朋友圈一脸懵,再仔细一看,好嘛。。。。。。 先看看探姬的回复 接下…

人工智能大模型多场景应用原理解析

前言 在上篇文章《人工智能大模型之ChatGPT原理解析》中分享了一些大模型之ChatGPT的核心原理后,收到大量读者的反馈,诸如:在了解了核心原理后想进一步了解未来的发展趋势(比如生成式人工智能和元宇宙能擦出什么样的火花?),大模型…

伪命题之MYSQL分库分表

看到使用分库分表来解决性能问题的时候心里总是不能太理解。 如果同事发生大量请求的时候,损害性能的是硬盘的随机读。那么分库分表也没有对性能的瓶颈进行“分治”啊。 应该的做法是使用一块新的硬盘来创建分库。但是基本的文章都没有提到这点。而且基本上也不会有…

价值导向型研发管理数字化建设方案——易趋亮相CCTI中国研发管理峰会

4月15日-16日,由光环国际举办的2023 CCTI中国研发管理峰会在北京中关村国家自主创新示范区会议中心成功举办。 (现场签到处) 此次峰会邀请了20余位来自腾讯、华为、网易、阿里云等知名企业的研发管理领域专家,带来最新前沿知识和内…

【网络安全知识体系】外网渗透测试 | 14个小实验

写在前面:视频地址 成功上岸360!0基础网络安全 入行 到 入yu、漏洞挖掘-外网渗透测试流程目录 一、导读: 二、汇总: 三、知识导图 四、面试常见问题 五、渗透测试流程 1、简述: 2、寻找测试目标 3、信息收集 …

webgl-简单动画

html <!DOCTYPE html> <head> <style> *{ margin: 0px; padding: 0px; } </style> </head> <body> <canvas id webgl> 您的浏览器不支持HTML5,请更换浏览器 </canvas> <script src"./main.js"></script&g…

程序员必用的6个代码对比神器附下载地址

一、WinMerge WinMerge是一款基于Windows系统下的文件比较和合并工具&#xff0c;使用它可以非常方便地比较多个文档内容&#xff0c;适合程序员或经常需要撰写文稿的朋友使用。WinMerge会将两个文件内容做对比&#xff0c;并在相异之处以高亮度的方式显示&#xff0c;让使用者…

认识网络随机丢包

考虑一根漏水的管子&#xff0c;希望出水口接到和不漏的管子等量的水&#xff0c;要么靠时间&#xff0c;反复将漏掉的水重新注入&#xff0c;直到漏掉的水可忽略&#xff1a; ​ 要么靠空间&#xff0c;在漏的地方将管子加粗&#xff0c;一次性注入更多的水&#xff1a; 不…

什么是HTTP? HTTP和HTTPS的区别?

目录 1、什么是HTTP? 2、HTTP的特点 ① 支持客户/服务器模式 ② 简单快速 ③ 灵活 ④ 无连接 ⑤ 无状态 3、HTTPS 4、HTTP和HTTPS的区别 ① 安全性不同 ② 默认端口不同 ③ 响应速度和资源消耗不同 ④ 网站申请流程不同 ⑤ 对搜索排名的提升不同 1、什么是…

基于OpenCV的硬币面值识别

本项目通过Python与Opencv结合数字图像处理技术对&#xff11;元、&#xff15;角、&#xff11;角三种硬币进行识别。首先通过Canny算子对图像进行边缘检测&#xff0c;然后进一步调用定义的函数去除边缘检测后图像中的孤立点&#xff0c;对处理后的图像进行Hough变换检测圆曲…

涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov5/Yolov7,内存更小、效率更高,秒杀Adam(W)

1.Lion优化器介绍 论文:https://arxiv.org/abs/2302.06675 代码:automl/lion at master google/automl GitHub 1.1 简单、内存高效、运行速度更快 1)与 AdamW 和各种自适应优化器需要同时保存一阶和二阶矩相比,Lion 只需要动量,将额外的内存占用减半; 2)由于 Lion…

港联证券|机器视觉迎重磅利好,5只概念股获两路资金加持

现在我国机器视觉在工业场景中的全体渗透率仍旧在10%以下&#xff0c;比照工业场景巨大的体量而言&#xff0c;机器视觉职业仍有较大开展空间。 近来*ST中潜收到广东证监局行政监管措施决定书。依据深交所的相关要求&#xff0c;公司应当在2023年1月31日前发表公司股票或许被停…

windows安装opencv-python(opencv-python源码安装)

因为我要开启opencv的GStreamer功能&#xff0c;这是和ffmpeg相类似的对视频流操作的一个功能&#xff0c;默认没有开启&#xff0c;需要手动编译。 安装方式链接: opencv-install-with-GStreamer 核心内容如下: git clone --recursive https://github.com/skvark/opencv-py…

数据结构_第十二关:二叉树的基础OJ题练习

目录 1.单值二叉树 2.相同的树 3.另一棵树的子树 4.反转二叉树 5.对称二叉树 6.二叉树的结构及遍历 扩展&#xff1a;如何判断是不是完全二叉树、二叉树的销毁 1&#xff09;判断是不是完全二叉树 2&#xff09;二叉树的销毁 1.单值二叉树 OJ题链接https://leetcode.…

传输协议特点大比拼之UDP

文章目录 前言一.UDP协议端的格式源端口号和目的端口号报文长度校验和 二.UDP的特点无连接面向数据报不可靠缓冲区 前言 本文将比较两种主要的传输协议 ,UDP的特点&#xff0c;以帮助读者更好地理解它们的应用场景和优缺点。 一.UDP协议端的格式 大家先来看一些UDP的报文格式…