Cache的一致性问题

Cache中的内容是主存中的副本。访问数据是先访问Cache,Cache中没有再看主存中有没有。当对cache中的内容更新时,就会存在cache和主存如何保持数据一致的问题。此外,下列问题也会导致cache一致性问题。

  • 多个设备都允许访问主存时,cache中的内容被cpu修改,而主存中的没有,同时该内容需要写入磁盘,此时从内存写入到磁盘的数据和cache(希望的数据)不一样。
  • 当多个CPU都有各自的cache而共享主存时,若有一个cpu修改了自身cache中的内容,则对应的主存块和其他cpu中对应的cache行的内容都变为无效(共享数据,数据更改了,未及时更改的那些数据都没用了)

Cache一致性问题的关键是处理好写操作。

全写法

对写命中,写未命中的解释:cache的写命中和写未命中,就是磁盘或者内存上的存储区域之前有没有写过数据。如果有,这次再写到相同的区域叫写命中;如果写到其他区域,叫写未命中。

写操作时,若写命中,则同时写cache和主存;若写不命中,则有以下两种方式。

  • 写分配法:
    • 先更新主存中的数据,再将更新后的主存块装入到cache中。可重复利用程序的局部性原理。
  • 非写分配法:
    • 仅更新主存中数据不写入cache,可减少读入主存块的时间,但是没有很好地利用程序地局部性原理。
  • 为减少写主存地开心,通常再cache和主存之间加一个写缓冲,写入cache时也写入缓冲中,然后由存储控制器将写缓冲中的数据写入主存。(写缓冲的读取速度很快,远远高于对主存的读取速度)

回写法

CPU执行写操作时,若写命中,则信息只写入cache不写入主存;若写不命中,则在cache中分配一行,将主存块调入该cache行中并更新相应单元的内容。该方式下,写不命中时通常采用写分配法进行写操作。

我个人理解,写命中就是这个数据在cahce和内存里,但是内容不对需要更新。写未命中就是,这个数据不在内存,也不在cache,需要申请一块新的空间存放它。

猜你喜欢

转载自www.cnblogs.com/ljwdemo/p/12571177.html