问个CPU的data cache问题
不知道,我以前用的MCU不带MMU,我的问题就是在cache往memory回写的过程中,
比如会不会被别的中断打断导致cache的副本和memory一致性破坏了。然后volatile
是否会避免这种情况出现。
貌似你的说法是no.那么volatile只能防止一种,就是寄存器副本和memory的非
一致性,而这种非一致性都是因为中断导致。
实际上多线程本质也是中断切换。
所以volatile用于中断服务程序和其他程序直接共享变量标记,或者多线程(其实
也是多中断服务程序系统)。
我这样理解对否?
那么CACHE和MEMORY之间的一致性是没有可能被中断破坏的了?是属于元操作?
今天又仔细想了一下你这段解释比较贴切。volatile只是给编译器看的。
embedded的拿来干这干那,就是怕编译器优化程度高换机器代码的时候
搞破坏。但是也不是绝对保险的。
volatile本意是给编译器工程师们看的,被EMBEDDED工程师拿来当存储
保护用。难不成按照你这么说,其实用C去写EMBEDDED实际上不是很保险。
尤其是优化级别高的时候。这样很危险啊。擦擦擦
http://en.wikipedia.org/wiki/Volatile_(computer_programming)
https://software.intel.com/en-us/blogs/2007/11/30/volatile-almost-useless-fo
r-multi-threaded-programming
随手搜了两个,好像说得还挺清楚
cache对用户是透明的,只是为了提高performance的一种存在
片上片下一级二级若干级种种材质皆可以
cache一致性是由cpu本身来保证的,不是用户操心的
没有一样用啊,就是慢
现成的cpu, 你研究cache作甚?
利用cache的三大法宝,locality , locality, locality!
.56
怎么成不保险了,你得写对了...
.56
