当前位置: 首页 > news >正文

计算机组成与体系结构:缓存设计概述(Cache Design Overview)

目录

Block Placement(块放置)

 Block Identification(块识别)

Block Replacement(块替换)

Write Strategy(写策略)

总结:


高速缓存设计包括四个基础核心概念,它们分别是:Block Placement(块放置)、Block Identification(块识别)、Block Replacement(块替换)以及Write Strategy(写策略)。这四者共同构成了高速缓存的基本工作机制,理解它们是深入学习缓存设计 的前提。

Block Placement(块放置)

这是指主存中的数据块应该被放置到 Cache 的哪个位置。

核心问题:

一个主存块可以放在 Cache 的哪些位置? 

📚 三种主要的映射方式:

直接映射(Direct-Mapped)

  • 每个主存块只能映射到 Cache 中的一个特定位置。

  • 优点:实现简单,访问速度快

  • 缺点:冲突率高,多个主存块可能争用同一个位置

全相联映射(Fully Associative)

  • 主存中的任意数据块都可以放入 Cache 的任意位置。

  • 优点:冲突最小化

  • 缺点:硬件复杂,查找开销大

组相联映射(Set-Associative)

  • Cache 分成多个集合(Set),每个集合中有多个行(Way)。

  • 每个主存块映射到一个集合,再在集合中任意位置放置。

  • 常见形式如:2-way, 4-way 等

  • 折中方案:在冲突率和复杂度之间取得平衡

 Block Identification(块识别)

当我们访问某个内存地址时,Cache 必须判断这个地址是否在 Cache 中。

核心问题:

如何在 Cache 中识别这个块是否存在?如果存在,是哪一块?

🧱 Cache 的地址划分:

  • Tag(标记位):用于识别主存块是否和 Cache 中的块匹配

  • Index(索引位):用于定位块应该在哪个集合或位置

  • Block Offset:用于在块内部定位具体的字节

 匹配流程:

对于一个内存访问,系统会从地址中提取出:

  1. Index:找到对应的 Set(或直接映射的位置)

  2. Tag:与 Set 中每个块的 Tag 比较(比较命中即是命中)

  3. 若命中,使用 Offset 访问数据;否则触发缺失(Miss)

直接映射 

组相联映射

全相联映射

Block Replacement(块替换)

当 Cache 中的目标位置已经被占用,而新的主存块又必须装入 Cache 时,我们需要替换掉某个已经存在的块。

核心问题:

如果缓存满了,哪一个块应该被替换掉?

⚙️ 替换动作的标准流程:

  1. 判断是否命中(如果命中则直接访问);

  2. 如果不命中,判断 Cache 是否有空位(组或全相联中);

  3. 若无空位 → 触发 Block Replacement 策略:

    • 找到最“合适”被淘汰的块;

    • 若该块为“脏块” → 写回到主存;

    • 装载新的主存块进入该位置。

🤖 替换策略:

  1. LRU(Least Recently Used):替换最近最少使用的数据块(常用)

  2. FIFO(First-In First-Out):替换最早进入缓存的块(简单但可能非最优)

  3. Random Replacement:随机选择一个块替换(实现简单)

  4. Pseudo-LRU:近似 LRU,用于减少硬件实现的复杂性

 策略选择的影响:

  • 替换策略直接影响 命中率(Hit Rate) 和 系统性能

  • LRU 在局部性较强的访问模式中表现良好,但实现开销高

Write Strategy(写策略)

Cache 设计中必须明确:当数据被写入时,主存和 Cache 的一致性如何保证。

核心问题:

写操作是直接修改主存,还是只修改 Cache?是否需要同步?

📝 两大类策略:

✅ 写命中策略(Write Hit Policy):

  1. Write-Through(直写)

    • 同时写 Cache 和主存

    • 简单但会产生大量主存写操作

  2. Write-Back(回写)

    • 只写 Cache,并标记为“脏块”

    • 仅在块被替换时才写回主存

    • 减少主存访问次数,但需要写回控制逻辑

❌ 写缺失策略(Write Miss Policy):

  1. Write Allocate(写分配)

    • 缺失时先将块读入 Cache,然后写入 Cache(常用于 Write-Back)

  2. No Write Allocate(非写分配)

    • 缺失时直接写主存,不将数据加载到 Cache(常用于 Write-Through)

总结:

这四部分实际上是一个闭环的机制:

  1. 块放置决定了一个主存块被映射到 Cache 的哪个位置;

  2. 块识别决定我们如何判断一个内存访问是否命中 Cache;

  3. 块替换决定当位置冲突时该替换谁;

  4. 写策略决定了写入数据时 Cache 和主存的一致性如何维护。

它们密切关联,共同定义了 Cache 的工作行为和性能表现。

 有了以上四个基础组成部分的理解,我们就可以正式迈入 Cache Design 的大门了。Cache

Design 是对这些策略的组合与优化,使得 Cache 在访问速度、能效、硬件成本和命中率之间达成

平衡。一个好的设计往往结合特定应用场景,对上述四大机制做出权衡和创新。

相关文章:

  • Eslint和perrier的作用
  • contains方法的实现对比
  • leetcode二叉树相关题目复习(C语言版)
  • PDF Base64格式字符串转换为PDF文件临时文件
  • 具身智能梳理以及展望
  • 读入csv文件写入MySQL
  • 《AI大模型应知应会100篇》第64篇:构建你的第一个大模型 Chatbot
  • 鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp
  • FFmpeg 与 C++ 构建音视频处理全链路实战(五)—— 音视频编码与封装
  • 【MySQL 基础篇】深入解析MySQL逻辑架构与查询执行流程
  • 苹果处理器“仿生“命名背后的营销策略与技术创新
  • 最短路和拓扑排序知识点
  • 零基础学Java——第十一章:实战项目 - 桌面应用开发(JavaFX入门)
  • How Sam‘s Club nudge customers into buying more
  • 【IPMV】图像处理与机器视觉:Lec11 Keypoint Features and Corners
  • 开源 Web Shell 工具
  • C语言学习之文件操作
  • zookeeper本地部署
  • 12-串口外设
  • Flutter到HarmonyOS Next 的跨越:memory_info库的鸿蒙适配之旅
  • 遭“特朗普关税”冲击,韩国今年经济增长预期“腰斩”降至0.8%
  • 科技部等七部门:优先支持取得关键核心技术突破的科技型企业上市融资
  • 日月谭天丨这轮中美关税会谈让台湾社会看清了什么?
  • 新闻1+1丨婚姻登记服务,如何跑出幸福加速度?
  • “拼好假”的年轻人,今年有哪些旅游新玩法?
  • 印方称所有敌对行动均得到反击和回应,不会升级冲突