一文讲解ARMv8内存属性与类型(Memory types and attributes)简介

news2024/11/25 4:26:47

ARMv8中将内存分为两种类型:Normal memory和Device memory,Normal memory适用于系统中的大部分内存,而Device memory则适用于外设所使用的内存。

1. Normal Memory

Normal memory类型属性适用于系统中的大多数内存。它表示架构允许硬件对这些位置执行推测数据读取访问(Speculative data read accesses),而不管这些位置的访问权限如何。为了确保访问Normal memory是的顺序性,有必要使用内存屏障指令:DMB 。

1.1 Shareable Normal Memory

一个Normal 内存地址可以具有以下一种 Shareability 属性:

Inner Shareable, 适用于Inner Inner Shareable shareability 区域。

Outer Shareable, 适用于Inner Shareable and the Outer Shareable shareability 区域。

Non-shareable.

1.1.1 Inner Shareable, and Outer Shareable属性

ARM 架构将系统抽象成一系列 Inner和Outer 可共享属性区域。

每个Inner共享域包含一组观察者(observers),这些观察者对于该组中的每个成员都是数据一致的,用于使用该组中的任何成员所创建的内部共享属性(Inner Shareable attribute)进行数据访问。

每个Outer共享域包含一组观察者,这些观察者对于该组的每个成员都是数据一致的,用于使用该组的任何成员所创建的外部共享属性(Outer Shareable attribute)进行数据访问。

同样具有以下属性:

每个观察者只是一个内部共享域的成员。

每个观察者只能是单个外部共享域的成员。

内部可共享域中的所有观察者总是同一外部可共享域的成员。

这意味着内部共享性域是外部共享性域的一个子集,尽管它不需要是一个合适的子集。

因为对Non-cacheable位置的所有数据访问,对所有观察者来说都是数据一致的,所以Non-cacheable位置总是被视为外部共享的(Outer Shareable)。内部共享域预期是由单个hypervisor或操作系统控制的PE的集合。

如果一个系统中存在两个处理器簇(cluster),则必须保证:

在每个簇中,处理器的data caches和unified caches对所有带有Inner Shareable属性的内存位置的数据访问,均是透明的。

然而,在两个簇之间,如果仅仅是Inner Shareable属性,caches在数据访问中不需被要求保持一致性。如果是Outer Shareable属性,则要求保持数据一致性。

在这样一个系统中,对于Inner Shareable 属性,每个cluster处于不同的shareability 区域,但是对于Outer Shareable属性,子系统中的所有组件均在同一个shareability区域。

一个系统可能实现两个这样的子系统,如果其中一个子系统的data cache和unified cache均对其他子系统中访问不透明,那么这个系统就有两个Outer shareable 区域。

对于可共享的普通内存(shareable Normal memory),Load-Exclusive和Store-Exclusive指令考虑了同一共享域中多个观察者(多个core)访问的可能性。

1.2 Non-shareable Normal memory

对于Normal 内存区域,不可共享的normal内存是一块只能被单个CPU访问的Normal内存。Non-shareable的Normal内存不要求硬件保证多个观察者数据访问的一致性,除非该内存是不可缓存的(Non-cacheable)。

对于Non-shareable内存,如果其他观察者共享这个内存系统,软件必须使用缓存维护相关指令,来保证在多个观察者之间数据通信的缓存一致性问题。此外也需要额外的内存屏障操作来保证内存的处理顺序。

此外,对于Non-shareable内存,是否支持Load-Exclusive和Store-Exclusive指令中考虑了多个观察者访问的可能性,这个由具体的实现定义IMPLEMENTATION DEFINED。

1.3 Cacheability attributes for Normal memory

除了Outer Shareable, Inner Shareable 和 Non-shareable属性外,每个Normal 内存还被分配了一个缓存属性:

Write-Through Cacheable.Write-Back Cacheable.

Non-cacheable.

缓存属性为位于内存区域共享域之外的观察者提供了一种一致性控制机制。在某些情况下,与使用硬件一致性机制或使用缓存维护的程序相比,使用Write-Through cache或non -cacheable区域可能提供更好的机制来控制一致性。为此,架构要求non -cacheable或Write-Through缓存内存具有以下属性:

观察者访问某一级缓存内的内存系统时,对该级缓存的Write-Through cache或non -cacheable的内存位置的完整写入,对于所有访问该一级缓存外的内存系统的观察者来说都是可见的,而不需要显式的缓存维护。

由访问某个level cache之外的内存系统的观察者,所完成的对该级别cache的Non-cacheable

的内存位置的写入,对于访问该级cache内部的内存系统的所有观察者来说都是可见的,而不需要显式的缓存维护。

对于Non-cacheable的普通内存的访问,DMB指令在对单个外设或IMPLEMENTATION DEFINED大小的内存块的所有访问上引入一个Barrier-ordered-before关系。

对于普通内存,Arm架构提供了缓存属性,这些属性是为缓存的两个概念级别(内部缓存和外部缓存,the inner and the outer cache)独立定义的。这些概念级缓存和实现的物理级缓存之间的关系是IMPLEMENTATION DEFINED的,并且可以区别于内部和外部共享域之间的边界,但是:

Inner是指最内层的缓存,即最接近PE的缓存,并且总是包括最低级别的缓存。

由Inner缓存属性控制的缓存不能位于由Outer缓存属性控制的缓存之外。

在具体的实现中可能没有outer 缓存。比如有L1,L2, L3的三级缓存架构中,三个缓存可能都是inner缓存,而不存在outer缓存。也可以是L1是inner缓存,L2和L3是outer缓存。

 资料直通车:Linux内核源码技术学习路线+视频教程内核源码

学习直通车:Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈

2. Device Memory

Device内存类型属性定义了内存位置,其中对该位置的访问可能导致副作用,或者加载返回的值可能根据执行的加载数量而变化。通常,Device内存属性用于内存映射的外设(memory-mapped peripherals)和类似的位置。

device内存区域通常是给一些外设,比如USB uart之类的模块用的,首先是non-cacheable的,也就是不能走cache,直接访问内存,数据只存在内存中,其他地方没有备份,这样可以保证数据的唯一性,准确性。其次,外设的内存交互一般对时间(timing)的要求较高,所以也需要在有限的时间内完成读写操作。还有就是除了不走cache之外,访问device 内存可能也没有其他的内存访问上的优化,比如推测性访问。总而言之,就是给外设用的内存属性,外设的内存交互需要满足:及时,高效,准确:

不允许对具有任何Device memory属性的任何内存位置进行推测性数据访问(Speculative data accesses)。这意味着对任何Device内存类型的每个内存访问都必须是由程序的简单顺序执行生成的。

对任何Device memory类型的内存位置的写入在有限时间内完成。

如果从Device memory类型的内存位置读取的返回值发生了变化,而观察者没有显式的内存写入影响,则该变化也必须在有限时间内对系统中的所有观察者进行全局观察。这样的更改可能发生在保存状态信息的外设(peripheral location that holds status information)。

对于系统中的所有观察者来说,对Device memory位置的数据访问都是一致的,并相应地被视为可外部共享的(Outer Shareable)。

具有任何Device memory属性的内存位置都不能分配到缓存中。

对于任何Device memory类型的访问,使用DMB指令,在对单个外设或指定大小的内存块的所有访问上引入一个Barrier-ordered-before关系。

如果内存位置不能支持未对齐的内存访问(unaligned memory accesses),那么对该内存位置的未对齐访问将在转换的第一阶段生成对齐错误(Alignment fault),该转换将该位置定义为Device。

硬件不会阻止从具有任何Device memory属性的内存位置进行推测性的指令获取,除非该内存位置也被标记为所有异常级别的execute-never。

原文作者:Arm精选

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

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

相关文章

《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛

4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…

湖北建筑行业建安C证交安C证水安C证报考介绍

湖北建筑行业建安C证交安C证水安C证报考介绍 湖北三类人员分为建设厅安全员C证、交通厅安全员C证、水利厅安全员C证,对应着建筑施工行业、公路工程行业、建筑水利行业等等。 湖北建设厅安全员C证(建安C) 湖北建筑安管考核管理系统-湖北建安…

JUC相关面试题

👏作者简介:大家好,我是爱发博客的嗯哼,爱好Java的小菜鸟 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦 📝社区论坛:希望大家能加入社区共同进步…

亲测好用-obsidian无法打开插件库安装或更新的解决办法-结合FastGithub

写在前面 经过半年左右时间的使用情况验证该方案稳定可靠。 方案:插件“Plugin Proxy” 软件“FastGithub” 效果: 插件“Plugin Proxy” 下载地址: https://github.com/gslnzfq/obsidian-proxy-server 插件安装: 插件设置为…

虚拟人三维动画宣传片案例分享 | 广州“五羊”城市文化IP商业体裸眼3D广告影片

随着时代的发展元宇宙的助推,裸眼3D形式的宣传方式逐渐出现在大众眼前。以数字人IP的3D立体效果吸引大众目光,让其驻足拍照、录视频分享至社交平台,为企业品牌带来高频传播价值。 近日,广州“五羊”城市文化IP裸眼3D广告宣传片在广…

设计模式解析之模板方法模式:设计灵活可扩展的算法框架

目录 1. 引言2. 概要2.1 概念2.2 结构2.3 类图2.4 工作流程 3. 应用场景3.1 适用情况:3.2 常见例子: 4. 代码衍化过程初版:甲乙学生都抄试卷第二版:提炼代码第三版:抽象出算法骨架第四版:模板方法变化过程总…

视频转gif的几个方法

视频转gif的软件,视频转gif的几个方法~什么是gif图?其实简单一点来说就是一张会动的图片,gif既有图片的属性,也具有视频的特点,因为严格来说gif属于一直图片文件的特殊,但是它的展现方式又和视频非常的像。…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(二)

文章目录 一、SqueezeNet二、Inception-v3三、Visual Geometry Group 19 Layer CNN四、MobileNetV1五、Data-efficient Image Transformer六、MobileNetV3七、self-DIstillation with NO labels(DINO)八、MLP-Mixer九、WideResNet十、Darknet-19十一、HR…

普通项目(java项目)使用lombok报错

java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment. 解决方…

【ROS】机器人使用Nomachine进行远程控制

官网:NoMachine - Free Remote Desktop for Everybody 支持的系统: WindowsMacLinux 树莓派其他ARM板IOSAndroid 由于网速问题,可以使用我下载好的:(8.8.1_1) 链接:https://pan.baidu.com/s/…

CSS 修改el-calendar的样式,自定义样式

需求&#xff1a;自定义elementui的日历的样式&#xff1b;给符合条件的时间展示红点。 elementui的原始样式&#xff1a; 目标样式&#xff1a; 代码实现&#xff1a; html: <el-calendar v-model"calendarValue"><template slot"dateCell" …

AI人工智能时代: 大一新生如何入手IT行业?

AI人工智能时代: 大一新生如何入手IT行业? AI人工智能时代: 大一新生如何入手IT行业?引言1. 了解IT行业的基础1.1 什么是IT&#xff1f;1.2 AI是如何改变IT行业的&#xff1f; 2. 如何选择合适的编程语言2.1 常见的编程语言有哪些&#xff1f;2.2 如何选择&#xff1f; 3. 制…

OPCEnum作用OPC常见通讯问题

目录 1 OPCEnum作用 1.1 检索server列表 1.2 检索失败原因 1.3 是否可以没有OPCEnum 2 OPC通讯常见问题 2.1 不能浏览OPCServer列表 2.2不能连接远程OPC Server 2.3 数据显示Bad 2.4 OPC通讯错误码 1 OPCEnum作用 你知道OPCEnum有什么用吗&#xff1f;看完本文你就对O…

Web安全(文件上传的漏洞)

文件上传漏洞和危害 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器上&#xff0c;当开发者没有对该文件进行合理的校验及处理的时候&#xff0c;很有可能让程序执行这个上传文件导致安全漏洞。大部分网站都会有文件上传的功能&#xff0c;例如头像、图片、视频等…

如何从Docker镜像中提取恶意文件

当发生容器安全事件时&#xff0c;需要从容器或镜像中提取恶意文件进行分析和处理。 本文主要介绍3种常见的方法&#xff1a; (1) 从运行的容器中复制文件 首先&#xff0c;需要从镜像运行启动一个容器&#xff0c;然后&#xff0c;使用docker cp命令从容器中提取文件到宿主机。…

Flutter——启动页白屏的优化

flutter启动页白屏的优化&#xff1a;使用图片替代白屏 结构图 核心的代码如上图&#xff0c;修改两个launch_background.xml里的代码为&#xff1a; <item><bitmapandroid:gravity"center"android:src"mipmap/ic_launcher" /></item>…

如何使用极狐GitLab 支持 ISO 27001 合规

目录 组织控制 技术控制 了解更多 本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Joseph Longo 译者&#xff1a;武让 极狐GitLab 高级解决方案架构师 作为一体化平台&#xff0c;通过极狐GitLab 可以很容易实现 DevSecOps 全生命周期管理。极狐GitLab 使开发人员能…

numpy笔记:广播应用:实现一个对比学习的loss function

论文笔记&#xff1a;SUPERVISED CONTRASTIVE REGRESSION_UQI-LIUWJ的博客-CSDN博客的loss function 出于简单考虑&#xff0c;我们令vy&#xff0c;同时sim就是两个向量的内积&#xff0c;d是两个向量逐元素差的绝对值之和 1 数据 import numpy as npanp.array([[1,3,4],[2,…

点评项目核心内容

目录 拦截器设置 集群的session共享问题 基于redis实现共享session登录 创建bean对象技巧 什么是缓存 使用缓存来处理对象 使用String类型缓存来处理集合 缓存更新策略 主动更新策略 缓存穿透 空串""和null的区别 缓存null值解决穿透问题 缓存雪崩 缓存击穿…

二刷力扣--字符串

字符串 摘自Python文档-标准库&#xff1a; 在Python中&#xff0c; 字符串是由 Unicode 码位构成的不可变序列。 由于不存在单独的“字符”类型&#xff0c;对字符串做索引操作将产生一个长度为 1 的字符串。 也就是说&#xff0c;对于一个非空字符串 s, s[0] s[0:1]。 不存…