【 Cache 写策略学习笔记】

发布于:2025-07-17 ⋅ 阅读:(15) ⋅ 点赞:(0)

🚀 Cache 写策略学习笔记:从写不命中到多级缓存的精细控制

在这里插入图片描述

🧠 为什么需要 Cache 写策略?

在现代计算机体系中,Cache(高速缓存) 承担着 CPU 与主存之间的“加速器”角色。读操作可以通过缓存机制提高命中率,减少主存访问时间,但 写操作就没那么简单:

  • 写是数据更新操作,涉及一致性维护
  • 写操作存在“命中”和“不命中”两种情况,行为不同;
  • 在多级 Cache 中,不同层之间的数据传输策略也不一样。

因此,为了提高效率、降低主存带宽压力并维持一致性,必须设计合适的写策略(Write Policy)


📌 基础术语说明

  • 写命中(Write Hit):要写入的数据地址已存在于 Cache 中。
  • 写不命中(Write Miss):要写入的地址在 Cache 中不存在。
  • 写直达(Write Through):数据同时写入 Cache 和主存。
  • 写回(Write Back):先只写入 Cache,延迟写入主存,需设置“脏位”。
  • 写分配(Write Allocate):写不命中时,将块从主存加载入 Cache,然后写入 Cache。
  • 非写分配(No Write Allocate):写不命中时,不加载块入 Cache,直接写主存。

📘 我的提问与探索过程整理如下:

✅ 1. 写不命中是什么意思?写什么?

我的问题:

“CPU 写不命中是什么意思,写什么?”

学习成果总结:
写不命中(Write Miss)指的是 CPU 要写入某地址,但这个地址所对应的数据块不在 Cache 中。此时系统必须选择是把这块数据从主存调入 Cache(写分配),还是直接写主存(非写分配),这由写策略决定。


✅ 2. 我这样理解对吗?

我的问题:

“现在我需要写入一个地址,可以是存入一个数字吗?那么这个过程就是 CPU 需要向 Cache 写入这个数字,但地址不在 Cache 中,就用写分配法将主存单元找出写入 Cache,使用写回法将原 Cache 地址写回主存,然后再将新的地址写入 Cache,这样理解对吗?”

学习成果总结:
这个逻辑大体是对的,但顺序要理清:

  • CPU 要写入地址 A,但发生写不命中;
  • 使用写分配策略:把地址 A 所在块从主存加载到 Cache;
  • 此时 Cache 若满,需替换一块;
  • 如果被替换的块是的(被修改过) → 写回主存
  • 然后再将块 A 写入 Cache,并执行写入;
  • 写回策略意味着只更新 Cache,不立即写主存,延迟到块被替换时再写。
    在这里插入图片描述

✅ 3. 替换时才触发写回是对的吗?

我的问题:

“写入 Cache 之前不是 Cache 已经满了吗?如果原来被替换的块使用了写回法,那是不是在替换时才将原始块写回主存?”

学习成果总结:
✅ 正确!写回策略的精髓就是延迟写主存,只有当该块被替换时,如果它是“脏的”,才将其整个块写回主存。这么做是为了减少主存写入次数,提高效率。


✅ 4. 非写分配时如何更新主存?我理解对吗?

我的问题:

“全写法(写直达)是写命中时同时写 Cache 和主存;非写分配法是写不命中时直接写主存,不更新 Cache。这里写不命中是如何更新主存单元的?是不是 CPU 没在 Cache 中找到目标块,就直接写主存,但不更新 Cache?”

学习成果总结:
✔ 是的,你理解是准确的。
**非写分配(No Write Allocate)**策略下:

  • 写不命中时不会调块进 Cache;
  • 直接把数据写到主存中;
  • Cache 结构不发生变化;
  • 下一次再访问同一地址时仍会 miss。

✅ 5. 多级 Cache 中策略为什么不同?

我的问题:

“为什么在多级 Cache 中,L1 和 L2 之间使用写直达 + 非写分配;而 L2 和主存之间使用写回 + 写分配?这与我前面说的写回和写分配搭配是否一致?如果不一致,它们是怎么实现的?”

学习成果总结:
这不是矛盾,而是有层次性设计考虑:
在这里插入图片描述

🔹 L1 ↔ L2:写直达(Write Through)+ 非写分配
  • L1 小而快,设计目标是响应速度快 → 避免污染、降低复杂性;
  • 写直达 → 写操作立即反映在 L2;
  • 非写分配 → 写 miss 直接落到 L2,不拉数据入 L1。
    在这里插入图片描述
    在这里插入图片描述
🔹 L2 ↔ 主存:写回(Write Back)+ 写分配
  • L2 容量更大,适合长期缓存 → 利用局部性;
  • 写回 → 降低主存带宽压力;
  • 写分配 → 写 miss 时拉块入 L2,优化后续访问。
    在这里插入图片描述

所以,它们并非异或,而是按功能分层优化设计的体现。


✅ 总结:我的写策略知识图谱

类别 策略类型 说明
写命中时 Write Through 同时写入 Cache 和主存
写命中时 Write Back 只写 Cache,标脏位,延迟写主存
写不命中时 Write Allocate 把目标块从主存加载到 Cache,再写入
写不命中时 No Write Allocate 不加载块,直接写主存,不更新 Cache
多级 Cache L1–L2 用 WT+NWA 保持 L1 简洁、高速
多级 Cache L2–主存用 WB+WA 提高整体性能和局部性

📝 学习建议

  • 区分写命中策略写不命中策略
  • 多级 Cache 中要理解层级功能不同→策略不同
  • 建议多用图表模拟访问流程,帮助深化理解


网站公告

今日签到

点亮在社区的每一天
去签到