ARMv8/Armv9架构中shareable属性的介绍

快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈

在这里插入图片描述

思考:在页表的Descriptors中的Lower attributes中有一组shareable属性位, 在页表的TCR_EL1寄存器中有一组shareable属性位,在mair_el1寄存器属性编码中,也有Inner和Outer相关的设置,这三者有啥区别呢?


在页表的Descriptors中的Lower attributes中有一个SH属性位

在这里插入图片描述
在页表的TCR_EL1寄存器中有一个SH属性位

在这里插入图片描述
在mair_el1寄存器属性编码中,也有Inner和Outer相关的设置
在这里插入图片描述

以上三个域段有啥区别呢? 总结如下:

Mair_elx属性位的编码表示,Inner表示配置inner范围内cache的缓存策略,Outer表示配置outer范围内的缓存策略。
如果TCR_EL1.DS = 0, 那么shareable属性使用页表中的SH属性值,如果TCR_EL1.DS = 1,则shareable属性使用TCR_EL1寄存器中的SH属性值。
使用页表项中的属性值,颗粒度更小一些,使用TCR_EL1中的属性值,简直没啥颗粒度。大多数操作系统中还是使用的前者,即使TCR_EL1.DS = 0


最后

如果您已经订阅此付费专栏,请务必加我微信(coding_the_world),备注"姓名+职业方向+ARM专栏",我拉您如ARMv8/ARMv9讨论群。
也可以从下述链接找到群号扫码进入:
https://www.processon.com/view/link/641321133524617475ff9b8a

### 内存 NORMAL NC 属性与 normal 属性的区别及作用 #### 正常内存(Normal Memory) 正常内存在 ARM 架构下具有多种访问属性,这些属性通过 MAIR_EL1 系统寄存器来定义。对于 Normal 类型的内存,可以进一步细分为不同的子类别,其中包括 Inner Shareable 和 Outer Shareable 访问模式以及缓存策略的选择。 - **可缓存性**:支持写回(Write Back)、写穿透(Write Through)或不缓存(Non-cacheable)。这种灵活性允许操作系统针对不同应用场景优化性能表现[^1]。 - **共享特性**:能够被多个处理器核心视为一致视图,在多核环境中非常重要。 ```assembly // 设置MAIR_EL1寄存器以配置Normal类型的内存属性 mrs x0, mair_el1 // 读取当前设置到X0寄存器 orr x0, x0, #(0x44 << 0) // 将第0个条目设为Device nGnRnE msr mair_el1, x0 // 更新MAIR_EL1寄存器 isb // 同步指令流屏障确保更改生效 ``` #### Normal Non-Cacheable (NC) 当提到 `Normal NC` 或者称为不可缓存的正常内存时,则特指那些虽然属于 Normal 范畴但是明确禁止使用任何级别的硬件缓存机制来进行加速操作的对象。这类设定通常用于特定场景: - **设备通信接口**:某些外设可能依赖于精确的时间序列或者直接映射地址空间交互,此时启用缓存反而可能导致数据一致性问题甚至功能失效。 - **调试目的**:为了便于追踪程序行为而不受高速缓冲影响,开发者可能会选择将部分代码段标记为此种方式执行。 综上所述,尽管两者都归属于广义上的 “normal”,但具体实现细节却有着本质差异——前者提供了丰富的选项以便充分利用现代 CPU 缓存体系结构的优势;后者则完全绕过了这一层抽象从而保证了绝对意义上的即时性和准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arm精选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值