4.3.5 汇编语言:指令隔离(barrier)指令和存储器隔离指令

CM3 中的另一股新鲜空气是一系列的隔离指令(亦可以译成“屏障”、“路障”,可互换使用——译者 注)。它们在一些结构比较复杂的存储器系统中是需要的(典型地用于流水线和写缓冲——译者注)。在 这类系统中,如果没有必要的隔离,会导致系统发生紊乱危象(race condition),(相当于数电中的“竞争 与冒险”——译者注).

举例来说,如果可以在运行时更改存储器的映射关系或者内存保护区的设置,(通过写 MPU 的寄存 器),就必须在更改之后立即补上一条 DSB 指令(数据同步指令)。因为对 MPU 的写操作很可能会被放 到一个写缓冲中。写缓冲是为了提高存储器的总体访问效率而设的,但它也有副作用,其中之一,就是 会导致写内存的指令被延迟几个周期执行,因此对存储器的设置不能即刻生效,这会导致紧临着的下一 条指令仍然使用旧的存储器设置——但程序员的本意显然是使用新的存储器设置。这种紊乱危象是后患 无穷的,常会破坏未知地址的数据,有时也会产生非法地址访问 fault。紊乱危象还有其它的表现形式, 后续章节会一一介绍。CM3 提供隔离指令族,就是要消灭这些紊乱危象(在有些讲解计算机体系体系结 构的书中,这类紊乱危象也被称为“存储器相关”——译注)。

CM3 中共有3 条隔离指令,如表4.27 所列

表4.27 隔离指令

指令名

功能描述

DMB

数据存储器隔离。DMB 指令保证: 仅当所有在它前面的存储器访问操作

都执行完毕后,才提交(commit)在它后面的存储器访问操作。

DSB

数据同步隔离。比 DMB 严格: 仅当所有在它前面的存储器访问操作

都执行完毕后,才执行在它后面的指令(亦即任何指令都要等待存储器访 问操作——译者注)

ISB

指令同步隔离。最严格:它会清洗流水线,以保证所有它前面的指令都执

行完毕之后,才执行它后面的指令。

DMB 在双口 RAM 以及多核架构的操作中很有用。如果 RAM 的访问是带缓冲的,并且写完之后

马上读,就必须让它“喘口气”——用 DMB 指令来隔离,以保证缓冲中的数据已经落实到 RAM 中。 DSB 比 DMB 更保险(当然也是有执行代价的),它是宁可错杀也不漏网——清空了写缓冲,使得任 何它后面的指令,不管要不要使用先前的存储器访问结果,通通等待访问完成。大虾们可以在有绝 对信心时使用 DMB,新手还是使用 DSB 比较保险。
同 DMB/DSB 相比,ISB 指令看起来似乎最强悍,但是却一身都是“愣劲”,不由分说就“动粗”。
不过它还有其它的用场——对于高级底层技巧:“自我更新”(self-mofifying)代码,非常有用。举例 来说,如果某个程序从下一条要执行的指令处更新了自己,但是先前的旧指令已经被预取到流水线 中去了,此时就必须清洗流水线,把旧版本的指令洗出去,再预取新版本的指令。因此,必须在被 更新代码段的前面使用 ISB,以保证旧的代码从流水线中被清洗出去,不再有机会执行(译者觉得 这种做法太工于技巧,有点“作秀”,现实编程中应该极少会用到,因此读者不必太钻它)。

ARM指令之精髓DMB,DSB,ISB指令相关推荐

  1. DMB DSB ISB 简介

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

  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. 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )

    文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...

  5. ARM指令寻址方式之: 内存访问指令寻址

    4.2  内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种. ① 字及无符号字节的Load/Store指令的寻址方式. ② 杂类Load/Store指令的寻址方式. ③ ...

  6. ARM指令详解之Load/Store指令

    Load/Store指令 Load/Store指令用于寄存器和内存间数据的传送. Load 用于把内存中的数据装载到寄存器中. Store用于把寄存器中的数据存入内存. 该集合的指令使用频繁,在指令集 ...

  7. arm汇编lr pc b bl ret指令函数调用和返回gif动图演示

    文章目录 pc 寄存器 lr寄存器 (x30) ret返回指令 bl 跳转指令,带返回 b 跳转,不带返回 pc 寄存器 pc保存着当前指令执行的地址,相当于win32汇编里的eip寄存器 lr寄存器 ...

  8. Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。

    为什么会这样呢?要想彻底说清楚这里面的来龙去脉,在这里还为时过早,因为这涉及我们在以后的课程中要深入研究的内容:中断机制,它是我们后半部分课程中的一个主题.现在我们只要知道这一点就可以了: Debug ...

  9. 未转变者空投指令服务器,未转变者空投指令 | 手游网游页游攻略大全

    发布时间:2015-12-02 注意事项:(强烈推荐优先看一下) 1:难度为中等(有不全的地方,还请各位请见谅) 2:在本攻略中,"对空轻战车"指的是机枪式的那种战车." ...

最新文章

  1. SFB 项目经验-03-共存迁移-Lync 2013-TO-SFB 2015-完成
  2. html的选择器使用
  3. 小程序短视频项目———开发用户登录注册(一)
  4. element vue 纵向滑动条_【求助】vue element搭建的后台,侧边栏如何设置滚动条?...
  5. 【Python2】Keras_ResNet 在Cifar10数据集上分类,Flask框架部署目标检测模型
  6. 量化金融第一步获取市场数据 (Python Tushare)
  7. 关于链表的简单创建和遍历
  8. linux socket 面试题,面试题
  9. 计算机组成原理刘红玲,计算机组成原理/21世纪高等学校规划教材
  10. 怎样设计访谈提纲_服务设计简史
  11. mc服务器隐藏指令显示,服务器常用指令 搬运自Mc服主网
  12. latex入门到精通----IEEE模块为例
  13. ssis 列转换_SSIS包中的行采样转换和百分比采样转换
  14. 30 位互联网大佬,当年上了什么大学?
  15. 网站pv 和服务器数量,聊一聊PV和并发、以及计算web服务器的数量的方法
  16. 2022阿里巴巴全球数学竞赛 第4题 虎虎生威(盲盒问题、集卡问题)解决思路
  17. 唯众中职人工智能专业解决方案
  18. java雪崩_了解java架构之微服务架构—雪崩效应
  19. 【旅游类APP源码】开发者案例开源,走过路过不可错过!
  20. 记住这些单词各种编程学习起来会很简单

热门文章

  1. 什么是工业绝缘监测仪?工业绝缘监测仪应用范围-安科瑞黄安南
  2. 安科瑞GGF医用隔离电源柜,IT系统装设绝缘监测装置来监测系统的绝缘状况,各输出回路采用了具有短路保护功能的断路器
  3. yahoo军规的思考
  4. 美国价格指数api调用
  5. H.265(HEVC)解码片源测试序列,解码器下载
  6. 计算机图形学在线考试题,图形学模拟试题含答案.doc
  7. [A Beginner‘s Guide to Irrational Behavior][怪诞行为学]Week1:如何影响用户的决定?
  8. window查看端口以及关闭端口
  9. 最小二乘法实现C++
  10. 至少8位密码,包括大写、小写、数字、特殊字符中的三种即可!