CM3 内核存储器访问属性及DMB DSB ISB隔离操作

存储器访问属性

可否缓冲(bufferable)

可缓冲属性,一半用于数据写入操作,由于CPU执行速度与外部存储的速度之间存在差距,所以在存储器外部加入了buffer,导致数据写入存储器会延迟。

可否缓存 (cacheable)

缓存属性,即CPU是否具有cache,cache可以进行高速读写,将存储器中的指令或者数据读取到cache中供cpu使用。关于缓存存在以下三个个属性WT(write-through)、WB(write-back) 、WBWA。
以下定义只适合Cortex-M3 and Cortex-M4:
WT = Normal Cacheable, Write-Through, allocate on read miss
WB = Normal Cacheable, Write-Back, allocate on read miss
WBWA = Normal Cacheable, Write-Back, allocate on read and write miss
WT属性如果在处理器中存在cache的情况下并且在(write hit)的情况下,会同时写入数据存储器和cache。WB属性在写操作时如果write hit,则将数据写入cache,在cache 块发生替换时,才把数据存储到主存储器中。(如果WB属性在写操作时如果write miss 则会出现两种策略 一种时no write allocated 这个是说明,直接将数据写入主存储器中。另一种策略是write allocate,即将要写的地址块从主存储器中调入cache中然后再执行写操作。)括号里的内容可能是不正确的。个人理解WB操作Write-Back, allocate on read miss,是再未命中时直接写入主存储器,然后读操作未命中时从主存储器读取到缓存中。然后WBWA操作时是再未命中时无论读写,都需要把数据从主存储器调入cache中然后执行读写操作。

可否执行(executable)

表示是否可以执行指令

可否共享(sharable)

可否共享,说明存储器属性是否可以可以共享,多核架构或者其他系统共享

隔离操作

CM3内核中存在三个隔离指令DMB、DSB、ISB
DMB 指令:等待它前边的存储器访问操作执行完毕后才执行后边的存储器访问操作
DSB 指令:等待它前边的存储器访问操作执行完毕后才执行后边的指令。
ISB指令:清洗流水线,将缓存到流水线的指令进行清洗。

DMB与DSB指令是用于多核架构或乱序执行保证数据的同步性(最好直接使用DSB),还有一些其他的情况需要使用如更新中断向量表或者使用USERSETMPEN产生一个软中断需要执行DSB指令确保数据已经准确写入到内存中。
在多核操作系统中使用互斥变量或者自旋锁,修改共享区域的数据时必须加入DMB或者DSB确保改写的数据已经落到主存储器中。一般情况下在互斥锁打开后需要加入一条DSB指令,在关闭前需要加入一条DSB指令。
在CM3和CM4内核中MSR指令只有在下一条指令执行完毕后才能观察到MSR作用的结果,所以需要加入一条MSB或者ISB指令指令等待刷新。
在freeRTOS内核中的taskYIELD() 操作中使用DSB 和ISB指令。 先使用DSB指令等待SVC中断挂起标志位写入成功,当SVC挂起标志位写入成功时,即触发了SVC中断,此时SVC中断处理函数切换到其他任务执行,再次返回至当前任务时,防止流水线上的指令被执行,所以需要ISB指令冲刷流水线。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值