缓存 Cache

L10-Cache <- 课件

笔记放在PDF中了~

  • 一读取就是一个 block

替换策略

关于(组相联 & 全相连) : 需要考虑替换问题

处理缓存的读请求:

适用于lcache和D cache

  • 命中 顺利读取数据
  • 缺失 阻塞流水线 从下层存储层级获取请求的数据 数据保存至缓存,读取请求的字 恢复流水线运行

处理缓存写命中

写直达 & 写回 截图_20250528095822.png

写缓冲: 在 Cache 和内存中间 , 一旦放入写缓冲, 就当作完成任务了, 不必等待。担任缓冲容量有限。


写回:

  • 只将数据写回到缓存
  • 只有需要将缓存块驱逐(Evicted)时, 才写回到下层存储层
  • 每个缓存块需要1 bit 脏块 标记

处理缓存写缺失

截图_20250528101258.png

写直达流程图: 截图_20250528101631.png

写回流程图: 截图_20250528101658.png


替换算法

直接映射:不需要选择替换的块 组相联映射:

  • 首先映射到有效位为0的项 (优先占用空闲的行)
  • 如果没有,在该组的项中挑选一个项替换 最近最少使用(LRU,Least-recently used)
  • 替换很长时间没有使用的块
  • 不适用于超过4路的组相联映射 随机替换
  • 当相联度较高时,与LRU性能类似

截图_20250528103757.png

分析: 全相联映射缓存最好,组相联缓存次之,直接映射缓存最差 通常情况使用组相联映射,并采用LRU替换策略 较大的cache 块能更好地利用空间局部性以降低缺失率 在固定块大小的cache中

较大块 => 块的数量减少 地址映射的竞争增大 => 增加缺失率 较大块 => 空间局部性降低


#虚拟存储

虚拟存储器 (Virtual Memory)

存储器的存储容量可能小于可寻址空间

  • 32-bit地址可以寻址4GB空间
  • 内存地址可能只有1GB
系统可以同时运行多个程序,如果这些程序运行所需的 存储空间大于实际内存容量,系统该如何运行?

虚拟存储器

  • 将主存用作辅助存储器的 高速缓存 的技术
  • 程序拥有自己的虚拟地址空间, 存储频繁访问的代码与数据
  • 根据 局部性原理 而设计

虚拟存储器 优势:

  • 运行时, CPU和OS将虚拟地址转换为物理地址
  • 实现多个程序共享存储器
  • 允许运行超过主存容量的程序
  • 代码重定向: 代码可以加载进内存的任何地方 (物理地址上可以不连续)

例子: 从存储层次结构来看

  • 假设内存容量为1GB,此时已经使用了1GB容量,在程序运行时需要额外的存储空间
  • 把内存中的一块数据 (100MB) 移出到硬盘
  • 此时,内存有100MB的空闲 (free) 存储空间
  • 如果稍后,需要使用被替换出去那块数据
  • 需要把内存中其他的数据块移出到硬盘,以获得100MB的空闲存储空间将原来的数据载入

截图_20250528111802.png

最后修改:2025 年 05 月 28 日
如果觉得我的文章对你有用,请随意赞赏