为什么cpu读存储器内容,必须读高速缓冲器的,写内容,可以写在高速缓冲器和内存呢?二者为何不能统一?所谓的cache命中,指的是读命中还是写命中呢?
两种情况都有。直接写内存,再次读还需要一个装载的过程。
写入cache,对于多处理器,会造成缓存不同步。
x86处理器这一点不是透明的,需要额外的指令才能刷新‘缓存。
这跟CPU架构有关。现代的CPU的存储结构基本上是分层的,即:外存->内存->cache->寄存器。
当CPU读取数据时都是按照这个顺序搬移数据的。越靠近CPU的地方存取速度越快。其中cache到寄存器的搬移是CPU完成的,对软件程序来说是透明的。C语言中只需给出一个地址就可以完成对改地址的读取。
写的问题要复杂一些。要分两种情况来看:如果要写入的数据在cache里,那么可以直接写。如果不在cache里,需要先把数据load到cache里,然后再写。这样写操作就需要额外的操作,也称为写放大。为了避免写放大,有的CPU就越过cahce直接往下一级(可能是内存)写。