ARM指令之精髓DMB,DSB,ISB指令
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指令相关推荐
- DMB DSB ISB 简介
DMB: Data memory barrier 理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示) core 0 core 1 Write A; Load ...
- 一、barrier指令DSB,DMB,ISB,fence——内存屏障,指令屏障
最近工作中遇到一个问题,大致描述一下: 我们SOC用的arm cortex m7内核,在设计时设计人员图方便,将SPI controller的寄存器(即原本应该是APB空间)放在了0x60000000 ...
- DMB DSB和ISB区别
DMB: Data memory barrier 理解DMB指令,先看下面例子,在core 0和core1上同时跑两个不同的指令(如下表所示) core 0 core 1 Write A; Write ...
- 【Android 逆向】函数拦截 ( GOT 表拦截 与 插桩拦截 | 插桩拦截简介 | 插桩拦截涉及的 ARM 和 x86 中的跳转指令 )
文章目录 一.GOT 表拦截与插桩拦截 二.插桩拦截简介 三.插桩拦截涉及的 ARM 和 x86 中的跳转指令 一.GOT 表拦截与插桩拦截 函数拦截有 222 种方式 : 使用 GOT 表进行函数拦 ...
- ARM指令寻址方式之: 内存访问指令寻址
4.2 内存访问指令寻址 根据内存访问指令的分类,内存访问指令的寻址方式可以分为以下几种. ① 字及无符号字节的Load/Store指令的寻址方式. ② 杂类Load/Store指令的寻址方式. ③ ...
- ARM指令详解之Load/Store指令
Load/Store指令 Load/Store指令用于寄存器和内存间数据的传送. Load 用于把内存中的数据装载到寄存器中. Store用于把寄存器中的数据存入内存. 该集合的指令使用频繁,在指令集 ...
- arm汇编lr pc b bl ret指令函数调用和返回gif动图演示
文章目录 pc 寄存器 lr寄存器 (x30) ret返回指令 bl 跳转指令,带返回 b 跳转,不带返回 pc 寄存器 pc保存着当前指令执行的地址,相当于win32汇编里的eip寄存器 lr寄存器 ...
- Debug的T命令在执行修改寄存器SS 的指令时,下一条指令也紧接着被执行。
为什么会这样呢?要想彻底说清楚这里面的来龙去脉,在这里还为时过早,因为这涉及我们在以后的课程中要深入研究的内容:中断机制,它是我们后半部分课程中的一个主题.现在我们只要知道这一点就可以了: Debug ...
- 未转变者空投指令服务器,未转变者空投指令 | 手游网游页游攻略大全
发布时间:2015-12-02 注意事项:(强烈推荐优先看一下) 1:难度为中等(有不全的地方,还请各位请见谅) 2:在本攻略中,"对空轻战车"指的是机枪式的那种战车." ...
最新文章
- SFB 项目经验-03-共存迁移-Lync 2013-TO-SFB 2015-完成
- html的选择器使用
- 小程序短视频项目———开发用户登录注册(一)
- element vue 纵向滑动条_【求助】vue element搭建的后台,侧边栏如何设置滚动条?...
- 【Python2】Keras_ResNet 在Cifar10数据集上分类,Flask框架部署目标检测模型
- 量化金融第一步获取市场数据 (Python Tushare)
- 关于链表的简单创建和遍历
- linux socket 面试题,面试题
- 计算机组成原理刘红玲,计算机组成原理/21世纪高等学校规划教材
- 怎样设计访谈提纲_服务设计简史
- mc服务器隐藏指令显示,服务器常用指令 搬运自Mc服主网
- latex入门到精通----IEEE模块为例
- ssis 列转换_SSIS包中的行采样转换和百分比采样转换
- 30 位互联网大佬,当年上了什么大学?
- 网站pv 和服务器数量,聊一聊PV和并发、以及计算web服务器的数量的方法
- 2022阿里巴巴全球数学竞赛 第4题 虎虎生威(盲盒问题、集卡问题)解决思路
- 唯众中职人工智能专业解决方案
- java雪崩_了解java架构之微服务架构—雪崩效应
- 【旅游类APP源码】开发者案例开源,走过路过不可错过!
- 记住这些单词各种编程学习起来会很简单
热门文章
- 什么是工业绝缘监测仪?工业绝缘监测仪应用范围-安科瑞黄安南
- 安科瑞GGF医用隔离电源柜,IT系统装设绝缘监测装置来监测系统的绝缘状况,各输出回路采用了具有短路保护功能的断路器
- yahoo军规的思考
- 美国价格指数api调用
- H.265(HEVC)解码片源测试序列,解码器下载
- 计算机图形学在线考试题,图形学模拟试题含答案.doc
- [A Beginner‘s Guide to Irrational Behavior][怪诞行为学]Week1:如何影响用户的决定?
- window查看端口以及关闭端口
- 最小二乘法实现C++
- 至少8位密码,包括大写、小写、数字、特殊字符中的三种即可!