写回策略

主要分两种:
写回(write back )和 写通(write through)

1. write back

只有在一个cache行被选中替换回主存时,如果cache 行的数据是修改过的(dirty),才将它写回主存。

这种策略,要在Cache中设置一个脏位(dirty bit),用来表示缓存中的cache 行是否被修改过。

如果 一个内存块在加载到Cache后未被修改过,Cache直接把该cache行设置为无效。不需要把数据写回主存,这样可以有效降低从Cache到主存的写次数。

2.write through

写通是指,每当Cache收到写数据(store)指令时,若写命中,则CPU会同时将数据写到Cache和主存。

如果写不命中:
  • 写分配,只在数据写不命中产生作用,即,给数据分配一个cache line 。先在主存块中更新到主存中,然后分配一个cache行,将数据写到Cache中。
  • 这种方式充分利用了空间局部性,但每次写不命中都要从主存读一个块到Cache中,增加了 读主存 的开销。
  • 非写分配:
    直接把数据写回主存而不加载数据到缓存。
    这种方式可以减少 读主存的时间,没有利用好空间局部性。
比较:

现在系统中,写回策略设置了写缓冲器,减少了访问主存的次数,但是写通方式设计比较容易,维护数据的一致性跟简单。

下面用wiki的两流程具体解释一下:

  1. WB(write back)+WA(write allocation)

    若存在缓存,即CPU先访问缓存,
    1.当请求是读请求时,若命中,直接返回其数据;当未命中时,先再缓存中分配一个缓存快,判断当前缓存块是不是脏数据(被修改过的数据),如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,修改dirty位为,clean(未被修改);返回数据。
    2.当请求是写请求时,若命中,直接将新数据写入缓存,并且标记dirt位为,dirty(被修改);若未命中,分配一块缓存块,,判断当前缓存块是不是脏数据,如果是,将之前的数据写回下一级存储中,如果不是脏数据,直接从下一级存储中读到cache块中,将新数据写入缓存块,并标记为dirty。
完成访问。DONE
  1. WT(write through )+WN(write no allocation)
  2. archive策略 write back策略_缓存

  3. 1.解释与wb类似