计算机学习微信公众号(jsj_xx) 2.8 cpu cache对屏障的影响 cpu跟自己的cache打交道,而各个cache之间是通过一种协议来保证一致性的。换句话理解:屏障是在cpu和自己的cache之间起作用,而之后(cache间)的传播就管不了了。这样,虽然一个cpu的操作最终会被其它cpu感知到,但可能是一种乱序的感知。如下图,内存屏障起作用的地方在cpu和cpu cache之间的红线:
再看看cache对DMA操作设备时的影响。 对于DMA读而言,由于dirty cache可能还在cpu的cache里,没有写到内存,所以直接DMA就可能使用了(旧的)错误数据。解决方法就是将cpu cache相关数据冲刷到内存里,从而保证cache和内存的一致性。同理,对于DMA写而言,设备将数据写入内存后可能被cpu cache的回写覆盖掉。解决方法是将cpu cache中相关数据invalid掉。 2.9 alpha cpu DEC alpha cpu属于弱保证的cpu之一了,比如上面提到,它可能在一个cpu里采用切分cache,这样cache之间的同步就使得数据依赖屏障变得异常重要了。对于linux内核而言,自然要考虑最坏情况,所以可以说,其内存屏障模型是参照alpha cpu实现的。 (全文完) 关于我们 新浪微博(@NP等不等于P) 计算机学习微信公众号(jsj_xx) 原创技术文章,感悟计算机,透彻理解计算机! |
|