【ARM Cache 与 MMU 系列文章 7.3 – ARMv8/v9 MMU 块描述符与页表描述符】

news2024/11/26 16:36:21


请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】
及【嵌入式开发学习必备专栏】


上篇文章:【ARM Cache 系列文章 7.2 – ARMv8/v9 MMU 页表配置详细介绍 03 】

文章目录

  • MMU 块描述符与页描述符
    • Block Descriptor
      • Block descriptor formats
      • Block Entry 介绍
      • Block Entry 的设定
      • Block Entry 的特点
      • Block Entry 使用场景
    • Page Descriptor
      • Page Descriptor 格式
      • Block descriptors 和 Page descriptors 属性
      • Block descriptors 和 Page descriptors 使用场景

在这里插入图片描述

MMU 块描述符与页描述符

在ARMv8/v9架构中,内存管理单元(MMU)使用描述符(Descriptors)来定义内存区域的属性。这些描述符被组织成表格,通常称为转换表(Translation Table)。转换表项(Translation Table Entry,TTE)可以是块描述符(Block Descriptor)或页描述符(Page Descriptor),它们定义了虚拟地址到物理地址的映射及其相关属性。

Block Descriptor

块描述符用于定义较大的内存区域的映射。在不同的转换级别(Level)中,块的大小可以不同。例如,在第一级转换(L1)中,ARMv8/v9 允许1GB的块大小,在第二级转换(L2)中,允许2MB大小(取决于具体的配置和实现)。
块描述符不仅仅定义了虚拟地址到物理地址的映射,还定义了访问权限(如读/写权限),是否可以执行,缓存策略(如是否可缓存,缓存类型),以及是否需要地址转换(Non-Secure, Secure)等属性。

Block descriptor formats

下图展示了52-bit输出地址和48-bit输出地址各种颗粒度的blcok descriptor 的格式:
在这里插入图片描述

通常我们只使用48-bit 4K的格式。

Block Entry 介绍

“Block Entry” 是指在页表中用来描述一块连续物理内存区域映射的条目。ARMv8/v9 架构支持多级页表结构,这些页表结构用来将虚拟地址空间(VA)映射到物理地址空间(PA)。页表项(PTE)可以是页表描述符,指向另一个页表的地址,或者是块描述符,直接映射到一个物理内存块。

Block Entry 的设定

如何设定一个页表项(PTE)是块描述符还是页描述符见文章 【ARM Cache 系列文章 7.1 – ARMv8/v9 MMU 页表配置详细介绍 02 】

Block Entry 的特点

  1. 连续内存映射:Block Entry 映射了一段连续的物理内存区域到虚拟内存中。这可以提高内存访问的效率,因为它减少了页表的层级和相关的内存访问代价。
  2. 大小可变:在 ARMv8/v9 架构中,Block Entry 可以表示不同大小的内存块。这取决于页表的层级和配置。例如,在一些配置中,第一级页表(L1)的 Block Entry 可能表示 1GB 的物理内存,而第二级(L2)或更低级别的 Block Entry 可能表示更小的内存块,例如 2MB。
  3. 灵活性和效率:使用 Block Entry 可以在保持足够页表粒度的同时减少页表的大小和深度,这提高了内存映射的灵活性和效率。特别是对于大量使用连续物理内存区域的应用场景(如大型数据库或多媒体处理),这种方法非常有利。

Block Entry 使用场景

  • 大型内存映射:对于需要映射大块连续物理内存的场景,使用 Block Entry 比传统的页映射更有效率,因为它减少了页表遍历的开销。
  • 性能敏感的应用:对于对内存访问性能有高要求的应用,例如高性能计算(HPC)或游戏,使用 Block Entry 可以优化内存访问速度。
  • 系统启动和初始化:在系统启动和初始化阶段,操作系统可能使用 Block Entry 来设置初始的内存映射,确保快速访问关键内存区域。

Page Descriptor

页描述符用于定义较小内存区域的映射,通常是4KB大小的页面。页描述符在第三级转换(L3)中使用,它提供了更细粒度的内存管理能力。与块描述符类似,页描述符也定义了虚拟地址到物理地址的映射及相关的内存属性,如访问权限、执行权限、缓存策略等。

Page Descriptor 格式

下图展示了各种格式的页描述符的格式:
在这里插入图片描述

Block descriptors 和 Page descriptors 属性

下图展示了stage1 translation Block descriptors 和 Page descriptors 属性域:
在这里插入图片描述
见文章:【ARM Cache 系列文章 7 – ARMv8/v9 MMU 页表配置 01 】

下图展示了stage2 translation Block descriptors 和 Page descriptors 属性域:
在这里插入图片描述
bit[63]: 对于stage 1 translations没有使用,对于 stage 2 translations 该 bit 留给 SMMU 使用(后面文章会介绍SMMU);
bits[62:59]:对于stage 1 translations没有使用,对于 stage 2 translations Bits[62:60] 留给 SMMU 使用,Bit[59] 没有使用;
TODO

Block descriptors 和 Page descriptors 使用场景

  • 块描述符主要用于映射较大的、属性统一的内存区域。使用块描述符可以减少转换表的大小和复杂度,提高地址转换的效率。
  • 页描述符则用于映射需要细粒度控制的小内存区域。例如,操作系统内核通常需要对特定内存区域(如设备映射内存、内核代码和数据等)进行精确的权限和属性控制。

在设计操作系统或底层驱动时,合理利用块描述符和页描述符,可以有效地控制内存访问权限,提高系统的安全性和效率。

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

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

相关文章

【C#】开发过程中记录问题

1.DateTimePicker控件获取时间 拖动控件,设置属性format为custom格式。例如我想获得20240101这种类型的string类型的数据: string DateTime = DateTimePicker.Value.ToString("yyyyMMdd");2.ComboBox下拉列表控件 默认为DropDown,下拉可修改。 DropDownList为下…

《Windows API每日一练》

2.2.8 第15练:处理WM_CLOSE消息 /*------------------------------------------------------------------------ 015 编程达人win32 API每日一练 第15个例子WM_CLOSE.C:回调函数---处理WM_CLOSE消息 WM_CLOSE消息 DestroyWindow函数 注意&#xf…

SprirngBoot+Vue房屋租赁系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 租客管理员 功能截图

Git【版本控制命令】

02 【本地库操作】 1.git的结构 2.Git 远程库——代码托管中心 2.1 git工作流程 代码托管中心用于维护 Git 的远程库。包括在局域网环境下搭建的 GitLab 服务器,以及在外网环境下的 GitHub 和 Gitee (码云)。 一般工作流程如下: 1.从远程…

[Cesium学习]

Popup弹窗 Cesium点位弹窗_cesium popup弹窗-CSDN博客 Cesium构造popup弹窗函数_cesium popup-CSDN博客 开发之家 - Cesium构造popup弹窗函数 GitHub - cesium-plugin/cesium-popup-es6: 气泡弹窗 热力图分析 // 创建Cesium Viewer实例 const viewer new Cesium.Viewer(c…

C#中使用Mysql批量新增数据 MySqlBulkCopy

在C#中使用MySqlBulkCopy类来批量复制数据到MySQL数据库,首先需要确保你的项目中已经引用了MySQL Connector。以下是使用MySqlBulkCopy的基本步骤: 1.安装MySQL Connector。 可以通过NuGet安装MySQL Connector: 2.在代码中引用必要的命名空间…

安装 JDK 17

安装包 百度网盘 提取码:6666 安装步骤 双击下载得到的安装包,开始安装: 正在安装: 安装完成: 安装路径下,多出来了很多新的内容。安装文件夹所包含的内容及作用: src 是 JDK 的源码包。类库…

DevExpress WPF中文教程:Grid - 如何向项目添加GridControl并绑定到数据

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

VueRouter路由与Vuex状态管理

前言 随着前端技术的快速发展和前后端分离架构的普及,单页面应用(SPA)已成为现代Web开发的主流。在SPA中,前端路由和状态管理扮演着至关重要的角色。Vue3作为当前流行的前端框架之一,提供了强大的路由(Vue …

sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置

SQLi-Labs是一个用于学习和练习SQL注入漏洞的开源应用程序。通过它,我们可以学习如何识别和利用不同类型的SQL注入漏洞,并了解如何修复和防范这些漏洞。Less 7 SQLI DUMB SERIES-7判断注入点 进入页面中,并输入数据查看结果。 发现空数据提…

【JS实战03】学生信息的添加与删除

说明:本文章提供相应源码,需要到主页资源栏下载,并搭配源码看本文档;重点阐述每个JS模块实现过程中的重难点问题。 一:录入模块 1 渲染数据思路 减少DOM相关操作,避免因过多的DOM操作造成程序运行速度的…

机车 - 安驾培训记录

1,先学倒车后扶车。 先断电。脚蹬在外的话要展开,防止推过头。 可以挂档就挂到1档。可以用皮套把刹车拉紧,或手捏在刹车上。防止下坡溜车或扶起时车不稳。 站在车倒向的一侧,车把向内,方便一手抓车把,一…

【iOS】内存泄漏检查及原因分析

目录 为什么要检测内存泄漏?什么是内存泄漏?内存泄漏排查方法1. 使用Zombie Objects2. 静态分析3. 动态分析方法定位修改Leaks界面分析Call Tree的四个选项: 内存泄漏原因分析1. Leaked Memory:应用程序未引用的、不能再次使用或释…

CTFHUB-SQL注入-字符型注入

目录 查询数据库名 查询数据库中的表名 查询表中数据 总结 此题目和上一题相似,一个是整数型注入,一个是字符型注入。字符型注入就是注入字符串参数,判断回显是否存在注入漏洞。因为上一题使用手工注入查看题目 flag ,这里就不…

基于微信小程序的社区志愿者服务平台 _8xh87【已测试】

前言:👩‍💻 计算机行业的同仁们,大家好!作为专注于Java领域多年的开发者,我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源: 👩‍💻 SpringBoot…

轻松掌握系统概况,提升工作效率

作为 Linux 系统管理员,我们经常需要了解系统的基本状况,比如当前时间、系统版本、内核信息、CPU 型号、内存使用等等。但是每次手动执行各种命令来获取这些信息,无疑是一件非常繁琐的事情。 幸运的是,我们可以通过编写一个简单的 shell 脚本来一键获取这些系统信息。让我们一…

Linux用户和用户组的管理

目录 前言一、系统环境二、Linux用户组的管理2.1 新增用户组2.2 删除用户组2.3 修改用户组2.4 查看用户组 三、Linux用户的管理3.1 新增用户3.2 删除用户3.3 修改用户3.4 查看用户3.5 用户口令(密码)的管理 总结 前言 本篇文章介绍如何在Linux系统上实现…

Aethir: 破局算力瓶颈,构建AI时代去中心化云基础设施

科技的每一次飞跃都在重新塑造世界,而近年来,跨越式的技术革新再次引发了深刻的变革,那就是人工智能(AI)。 人工智能已然超越了此前的所有技术概念,成为了继互联网之后的下一个巨大浪潮。从自动驾驶汽车到…

ipv6有状态分配地址

RA报文M/O标志位 设备在获取IPv6地址等信息时,会先发送RS报文请求链路上的路由设备,路由设备受到RS报文后会发送相应的RA报文来表示自身能够提供的IPv6服务类型。 对于RA报文,根据其M字段和O字段确定其获取IPv6地址的模式: M/O都…

python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

实现效果(红框内): 后端api如下: task_api.route(/user/task/states_list, methods[POST, GET]) visitor_token_required def task_states(user):name_list [待接单, 设计中, 交付中, 已完成, 全部]data []color [#F04864, …