完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序在执行时的实际内存访问顺序和程序代码编写的访问顺序不一致,会导致内存乱序访问。
编译时,编译器优化导致内存乱序访问; 执行时,多个CPU间交互引起的内存乱序访问。 这些优化可能会导致实际执行代码与程序员的代码逻辑不符,导致一些错误的发生,为了保证内存访问的一致性,也是保证程序的正确性,使用内存屏障来保证内存的访问顺序。 ARM采用的是弱一致性内存模型,使用内存屏障将一致性问题交由程序员解决。内存屏障指令的基本原则如下: 所有在内存屏障指令之前的数据访问必须在内存屏障指令之前完成; 所有在内存屏障指令后面的数据访问必须等待内存屏障指令执行完; 多条内存屏障指令是按顺序执行的。 ARM有三种内存屏障指令,分别是: Instruction Synchronization Barrier (ISB),指令同步屏障 Data Memory Barrier (DMB),数据存储屏障 Data Synchronization Barrier (DSB),数据同步屏障 假设有如下代码片段: Core A: STR R0, [Msg] STR R1, [Flag] Core B: Poll_loop: LDR R1, [Flag] CMP R1, #0 BEQ Poll_loop + DMB LDR R0, [Msg] 上述代码由CoreA将新数据写入Msg地址,CoreB判断Flag置位后读取新数据,但是在上述代码执行时,CoreB可能读不到最新的数据。因为CoreB乱序执行先读取了Msg,然后再读取Flag。 在弱一致内存模型中,处理器不知道Msg和Flag有数据依赖,所以需要用内存屏障指出。在"LDR R0, [Msg]"前插入DMB,保证读取完Flag后才读取Msg。 三种内存屏障有不同的用途: ISB,指令同步屏障 ISB用来保证屏障后面的指令会被重新读取,以便使用当前的MMU配置检查特权和访问权限。它用于确保任何先前执行的上下文更改操作(如对系统控制寄存器的写入)在ISB完成时已经完成。例如,在硬件方面,这可能意味着指令管道被刷新。它的典型用途是内存管理、缓存控制和上下文切换代码,或者在内存中移动代码。 DMB,数据存储屏障 DMB阻止跨屏障指令的数据访问指令的乱序执行,所有的数据访问,包括loads和stores,但不包括指令预取,都要在DMB之前执行。 例如: LDR x0, [x1] // Must be seen by the memory system before the STR below. DMB ISHLD ADD x2, #1 // May be executed before or after the memory system sees LDR. STR x3, [x4] // Must be seen by the memory system after the LDR above. DSB,数据同步屏障 DSB与DMB不同的一点是,DSB阻止执行屏障后的任何指令,直到同步完成。 对ISB更多的解释: ARM将上下文(context)定义为系统寄存器的状态,将上下文更改操作定义为缓存、TLB和分支预测操作,或者改变系统控制寄存器的状态,例如 SCTLR_EL1, TCR_EL1, 和TTBRn_EL1。改变上下文的操作只有在上下文同步事件后才能被保证可见。 有三种上下文同步事件: 发生一个异常; 从一个异常返回; 指令同步屏障(ISB). ISB刷新流水线,然后从缓存或内存重新取出指令,并确保ISB之前完成的任何上下文更改操作的效果对ISB之后的任何指令都可见。它还确保在ISB指令之后的任何上下文更改操作只在ISB执行之后生效,并且ISB之前的指令看不到这些操作。这并不意味着在每个修改处理器寄存器的指令之后都需要ISB。例如,对PSTATE字段、ELRs,SPs和SPSRs的读取或写入。 原作者:hn2zzzz1996 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
714 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2397 浏览 1 评论
821 浏览 0 评论
1589 浏览 1 评论
2397 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 12:13 , Processed in 0.629169 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号