注:该文档是参考网上资料整理出来,以通俗的方式讲解,方便大家理解,如有不懂,可以私下讨论,共同进步。
1.屏蔽指令的介绍
1.1.屏蔽指令简介DMB :全称 Data Memory Barrier,仅当所有在它前面的存储器访问都执行完毕后,才执行它后面的存储器访问动作(注意只对存储器访问敏感);
DSB:全称Data Synchronous Barrier,比DMB严格:仅当所有在它前面的存储器访问都执行完毕后,才执行它在后面的指令(亦即任何指令都要等待) ;
ISB:全称 Instruction Synchronous Barrier,最严格: 清洗流水线,以保证所有它前面的指令都执行完毕之后,才执行它后面的指令。
DMB与DSB的区别:
DMB作用的范围比DSB小,DSB比DMB严格,DSB牺牲的性能比DMB大,DMB只对存储器访问的指令敏感,而DSB是对所有的指令都敏感,所以说它
宁可错杀也不漏网 ,对于新手来说更加保险,只有大虾才会使用DMB。
1.2.ARM官方文档介绍
数据内存屏障指令、数据同步屏障指令和指令同步屏障指令。
语法
DMB{cond} {option}
DSB{cond} {option}
ISB{cond} {option}
其中:
cond
是一个可选的条件代码(请参阅条件执行)。
option
对提示操作的可选限制。
用法
这些是提示指令。 是否实现这些指令是可选的。 只要其中任何一个指令未实现,则与 NOP 效果相同。
DMB
数据内存屏障可作为内存屏障使用。 它可确保会先检测到程序中位于 DMB 指令前的所有显式内存访问指令,然后再检测到程序中位于 DMB 指令后的显式内存访问指令。它不影响其他指令在处理器上的执行顺序。
option 的允许值为:
SY
完整的系统DMB 操作。 这是缺省情况,可以省略。
DSB
数据同步屏障是一种特殊类型的内存屏障。 只有当此指令执行完毕后,才会执行程序中位于此指令后的指令。 当满足以下条件时,此指令才会完成:
位于此指令前的所有显式内存访问均完成。
位于此指令前的所有缓存、跳转预测和 TLB 维护操作全部完成。
允许的值为:
SY
完整的系统 DSB 操作。 这是缺省情况,可以省略。
UN
只可完成于统一点的DSB 操作。
ST
存储完成后才可执行的DSB 操作。
UNST
只有当存储完成后才可执行的DSB 操作,并且只会完成于统一点。
ISB
指令同步屏障可刷新处理器中的管道,因此可确保在 ISB 指令完成后,才从高速缓存或内存中提取位于该指令后的其他所有指令。这可确保提取时间晚于 ISB 指令的指令能够检测到 ISB 指令执行前就已经执行的上下文更改操作的执行效果,例如更改ASID 或已完成的 TLB 维护操作,跳转预测维护操作以及对 CP15 寄存器所做的所有更改。
此外,ISB 指令可确保程序中位于其后的所有跳转指令总会被写入跳转预测逻辑,其写入上下文可确保 ISB 指令后的指令均可检测到这些跳转指令。这是指令流能够正确执行的前提条件。
option 的允许值为:
SY
完整的系统DMB 操作。 这是缺省情况,可以省略。
体系结构