两种基本的写策略是write-through和write-back:
write-through
CPU向cache写入数据时,同时向memory也写一份,使得cache和memory的数据保持一致。优点是简单,不会出现cache一致性的问题;缺点每次都要访问memory,速度慢,要等到写完memory才返回。
write-back
CPU更新cache数据时,只要在cache中修改一下,memory的内容要等到cache可能被别的数据代替或者系统做cache flush时,才会更新。优点是速度块;缺点是引入了cache和memory一致性问题。writeback要比write-through复杂需要,因为cache需要跟踪它已经写过的内容,然后标记为dirty,以便适当的时候写回memory中
write-alloc
换一个说法,又叫fetch on write,如果被写的数据不在cache中,那么要把data从memory装入cache中,然后再写(这就导致了write-hit)。有点类似read-misses
在ARM对内存区域映射时,会设置两个属性:bufferable和cacheable
bufferable的意思是说不必把结果写进最终目的地而只是写进中间某个buffer就可以回response,这就是上面提到的write-back;non-bufferable则是把结果写进最终的目的地才能回response,这就是上面的write-through。
Cacheable说的是进行读写的时候要去cache里查看(noncacheable就是不用去cache里查看,直接对memory进行操作)。