DMB: Data memory barrier
理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示)

core 0 core 1
Write A; Load B;
Write B; Load B;

这里core0在执行两个指令,写A B两个值的时候,可能会发生乱序也可能Write A时发生Cache Miss,那么就会导致在cache中 A的最新值更新慢于B的最新值。于是在core1中的指令Load B就会拿到新值,而Load A 就会拿到旧值。如果A与B有相互关系的话,便可能产生死锁等问题。这里有一个典型的例子:https://lkml.org/lkml/2012/7/13/123

于是,就有了下面的解决方法:

core 0 core 1
Write A Load B
DMB; Load A
Write B

在core0所执行的两条指令之间加入一个DMB. 这样,若core1在Load B时,拿到了最新值。那么Load A 也一定拿到了最新值。这就是DMB的作用:DMB前面的LOAD/STORE读写的最新值的acknowledgement在时间上一定先于DMB之后的指令。

SB 和DMB容易混淆。他们的区别在于:DMB可以继续执行之后的指令,只要这条指令不是内存访问指令。而DSB不管它后面的什么指令,都会强迫CPU等待它之前的指令执行完毕。其实在很多处理器设计的时候,DMB和DSB没有区别(DMB完成和DSB同样的功能)。他们以及ISB在arm reference中的解释如下[1]:

A Data Synchronization Barrier (DSB) completes when all instructions before this instruction complete.
A Data Memory Barrier (DMB) ensures that all explicit memory accesses before the DMB instruction complete before any explicit memory accesses after the DMB instruction start.
An Instruction Synchronization Barrier (ISB) flushes the pipeline in the processor, so that all instructions following the ISB are fetched from cache or memory, after the ISB has been completed.
ISB不仅做了DSB所做的事情,还将流水线清空[2]。于是他们的重量级排序可以是:ISB>DSB>DMB

DMB DSB ISB 简介相关推荐

  1. ARM指令之精髓DMB,DSB,ISB指令

    4.3.5 汇编语言:指令隔离(barrier)指令和存储器隔离指令 CM3 中的另一股新鲜空气是一系列的隔离指令(亦可以译成"屏障"."路障",可互换使用-- ...

  2. 一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障

    最近工作中遇到一个问题,大致描述一下: 我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000 ...

  3. DMB DSB和ISB区别

    DMB: Data memory barrier 理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示) core 0 core 1 Write A; Write ...

  4. 【ARM Cache 入门及渐进五--内存屏障ISB/DSB/DMB】

    文章目录 Cache 之内存屏障指令 1.1 内存屏障基本规则 1.2 DMB(数据存储屏障) 1.2.1 DMB 使用场景 1.3 DSB(数据同步屏障) 1.3.1 DSB 使用背景 1.3.2 ...

  5. Linux并发与同步专题 (1)原子操作和内存屏障

    关键词:. <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Linux并发与同步专题 (3) 信号量> ...

  6. [ARM-assembly]-ARMv8-A64指令集总结和学习

    ★★★ 个人博客导读首页-点击此处 ★★★ 文章目录 1.一个简单的aarch64架构图 2.A64指令集的特点: 3.跳转指令 (1).条件跳转指令 (2).无条件跳转label指令 (3).无条件 ...

  7. MPU:鸿蒙轻内核的任务栈的溢出检察官

    摘要:MPU(Memory Protection Unit,内存保护单元)把内存映射为一系列内存区域,定义这些内存区域的维洲,大小,访问权限和内存熟悉信息. 本文分享自华为云社区<鸿蒙轻内核M核 ...

  8. ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory order

    1.前言 2.基本概念 Observer 可以发起对memory read/write访问的都是observer; Observability 是一种观察能力,通过read可以感知到别的observe ...

  9. 内存模型 linux,内存模型 - STM32F4 编程手册学习_Linux编程_Linux公社-Linux系统门户网站...

    STM32F4编程手册学习2_内存模型 1. 内存映射 MCU将资源映射到一段固定的4GB可寻址内存上,如下图所示. 内存映射将内存分为几块区域,每一块区域都有一个定义的内存类型,一些区域还有一些附加 ...

最新文章

  1. 22、输入和输出重定向,管道,命令连接符,命令替换符
  2. scala 获取数组中元素_从Scala中的元素列表中获取随机元素
  3. thymeleaf select_SpringBoot整合thymeleaf简单的CRUD
  4. Arm学习总结之 32位和64位寄存器
  5. android实例教程_活动之间的Android意向处理示例教程
  6. JQuery原生js ——实现剪刀石头布小游戏
  7. 酒店管理系统数据库设计说明书
  8. Android-蓝牙AVRCP功能实现【转】
  9. 计算机毕业设计java+SSM网上购物超市网站(源码+系统+mysql数据库+Lw文档)
  10. 华为认证hcia含金量_华为hcna认证含金量高吗?
  11. 巴斯勒相机的ip掩码_相机IP和带宽设置
  12. vue项目结构目录简介
  13. 易基因|深度综述:m6A RNA甲基化在大脑发育和疾病中的表观转录调控作用
  14. C语言:封装图形面积公式
  15. 关于Floyd算法 和 Dijkstra算法
  16. ChinaSkills-网络系统管理(2021年全国职业院校技能大赛A-1 模块 A:Linux 环境 评分标准 )
  17. PTG DAO 生态
  18. VASP计算弹性常数
  19. CS5518设计MIPI转LVDS转换方案/MIPI转LVDS方案芯片
  20. javascript鼠标拖尾特效

热门文章

  1. power计算机英语,十万火急求解计算机英语!AC power lineAND gateAND-OR circuitXOR gateunrel...
  2. linux线程并不真正并行,Linux系统编程学习札记(十二)线程1
  3. Excel:Excel使用技巧经验总结之(利用Excel自带功能统计各个字段不同类别及其个数并进行图表可视化+非编程实现)图文教程之详细攻略
  4. Paper:《How far are we from solving the 2D 3D Face Alignment problem? 》解读与翻译
  5. SQLServer:GUI方式、SQL语句两种方式建立视图和GUI方式设置主键、约束等
  6. MySQL用source命令导入不记入binlog中【原创】
  7. LeetCode:跳跃游戏【55】
  8. HDU-3507Print Article 斜率优化DP
  9. tcl脚本学习十一:proc应用 (带默认参数)
  10. 控制反转(Ioc)和依赖注入(DI)