ARM 架构的存储器模型

ARM 的存储器模型是一个相对复杂但设计精密的体系,它定义了处理器如何与内存进行交互,包括内存访问的顺序、可见性以及缓存行为等。这对于理解多核编程、并发控制和底层系统性能至关重要。

ARM 架构,特别是 ARMv8 及以后的版本,采用了一种称为 弱一致性内存模型(Weakly Ordered Memory Model) 的设计。

核心特征:弱一致性内存模型

与 x86 的 强一致性内存模型(Strongly Ordered Memory Model) 相比,ARM 的弱序模型有以下几个关键特点:

  1. 允许重排序:为了极致的性能,处理器和编译器可以对内存访问指令进行大量的重排序(Reordering),只要在单线程上下文中最终结果正确即可。

    • 写-写重排序:两个写操作可以以不同于程序顺序的顺序提交到内存。
    • 读-读重排序:两个读操作可以以不同的顺序执行。
    • 读-写重排序:读操作可能会被重排到写操作之前,写操作也可能会被重排到读操作之前。
    • 注意:存在数据依赖关系的操作(例如,先读地址 A,再向地址 A 写)不会被重排序,否则会破坏程序的正确性。
  2. 多核系统中的可见性:在一个核心上执行的内存写操作,不会立即被其他核心看到。写入的值会先存在于该核心的写缓冲区(Store Buffer)中,然后才异步地刷新到共享缓存和主内存中。这意味着,不同核心看待内存的“顺序”可能是不一致的。

为什么需要内存屏障?

由于存在重排序和可见性延迟,在多线程编程中,如果没有任何约束,程序的行为将是不可预测的。为了解决这个问题,ARM 提供了一组 内存屏障指令(Memory Barrier Instructions),让程序员和编译器能够强制约束内存访问的顺序和可见性。

内存屏障就像一道“栅栏”,确保在屏障之前的所有内存操作(在某种意义上)完成后,才执行屏障之后的内存操作。

ARMv8 架构主要提供了以下三种内存屏障指令:

  1. 数据存储屏障(Data Memory Barrier, DMB)

    • 作用:确保在 DMB 指令之前的所有内存访问(读和写)都完成后,才执行其之后的内存访问

    • 使用场景:主要用于保证对内存的访问顺序。例如,在更新一个数据结构指针之前,确保所有对数据结构本身的写入都已经完成(对其它核心可见)。

    • 举例

      STR X0, [X1]  ; 将数据写入数据结构(将寄存器 X0 中的值存储到以寄存器 X1 中的值为地址的内存位置)
      DMB ISH       ; 等待上面的写入对所有核心可见
      STR X1, [X2]  ; 更新指针,指向新的数据结构
      ; 如果没有 DMB,其他核心可能看到一个更新了的指针,但指向的却是旧数据
      
  2. 数据同步屏障(Data Synchronization Barrier, DSB)

    • 作用:比 DMB 更严格。它确保在 DSB 指令之前的所有内存访问高速缓存、分支预测、TLB 维护等所有指令都完成后,才执行其之后的任何指令(不仅仅是内存访问)。
    • 使用场景:当你需要确保内存操作完全完成后才能做下一件事时。例如,在配置完内存映射寄存器(如 MMU)后,必须使用 DSB 来确保配置生效,然后才能继续执行后续指令。
  3. 指令同步屏障(Instruction Synchronization Barrier, ISB)

    • 作用:它会刷新处理器的流水线(pipeline),确保在 ISB 之后的所有指令都从缓存或内存中重新预取。这意味着在 ISB 之前的所有上下文更改(如系统寄存器的修改)对后续指令完全可见。
    • 使用场景:在修改了会影响指令行为的系统控制寄存器(如 MMU、FPU 的设置)后,必须使用 ISB 来确保后续指令使用新的设置被执行。

简单类比

  • DMB:像是一个仓库管理员,确保所有货物(数据)都按顺序摆上货架(内存)后,才允许贴出新的库存清单(指针)。
  • DSB:不仅是管理员,他还要求所有记账、清点工作都完成后,才允许你离开仓库去做别的事。
  • ISB:是要求所有工人都忘掉旧的工作方式,重新阅读新的工作手册后再开始干活。

共享域(Shareability Domains)

ARM 架构还有一个重要的概念叫“共享域”,它定义了内存屏障操作的范围。在多集群(Multi-Cluster)设计中,并非所有核心都能直接看到彼此的内存操作。屏障指令可以指定其作用的域:

  • ISH:Inner Shareable Domain。最常见的选择,通常包括一个芯片上的所有核心。
  • NSH:Non-shareable。仅针对本处理器。
  • OSH:Outer Shareable Domain。包括可能不在同一个芯片上的处理器(如 big.LITTLE 集群之间)。
  • SY:Full System。包括所有组件,如 GPU、DMA 等。

例如,DMB ISH 表示屏障在“内部可共享域”内生效。

与高级语言的关系

作为应用程序开发者,你通常不会直接使用这些汇编指令。高级编程语言(如 C++11、Java)的并发原语(如 std::atomicvolatile (有特定语义时)、锁mutex)在编译时,编译器会根据目标架构(如 ARM)插入正确的内存屏障指令。

例如,在 C++ 中,std::atomic<int> 的存储(store)操作默认使用 memory_order_seq_cst 排序,编译器在 ARM 上会为其生成类似 DMB ISH 的指令来保证强顺序一致性。

总结

特性ARM (弱序模型)x86 (强序模型)
核心特点允许大量重排序以提升性能基本保持程序顺序,重排序较少
硬件要求需要显式使用内存屏障来保证顺序大部分情况下硬件自动保证顺序,屏障开销小
性能更高效,能更好地利用流水线和缓存相对更保守,但编程模型更简单
编程复杂性底层编程时需要开发者更深入地理解内存模型底层编程时心智负担更轻

记住关键点:ARM 为了功耗和性能优势,采用了弱一致性内存模型。这意味着在多核编程中,不能依赖指令的自然顺序来保证同步,必须正确使用内存屏障(或依赖高级语言中正确的同步原语)来强制内存访问的顺序和可见性,从而编写出正确的并发程序。

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

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

相关文章

机器学习-多层感知机MLP

线性方法->多层感知机&#xff08;MLP&#xff09; 一个全连接&#xff08;线性、dense&#xff09;层有参数W∈Rm∗nW\in\R^{m*n}W∈Rm∗n,b∈Rmb\in\R^mb∈Rm&#xff0c;其用于计算输出yWxb∈RmyWxb\in\R^myWxb∈Rm 线性回归&#xff1a;全连接层有1个输出softmax 回归&a…

PostgreSQL——并行查询

这里写目录标题一、并行查询相关自己置参数二、并行扫描2.1、并行顺序扫描2.2、并行索引扫描2.3、并行index-only扫描2.4、并行bitmap heap扫描三、并行聚合四、多表关联4.1、Nested loop多表关联4.2、Merge join多表关联4.3、Hash join多表关联了解 Oracle 的朋友应该知道 Ora…

智能体赋能金融多模态报告自动化生成:技术原理与实现流程全解析

在金融领域&#xff0c;研报作为决策参考的核心载体&#xff0c;其生成过程往往涉及海量数据采集、多维度分析及专业内容整合&#xff0c;传统人工制作模式不仅耗时耗力&#xff0c;还难以满足实时性与标准化需求。随着人工智能技术的发展&#xff0c;“智能体赋能的金融多模态…

uniapp和vue3项目中引入echarts 、lime-echart(微信小程序、H5等)

目录标题1、获取 lime-echart插件2、安装 echarts3、相关代码4、在线定制5、效果截图1、获取 lime-echart插件 https://gitee.com/liangei/lime-echart 将其中组件和静态资源分别放入当前项目对应的文件夹中&#xff1a; 2、安装 echarts npm install echarts --save具体查…

ZYNQ7020+AD9361裸机驱动验证

1. 程序编译验证 a. 下载源代码 首先需要从GitHub下载相应的源码&#xff0c;打开git bash&#xff0c;然后在mingwin中使用以下命令下载源码。 git clone --recursive https://github.com/MicroPhase/antsdr_standalone.git 注意&#xff1a;在下载源码的时候&#xff0c;使…

Grafana配置连接时候证书与mongosqld启动证书的关系

目录 证书角色说明 1. BI Connector 端的证书 (--sslPEMKeyFile) 2. Grafana 端的证书 (TLS/SSL Client Certificate & Key) 它们之间的关系 配置建议 情况一&#xff1a;只需要服务器验证&#xff08;最常见&#xff09; 情况二&#xff1a;需要双向SSL认证&#x…

解决HTML/JS开发中的常见问题与实用资源

在前端开发过程中&#xff0c;即使是经验丰富的开发者也会遇到各种小问题。本文将聚焦于两个常见问题的解决方案&#xff0c;并推荐一些国内可访问的优质源码学习网站&#xff0c;帮助开发者提升效率。 一、字符编码与乱码问题解决 在HTML和JavaScript开发中&#xff0c;字符编…

SQLI-labs[Part 2]

本篇为SQLI-labs的Write-Up的第二部分包含Level 23- Level 27Level 23 过滤注释符 字符注入拼接语句发现注释符没有生效 应该是被过滤了那只能通过拼接语句来除去后面的影响拼接?id1 or 11?id1%27%20or%20%271%27%271源码中最后的导致语句闭合 Level 24 字符二次注入成功登录…

宋红康 JVM 笔记 Day17|垃圾回收器

一、今日视频区间 P169-P203 二、一句话总结 GC分类与性能指标&#xff1b;不同的垃圾回收器概述&#xff1b;Serial回收器&#xff1a;串行回收&#xff1b;ParNew回收器&#xff1a;并行回收&#xff1b;Parallel回收器&#xff1a;吞吐量优先&#xff1b;CMS回收器&#xff…

[硬件电路-194]:NPN三极管、MOS-N, IGBT比较

NPN三极管、MOS-N&#xff08;N沟道MOS管&#xff09;和IGBT&#xff08;绝缘栅双极型晶体管&#xff09;在电子电路设计中各有其独特的应用场景和优势&#xff0c;以下从工作原理、特性、应用领域三个维度进行比较&#xff1a;工作原理NPN三极管&#xff1a;结构&#xff1a;由…

【代码随想录day 25】 力扣 46. 全排列

视频讲解&#xff1a;https://www.bilibili.com/video/BV19v4y1S79W/?vd_sourcea935eaede74a204ec74fd041b917810c 文档讲解&#xff1a;https://programmercarl.com/0046.%E5%85%A8%E6%8E%92%E5%88%97.html#%E6%80%9D%E8%B7%AF 力扣题目&#xff1a;https://leetcode.cn/prob…

指针(五)后半

1、 qsort 函数1.1、qsort 函数排列结构体在这里&#xff0c;我们创建结构体类型的数组&#xff0c;用于 qsort 函数的传参。#include<stdio.h> #include<stdlib.h> #include<string.h>struct Stu//创建结构体变量 {char name[30];int age; };struct Stu arr…

TDengine 特殊选择函数 MODE() 用户手册

MODE 函数用户手册 函数定义 MODE(expr)功能说明 MODE() 函数返回指定列中出现频率最高的值&#xff08;众数&#xff09;。如果有多个值具有相同的最高频率&#xff0c;系统会返回其中一个值。该函数会忽略 NULL 值。 算法原理 MODE 函数的计算过程如下&#xff1a; 数据…

智能外骨骼技术应用场景及价格可接受区间分析

一、引言 智能外骨骼机器人融合机械、人工智能和传感器技术,增强或恢复人体运动能力。2025年,该技术在医疗康复、工业生产、军事应用和消费市场快速普及。本文分析其应用场景、市场需求、典型产品、价格可接受区间及相关来源,探讨普及的关键因素。 二、主要应用场景及产品…

Vue模板中传递对象或数组时,避免直接使用字面量[]和{}

在 Vue 中&#xff0c;直接在模板中使用 [] 或 {} 作为 prop 值会导致子组件不必要的重新渲染&#xff0c;因为每次父组件渲染时都会创建新的引用。以下是解决方案和最佳实践&#xff1a; 1. 避免在模板中直接使用字面量 <!-- 避免这样写 --> <ChildComponent :items&…

【C++】list容器的模拟实现

目录 1. 节点(list_node) 的结构 2. 哨兵位头节点 3. list容器的成员变量 4. 插入/删除操作 4.1 插入操作&#xff08;insert&#xff09; 4.2 删除操作&#xff08;erase&#xff09; 5. 迭代器的实现 6. 不同迭代器和const容器的限制 7. 重载operator-> 8. 迭代器…

三大运营商eSIM手机业务开通加速

截至2025年9月11日&#xff0c;中国三大运营商eSIM手机业务开通情况呈现明显差异化&#xff1a;中国联通已率先支持eSIM手机业务&#xff0c;但仅限于特定城市和设备&#xff1b;中国移动和中国电信则处于"技术准备就绪&#xff0c;等待政策批复"阶段&#xff0c;预计…

基于SpringBoot的足球论坛系统+论文示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;用户管理、足球赛事、球员信息、推荐话题、帖子信息、周边商城、订单信息、系统管理等技术选型&#xff1a;SpringBoot&#xff0c;Vue等 测试环境&#xff1a;idea2024&#xff0c;jdk1.8&#xff0c;mys…

数据库中悲观锁小结

实际上&#xff0c;悲观并发控制实际上是“先取锁再访问”的保守策略&#xff0c;为数据处理的安全提供了保证。但是在效率方面&#xff0c;处理加锁的机制会让数据库产生额外的开销&#xff0c;还有增加产生死锁的机会&#xff1b;另外&#xff0c;在只读型事务处理中由于不会…

结构光三维重建原理详解(1)

1. 基本原理概述 结构光三维重建&#xff08;Structured Light 3D Reconstruction&#xff09;是一种主动式光学测量方法。其核心思想是&#xff1a; 向物体表面投射一组 已知的、编码好的光栅/条纹图案&#xff1b;使用一个或多个摄像机拍摄这些条纹在物体表面的变形情况&…