计算机体系结构中缓存一致性的方法有哪些?
缓存一致性主要有两种方法,如下所示:
- 缓存-内存一致性
在单一缓存系统中,内存和缓存之间的一致性通过两种策略之一来维护:(1) 直写,(2) 回写。例如,当在处理器 P 上运行的任务请求内存位置 X 中的数据时,X 的内容将被复制到缓存中,然后传递给 P。
当 P 更新缓存中 X 的值时,也需要更新内存中的另一个副本以保持一致性。在直写策略中,每次更新缓存时都会更新内存,而在回写策略中,只有当缓存中的块被替换时才会更新内存。表格显示了直写与回写策略的比较。
直写 vs. 回写
直写 | 回写 | ||||
---|---|---|---|---|---|
序列 | 事件 | 内存 | 缓存 | 内存 | 缓存 |
1 | X | X | |||
2 | P 读取 X | X | X | X | X |
3 | P 更新 X | X | X | X | X |
- 缓存-缓存一致性
在多处理系统中,例如,当在处理器 P 上运行的任务请求全局内存位置 X 中的数据时,X 的内容将被复制到处理器 P 的本地缓存中,然后传递给 P。
有两种基本的缓存一致性策略:(1) 写无效,(2) 写更新。写无效通过读取本地缓存直到发生写入操作来维护一致性。
当任何处理器通过写入操作更新 X 的值时,为 X 发布脏位将使所有其他副本无效。例如,当处理器 Q 将新值写入其缓存时,它会使 X 的所有其他副本无效。这将为 X 设置脏位。Q 可以继续更改 X,而无需进一步通知其他缓存,因为 Q 拥有 X 的唯一有效副本。
但是,当处理器 P 想要读取 X 时,它必须等待直到 X 被更新并且脏位被清除。写更新通过立即更新所有缓存中的所有副本来维护一致性。在每次写入操作期间都会设置所有脏位。毕竟,所有副本都已更新,所有脏位都已清除。表格显示了写更新与写无效策略的比较。
写更新 vs. 写无效
写更新 | 写无效 | ||||
---|---|---|---|---|---|
序列 | 事件 | P 的缓存 | Q 的缓存 | P 的缓存 | Q 的缓存 |
1 | P 读取 X | X | X | ||
2 | Q 读取 X | X | X | X | X |
3 | Q 更新 X | X’ | X’ | INV | X’ |
4 | Q 更新 X’ | X’’ | X’’ | INV | X’’ |
广告