【ARM Cache 与 MMU 系列文章 7.6 -- ARMv8 MMU 相关寄存器介绍】

文章目录

    • MMU 转换控制寄存器 TCR_ELx
      • TCR_ELx 概览
      • TCR_ELx 寄存器字段详解
      • TCR 使用示例
        • Normal Memory
        • Cacheable
        • Shareability
    • MMU 内存属性寄存器 MAIR_ELx
      • 寄存器结构
      • 内存属性字段
      • 使用实例
    • MMU 地址翻译表基址寄存器 TTBR0/1_ELx
      • TTBR0_ELx 寄存器概述
      • 寄存器结构
      • 功能和用途
      • 编程示例
      • 注意事项
    • MMU 使能寄存 SCTLR_EL3

ARM MUU 的配置主要用到了下面4个寄存器

MMU 转换控制寄存器 TCR_ELx

在ARMv8/v架构中,TCR_ELx(Translation Control Register at Exception Level x)寄存器用于控制地址转换的操作。这些控制包括页表的大小、地址空间的大小、以及内存区域的可缓存性和共享性等方面。TCR_ELx寄存器对于配置和优化系统的内存管理至关重要。
在这里插入图片描述

  • bit[5:0]: 用于配置使用多少位地址宽度,比如,要使用40位的地址宽度,那么 T0SZ=64-40=24.
  • bits [9:8] Inner cacheability attribute for memory associated with translation table walks
    • 0b00 Normal memory, Inner Non-cacheable.
    • 0b01 Normal memory, Inner Write-Back Read-Allocate Write-Allocate Cacheable.
    • 0b10 Normal memory, Inner Write-Through Read-Allocate No Write-Allocate Cacheable.
    • 0b11 Normal memory, Inner Write-Back Read-Allocate No Write-Allocate Cacheable.
  • bits [11:10]:Outer cacheability attribute for memory associated with translation table walks:
    • 0b00 Normal memory, Outer Non-cacheable.
    • 0b01 Normal memory, Outer Write-Back Read-Allocate Write-Allocate Cacheable.
    • 0b10 Normal memory, Outer Write-Through Read-Allocate No Write-Allocate Cacheable.
    • 0b11 Normal memory, Outer Write-Back Read-Allocate No Write-Allocate Cacheable.
  • bits [13:12]:由于 translation table 经常被访问且只需要在cluster内部使用所以可以将其配置为 Inner Shareable,cache coherent 可以避免掉对cache的操作。
    • 0b00 Non-shareable.
    • 0b10 Outer Shareable.
    • 0b11 Inner Shareable.
  • bit[15:14]: 用于配置物理页颗粒(Granule size )的大小,比如要使用4K的页面,就需要将这两位配置为0即可;
    • 0b00 4KB.
    • 0b01 64KB.
    • 0b10 16KB.
  • bit[18:16]: 用于配置物理空间地址大小:
    • 0b000 32 bits, 4GB.
    • 0b001 36 bits, 64GB.
    • 0b010 40 bits, 1TB.
    • 0b011 42 bits, 4TB.
    • 0b100 44 bits, 16TB.
    • 0b101 48 bits, 256TB.
    • 0b110 52 bits, 4PB.

TCR_ELx 概览

TCR_ELx寄存器中包含多个字段,这些字段影响地址转换和内存访问的不同方面。以下是一些主要字段的简介:

  • T0SZT1SZ: 分别控制第0级和第1级的输入地址空间的大小。它们指定的是地址空间顶部未使用的位数,从而间接地定义了地址空间的大小。
  • TG0TG1: 分别设置第0级和第1级页表的粒度(页大小),比如4KB、16KB或64KB。
  • IPS: 设置物理地址位宽,例如32位、36位、40位等,影响可访问的物理内存范围。
  • SH0SH1: 定义第0级和第1级页表条目的Shareability属性,指示内存区域是否可以在多个处理器核心间共享。
  • ORGN0, ORGN1, IRGN0, IRGN1: 分别设置第0级和第1级页表的Outer和Inner缓存策略,包括Non-cacheable、Write-Back、Write-Through等。

TCR_ELx 寄存器字段详解

以下是TCR_ELx中一些关键字段的更详细说明:

  • T0SZT1SZ(Translation Size): 它们确定了两个不同的转换表(页表)覆盖的虚拟地址空间的大小。例如,如果T0SZ为25,则第0级的地址空间大小是[2^(64-25)]字节。
  • TG0TG1(Translation Granule): 这些值确定页表项所描述的页的大小。常见的页大小有4KB、16KB和64KB。页的大小影响页表的总体层级和每个页表项所能覆盖的内存大小。
  • IPS(Intermediate Physical Address Size): 这个字段指定系统使用的最大物理地址位数。较大的物理地址允许系统访问更多的物理内存。
  • SH0SH1(Shareability): 这些字段决定内存访问是否可以在多个处理器之间共享。共享性设置有助于在多核处理器系统中维护内存的一致性。
  • ORGN0, ORGN1, IRGN0, IRGN1(Outer and Inner Cacheability): 这些字段控制缓存策略,包括是否缓存以及使用何种缓存模式(如Write-Back或Write-Through)。

TCR 使用示例

假设需要为一个具有64KB页大小、使用48位虚拟地址和40位物理地址的系统配置TCR_EL1

TCR_EL1.T0SZ = 16     // 设置虚拟地址空间为48位(64 - 16)
TCR_EL1.TG0 = 2       // 设置第0级页表粒度为64KB
TCR_EL1.IPS = 2       // 设置物理地址大小为40位
TCR_EL1.SH0 = 3       // 设置第0级页表条目为内部共享
TCR_EL1.ORGN0 = 1     // 设置第0级页表条目的外部缓存策略为Write-Back
TCR_EL1.IRGN0 = 1     // 设置第0级页表条目的内部缓存策略为Write-Back

此配置示例中,我们配置了一套页表来覆盖48位的虚拟地址空间,使用64KB的页大小,并且页表条目使用内部共享和Write-Back缓存策略。

Normal Memory

"Normal Memory"是对比于"Device Memory"的一种内存类型。Normal Memory通常用于存储应用数据和代码,而Device Memory则用于映射到设备寄存器。Normal Memory允许缓存和重新排序访问,从而提高效率。

Cacheable

Cacheable属性指示内存访问可以被缓存。这种属性可以进一步细分为以下类型:

  • Write-Back (WB) Read-Allocate Write-Allocate Cacheable: 这是最常见的缓存类型,它在读操作时分配缓存行,在写操作时也分配缓存行。在写操作时,数据首先被写入到缓存中,然后在某个时刻异步地被写回到主存储器。这种方式可以减少访问主存储器的次数,提高性能。
  • Write-Through (WT) Cacheable: 在这种模式下,数据在写操作时同时写入缓存和主存储器。这确保了主存储器中的数据总是最新的,但可能会牺牲一些写操作的性能。
Shareability

Shareability属性定义了内存区域的共享级别。ARMv8定义了三种共享级别:

  • Non-Shareable: 这表示内存区域不被多个处理器核心共享。在单核心系统中,或者在不需要在核心之间共享该内存区域的情况下,可以使用此属性。
  • Outer Shareable: 这表示内存区域可以在一组处理器核心之间共享,这组核心共享同一个外部(Level 2 或更高级别)缓存。
  • Inner Shareable: 这表示内存区域可以在一组处理器核心之间共享,这组核心共享同一个内部(Level 1)缓存。这对于确保内部缓存中的数据一致性非常重要,特别是在多核处理器系统中。

MMU 内存属性寄存器 MAIR_ELx

在ARMv8架构中,MAIR_ELx寄存器(Memory Attribute Indirection Registers at Exception Level x)用于定义和配置内存属性表。这些寄存器允许软件定义多种内存属性类型,例如缓存策略和访问权限,这对于物理地址的属性定义至关重要。

MAIR_ELx寄存器支持多个异常级别,如MAIR_EL1MAIR_EL2MAIR_EL3,分别对应不同的异常级别使用。寄存器中的每个字段与转换表(Translation Table)中的属性字段相关联,这些属性字段用于描述如何访问对应的物理内存。

寄存器结构

MAIR_ELx寄存器包含多个字段,每个字段8位,总共可以配置8种不同的内存属性。这意味着在转换表项(Translation Table Entry, TTE)中可以引用这8种配置中的任意一种来指定对应内存区域的访问特性。

字段格式如下:

  • Attr0[7:0]
  • Attr1[15:8]
  • Attr2[23:16]
  • Attr3[31:24]
  • Attr4[39:32]
  • Attr5[47:40]
  • Attr6[55:48]
  • Attr7[63:56]

每一对Attrn字段定义了一种内存类型,包括其缓存策略和访问权限。每个Attrn字段内部分为两个子字段,高四位和低四位,分别代表不同的属性。

内存属性字段

每个Attrn字段按以下方式定义:

  • 低四位定义了内存区域的正常内存类型的属性(如缓存行为)。
    • 0b0000:设备内存(Device memory),非缓存。
    • 0b0100:正常内存(Normal memory),非缓存。
    • 其他值定义了正常内存的缓存类型,如Write-Through (WT), Write-Back (WB), Read-Allocate, Write-Allocate等。
  • 高四位定义了内存区域的外部内存类型的属性(如对于SoC外部的内存,或是多核处理器间的共享内存的缓存行为)。
    • 这些位通常定义了与低四位相类似的属性,但适用于处理器外部的内存。

使用实例

配置MAIR_EL1为最常见的例子,下面是一个典型的配置过程:

  1. 配置非缓存访问(设备内存):
// Attr0设为0x00:设备内存,非缓存,非缓冲 
  1. 配置写回缓存(正常内存):
// Attr1设为0xFF:正常内存,Write-Back, Read & Write Allocate 

配置完成后,转换表项可以通过指定的属性索引(Attrn)来使用这些定义。

MMU 地址翻译表基址寄存器 TTBR0/1_ELx

在ARMv8架构中,TTBR0_ELxTTBR1_ELx寄存器是用来存放转换表基址(Translation Table Base Register)的。这些寄存器分别定义了在不同范围内虚拟地址映射到物理地址的页表的基址。这里我们特别关注TTBR0_ELx

TTBR0_ELx 寄存器概述

TTBR0_ELx(Translation Table Base Register 0 at Exception Level x)用于存储页表的物理基址,其中x可以是1、2或3,表示不同的异常级别。在多级页表结构中,这个寄存器指向页表的第一级。

寄存器结构

在ARMv8架构中,TTBR0_ELx拥有以下关键组成部分:

  • BADDR: 基址字段。它包含页表的物理基址。页表的物理基址的对齐要求取决于内存的页面大小和表的总大小。
  • ASID: 地址空间标识符。它用于支持地址空间的上下文切换,确保TLB(Translation Lookaside Buffer)条目与特定的地址空间关联。
  • CNP: 常用非安全页表标志(Common not Private)。指示页表是否为非私有,这与虚拟化和安全扩展有关。

功能和用途

TTBR0_ELx主要用途是定义基本的虚拟内存到物理内存的映射。这是通过页表机制来实现的,其中TTBR0_ELx指向页表的根。ARMv8支持使用两个TTBR寄存器(TTBR0_ELxTTBR1_ELx)来支持不同范围的地址空间,通常:

  • TTBR0_ELx用于较低范围的虚拟地址。
  • TTBR1_ELx用于较高范围的虚拟地址。
    这种分割允许操作系统将用户空间和内核空间的映射分开管理,提高了安全性和效率。

编程示例

配置TTBR0_EL1通常涉及到计算页表基址,然后将其加载到寄存器中。以下是设置TTBR0_EL1的一个示例代码片段:

    // 假设x0寄存器包含页表的物理基址msr TTBR0_EL1, x0  // 将x0寄存器的值写入TTBR0_EL1// 其中,必须确保基址符合对齐要求

注意事项

  • 对齐要求TTBR0_ELx的BADDR字段必须正确对齐。对齐要求取决于页表的大小和页面大小。
  • ASID管理:在进行上下文切换时,ASID的管理是关键。它确保了TLB条目的有效性只在特定上下文中被保持。
  • 内存属性:与TTBR0_ELx配合使用的MAIR_ELx寄存器定义了页表及其映射的内存的属性,确保了正确的缓存策略被应用。

通过正确配置TTBR0_ELx(以及可能的TTBR1_ELx),系统可以有效地管理不同类型的内存访问,包括用户空间和内核空间的隔离,提高系统的安全性和效率。

MMU 使能寄存 SCTLR_EL3

对于MMU 的使能是通过 系统控制寄存器 SCTLR 来控制的,包括SCTLR_EL1、SCTLR_EL2和SCTLR_EL3,但并不是所有bit在EL1都可用。

详细内容见:【ARMv8 异常模型入门及渐进 2 – ARMv8/v9 寄存器 (SCR_ELn | ELR_ELn | ESR_ELn | CTR | HCR_ELn … 详细介绍】

判断当前 MMU是否打开

func Arm_MmuEnabledEL1_OR_EL2_OR_EL3 x1
1: mrs     x0, sctlr_el1        // Get control register EL1b       4f
2: mrs     x0, sctlr_el2        // Get control register EL2b       4f
3: mrs     x0, sctlr_el3        // Get control register EL3
4: and     x0, x0, #CTRL_M_BITret
endfunc Arm_MmuEnabled

打开MMU 函数

func Arm_EnableMmuEL1_OR_EL2_OR_EL3 x1
1: mrs     x0, sctlr_el1       // Read System control register EL1b       4f
2: mrs     x0, sctlr_el2       // Read System control register EL2b       4f
3: mrs     x0, sctlr_el3       // Read System control register EL3
4: orr     x0, x0, #CTRL_M_BIT // Set MMU enable bitbic     x0, x0, #(0x1 << 19)    // WXN bit (writeable execute never)EL1_OR_EL2_OR_EL3 x1
1: tlbi    vmalle1dsb     nshisbmsr     sctlr_el1, x0       // Write backb       4f
2: tlbi    alle2dsb     nshisbmsr     sctlr_el2, x0       // Write backb       4f
3: tlbi    alle3dsb     nshisbmsr     sctlr_el3, x0       // Write back
4: isbret
endfunc Arm_EnableMmu

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

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

相关文章

idea Pycharm Webstorm 2024年 最新版 永久使用2099年教程 附激活码亲测可用

idea Pycharm Webstorm 2024年 最新版 永久使用2099年教程 附激活码亲测可用 链接&#xff1a; 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com)&#xff08;这是官网的&#xff09; 下载 安装 1.双击idea的安装包&#xff0c;点击next 选择创建桌面快捷…

深入剖析时序Prophet模型:工作原理与源码解析|得物技术

随着得物业务的快速发展&#xff0c;积累了大量的时序数据&#xff0c;这些数据对精细化运营&#xff0c;提升效率、降低成本有着重要作用。在得物的时序数据挖掘场景中&#xff0c;时序预测Prophet模型使用频繁&#xff0c;本文对Prophet的原理和源码进行深入分析&#xff0c;…

边缘计算网关:企业数字化转型的重要支撑-天拓四方

在数字化浪潮席卷全球的今天&#xff0c;企业对于数据处理和传输的需求日益增强。然而&#xff0c;传统的数据处理模式往往依赖于中心化的数据中心&#xff0c;这种方式在处理大量数据时存在延迟高、成本高、安全性差等问题。数据量的激增和实时性要求的提高&#xff0c;使得传…

让AI给你写代码(9.3):一点改进,支持扩展本地知识库

改进目标&#xff0c;当输入提示问题后&#xff0c;能匹配到本地知识库的需求&#xff0c;然后AI按匹配到的需求给出代码并进行自动测试&#xff1b; 如果无法匹配到本地需求&#xff0c;可以直接输入生成逻辑&#xff0c;再由AI生成&#xff0c;然后支持用户把新需求插入本地库…

XML概述、格式、解析-WEB

XML概述 XML&#xff08;Extensible Markup Language&#xff09; 可扩展的标识语言 数据传输的一种格式 树形结构&#xff08;节点&#xff09; 优点 解析的更快 : 使用标签语言&#xff0c;能够很快定位 占用空间小 : 纯文本格式 可读性强 : 带有名字的标签我们都很喜欢 跨平…

MathType7.9最新免费注册机注册码激活码分享

MathType作为一个强大的数学公式编辑器&#xff0c;广泛用于教育、科研和出版领域。它支持多种文档格式和数学符号&#xff0c;是撰写科技文档不可或缺的工具。对于一些个人用户和小型机构来说&#xff0c;正版软件的高昂价格可能是一个负担。因此&#xff0c;寻找合法途径下的…

Windows 10 以上版本用久了应该重新安装还是重置呢?

今天明月工作电脑的 Windows 10 因为安装过太多软件和使用太久了的缘故造成网络总是很不稳定&#xff0c;总是出现一些莫名其妙的问题&#xff0c;实在是懒得去查找和排错了&#xff0c;就想着干脆推到重来吧&#xff0c;这样性能表现还会提升不少&#xff0c;并且可以一次性的…

向量化:机器学习中的效率加速器与数据桥梁

在机器学习领域的广袤天地中&#xff0c;向量化技术以其独特的魅力&#xff0c;为数据处理和模型训练注入了强大的动力。本文将深入探讨向量化在机器学习领域中的体现&#xff0c;剖析其如何助力模型实现高效的数据处理和精确的结果预测&#xff0c;并通过丰富的案例和详尽的数…

容器中运行ping提示bash: ping: command not found【笔记】

容器中运行ping提示bash: ping: command not found 原因是容器中没有安装ping命令 在容器中安装ping命令&#xff0c;可以使用以下命令&#xff1a; 对于基于Debian/Ubuntu的容器&#xff0c;使用以下命令&#xff1a; apt-get update apt-get install -y iputils-ping对于基…

Nginx在线部署和离线部署方式

Nginx 有两种安装方式: 1)在线安装的方式 1.添加Nginx 到yum源 sudo rpm -Uvh <http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm> 2.安装Nginx,直接使用yum方式 yum install -y nginx 3.启动nginx,刚安装的nginx不…

一图读懂:Flink CDC如何流式写入Paimon?

一图读懂&#xff1a;Flink CDC如何流式写入Paimon&#xff1f; 以Mysql CDC至Paimon为例 整体架构 MySQL CDC SourceSnapshotReader读取快照全量数据&#xff0c;BinlogReader读取增量数据。 paimon sink 实现桶级别的写入&#xff0c;compactManager实现异步compaction co…

第六讲:AD、DA的工作原理及实现、运放电路

DA 数模转换器 (DAC) 数模转换器&#xff08;Digital-to-Analog Converter&#xff0c;简称DAC&#xff09;是一种将数字信号转换为模拟信号的电子装置。DAC在各种电子设备中广泛应用&#xff0c;如音频设备、通信系统、测量设备和控制系统中。以下是DAC的主要概念和应用。…

Windows下从源码编译ONNX Runtime

前言&#xff1a;作者在做深度学习模型部署过程中&#xff0c;遇到一些算子问题&#xff0c;需要在ONNX Runtime平台上实现一些自定义算子&#xff0c;在此过程中&#xff0c;onnxruntime官方给的现成的库缺少一些必要文件&#xff0c;遂需要下载onnxruntime源码并进行编译。 …

调用万维易源API生成AI艺术二维码

目录 1. 作者介绍2. 艺术二维码2.1 艺术二维码的作用2.2 艺术二维码的应用场景2.3调用万维易源API生成AI艺术二维码 3. 实验过程3.1算法流程3.2完整代码3.3测试结果 1. 作者介绍 韩阳&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2023级研究生 研究方向&am…

两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析-文献精读20

Characterization of two O-methyltransferases involved in the biosynthesis of O-methylated catechins in tea plant 两种参与茶树O-甲基化儿茶素生物合成的O-甲基转移酶的特征分析 茶树三维基因组-文献精读19 比较转录组分析揭示了116种山茶属(Camellia)植物的深层系统…

设计模式23——状态模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 状态模式&#xff08;State&am…

《幸福》期刊杂志投稿发表

《幸福》杂志是由国家新闻出版总署批准&#xff0c;武汉出版社主管&#xff0c;武汉市妇联和武汉出版社联合主办&#xff0c;面向全国发行的人文社科综合期刊。办刊宗旨&#xff1a;宣传普及科学知识及科学方法的研究&#xff1b;倡导新型的人际关系&#xff0c;推介健康的家庭…

go语言进阶 init() 函数

go 语言包 在一个项目中通常我们需要引入第三方包&#xff0c;我们来看下 当我们导入一个包的时候 发生了什么&#xff1a; 首先我们先详细介绍下两个函数&#xff1a; init(), main() 是 go 语言中的保留函数。我们可以在源码中 定义 init()函数&#xff0c; 此函数会在包导入…

iPhone录音的m4a格式音频文件怎么转成MP3格式?

在日常工作生活中&#xff0c;我们有时会用电脑或手机录音&#xff0c;比如iPhone录音的M4A格式音频&#xff0c;要上传至某些软件或者平台使用&#xff0c;但是有时这些平台或者软件对音频格式有要求&#xff0c;比如有的就只能上传mp3格式的文件。 这个时候我们就需要先将音频…

基础IO(上)

前言 文件 内容 属性 所有对文件的操作就是对内容操作和对属性操作。内容是数据&#xff0c;属性也是数据。存储文件&#xff0c;必须既存储内容又存储数据。创建文件默认就是在磁盘中的。我们要访问一个文件的时候&#xff0c;都是要先把这个文件打开的。访问文件的本质就是…