CPU怎么保证内存访问冲突?一致性?( 三 )


对于TSO和PSO模型 , 内存屏障只需要在store-load/store-store时需要(写内存屏障) , 最简单的一种方式就是内存屏障指令必须保证store buffer数据全部被清空的时候才继续往后面执行 , 这样就能保证其与SC模型的执行顺序一致 。
而对于RMO , 在PSO的基础上又引入了load-load与load-store乱序 。RMO的读内存屏障就要保证前面的load指令必须先于后面的load/store指令先执行 , 不允许将其访问提前执行 。
我们继续看下面的例子:

CPU怎么保证内存访问冲突?一致性?

文章插图
 
例如C1执行S1与S2的时候 , 我们在S1与S2之间加上写屏障指令 , 要求C1按照顺序存储模型来进行store的执行 , 而在C2端的L1与L2之间加入读内存屏障 , 要求C2也按照顺序存储模型来进行load操作 , 这样就能够实现内存数据的一致性 , 从而解决乱序的问题 。
ARM的很多微架构就是使用RMO模型 , 所以我们可以看到ARM提供的dmb内存指令有多个选项:
LD load-load/load-store ST store-store/store-load SY any-any这些选项就是用来应对不同情况下的乱序 , 让其回归到顺序一致性模型的执行顺序上去 。
本文修改自:http://www.wowotech.net/memory_management/456.html
本人公众号:技术原理君

【CPU怎么保证内存访问冲突?一致性?】


推荐阅读