多级缓存系统中写穿透策略的写入流程及术语疑问
多级缓存系统写入策略问题解析
问题背景
现有包含L1、L2、L3缓存及主存的多级缓存系统:
- L1缓存采用写穿透策略:写入L1时必须同步写入下一级存储
- L2、L3缓存命中时采用写回策略:命中时仅更新缓存块并标记为“脏”,仅当缓存块被替换时才写回下一级存储
需分析两种L1命中的写入场景下的数据流转,并解答相关概念争议:
- 场景1:地址A同时存在于L1、L2、L3缓存中
- 场景2:地址A存在于L1缓存,不存在于L2缓存,但存在于L3缓存中
场景1:地址A在L1、L2、L3均命中的写入流程
- CPU将新数据写入L1缓存的地址A块
- 由于L1是写穿透策略,必须同步将数据传入下一级的L2缓存
- L2缓存命中地址A,且采用写回策略:仅更新L2中的地址A块,并将该块标记为“脏”(表示与下一级存储数据不一致)
- 停止向下传播:L3缓存和主存不会被立即更新,只有当L2的该“脏”块被替换时,才会将数据写回L3;同理,L3的“脏”块被替换时才会写回主存
最终仅更新L1和L2缓存,L3与主存保持旧数据。
场景2:地址A在L1命中、L2未命中、L3命中的写入流程
- CPU将新数据写入L1缓存的地址A块
- L1写穿透同步将数据传入L2缓存,此时L2未命中地址A
- L2缓存处理未命中的写入:
- 若L2有空闲缓存块:直接分配块存储地址A的新数据,标记为“脏”
- 若L2无空闲块:选中待替换的块,若该块为“脏”则先将其写回L3,再分配块存储地址A的新数据并标记为“脏”
- 停止向下传播:L3缓存和主存的旧数据不会被立即更新,后续仅当L2的“脏”块被替换时才会更新L3,L3的“脏”块被替换时再更新主存
最终仅更新L1和L2缓存,L3与主存保持旧数据。
关于教材与资料的争议解释
Hennessy & Patterson教材中“上层缓存采用写穿透更可行,写入仅需传播至下一级缓存而非直达主存”的表述,是针对现代多级缓存架构的实际设计:
- 多级缓存中,下级缓存(如L2、L3)是上层缓存的直接后备存储,写穿透仅需同步到直接下一级缓存,而非跳过中间层级直达主存,这样能大幅减少主存的写入次数,提升系统性能
- 部分资料称“需写入DRAM”,多是基于早期单级缓存模型(此时写穿透的下一级就是主存),或是简化的教学模型,忽略了多级缓存的层级结构
维基百科“lower memory”的定义
在缓存写入策略的语境中,“lower memory”特指当前缓存的直接下一级存储层级:
- 对L1缓存而言,lower memory是L2缓存
- 对L2缓存而言,lower memory是L3缓存
- 对L3缓存而言,lower memory是主存
因此“写入数据至lower memory”仅指写入直接下一级的存储,而非所有下级缓存加主存。
内容的提问来源于stack exchange,提问作者helloworld1e.
相关产品推荐
相关产品推荐

