当前位置: 网站首页 >> 知识库 >> 正文
【计算机组成原理】存储系统(五)—— Cache 的映射方式与写策略
发布时间:2024-04-02       编辑:网络中心       浏览次数:

一、Cache - 主存的映射方式

在这里插入图片描述

全相联映射:主存块可以放在 Cache 的任意位置。

直接映射:每个主存块只能放到一个特定的位置:
Cache块号 = 主存块号 % Cache总块数

组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置: 组号 = 主存块号 % 分组数

(一)、全相联映射(随意放)

在这里插入图片描述
CPU 访问主存地址 1…1101001110:
①主存地址的前22位,对比Cache中所有块的标记;
②若标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位 = 0,则正常访问主存。

(二)、直接映射(只能放固定位置)

直接映射,主存块在Cache中的位置 = 主存块号 % Cache总块数。

在这里插入图片描述

若 Cache总块数 = 2 n 2^n2n 则主存块号末尾n位直接反映它在Cache 中的位置。将主存块号的其余位作为标记即可。

在这里插入图片描述

此时主存地址为:

在这里插入图片描述

CPU 访问主存地址 0…01000 001110 :
①根据主存块号的后 3位确定Cache行 。
②若主存块号的前 19 位与Cache标记匹配且有效位=1,则Cache命中,访问块内地址为 001110 的单元。
③若未命中或有效位=0,则正常访问主存。

(三)、组相联映射(可放到特定分组)

n 路组相联映射 —— n块为一组

eg:2路组相联映射——2块为一组

组相联映射,所属分组 = 主存块号 %分组数

在这里插入图片描述

CPU 访问主存地址1…1101001110 :
①根据主存块号的后 2位确定所属分组号。
②若主存块号的前20位与分组内的某个标记匹配且有位=1, 则Cache命中,访问块内地址为 001110的单元。
③若未命中或有效位=0,则正常访问主存。

(四)Cache - 主存的映射方式总结

在这里插入图片描述

二、Cache 替换算法

前面介绍了 Cache 与主存的映射,说明了 Cache块映射到主存块的位置。但是未说明当 Cache 内存满了时应该选择哪个 Cache 进行替换,这当中涉及到 Cache 替换算法。

(一)、随机算法(RAND)

随机算法(RAND, Random)——若Cache已满,则随机选择一块替换。

随机算法——实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定。

(二)、先进先出算法(FIFO)

先进先出算法(FIFO, First In First Out)—— 若Cache已满,则替换最先被调入Cache 的块。

先进先出算法 —— 实现简单,最开始按#0#1#2#3放入Cache,之后轮流替换 #0#1#2#3 。FIFO依然没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的。

在这里插入图片描述

(三)、近期最少使用算法(LRU)

近期最少使用算法(LRU, Least Recently Used )—— 为每一个Cache块设置一个“计数器”,用于记录每个 Cache 块已经有多久没被访问了。当 Cache 满后替换“计数器”最大的。

①命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;
②未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1;
③未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1。

在这里插入图片描述

(四)、最不经常使用算法(LFU)

最不经常使用算法(LFU, Least Frequently Used )—— 为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次。当Cache满后替换“计数器”最小的。

新调入的块计数器=0,之后每被访问一次计数器+1。需要替换时,选择计数器最小的一行。

在这里插入图片描述

(五)、Cache 替换算法的总结

在这里插入图片描述

三、Cache 写策略

在这里插入图片描述

(一)、写命中

1. 写回法

写回法(write-back) —— 当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。

在这里插入图片描述

减少了访存次数,但存在数据不一致的隐患。

2. 全写法

全写法(写直通法,write-through) —— 当CPU对Cache写命中时,必须把数据同时写入 Cache 和主存,一般使用写缓冲(write buffer)。使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会因为写缓冲饱和而发生阻塞。

在这里插入图片描述

访存次数增加,速度变慢,但更能保证数据一致性。Cache块被替换时无需写回。

(二)、写不命中

1. 写分配法

写不命中时,把主存中的块调入Cache,在Cache中修改。
搭配写回法使用

写回法(write-back) —— 当CPU对Cache写命中时,只修改Cache 的内容,而不立即写入主存,只有当此块被换出时才写回主存。

2. 非写分配法

非写分配法(not-write-allocate)——当 CPU 对 Cache 写不命中时只写入主存,不调入Cache。搭配全写法使用

全写法(写直通法,write-through) —— 当 CPU 对 Cache 写命中时,必须把数据同时写入Cache 和主存,一般使用写缓冲(write buffer)。

(三)、多级Cache

现代计算机常采用多级Cache,离CPU越近的速度越快,容量越小,离CPU越远的速度越慢,容量越大。

在这里插入图片描述

(四)、Cache 写策略的总结

在这里插入图片描述

链接:https://blog.csdn.net/weixin_43848614/article/details/126822596

作者:何为xl

关闭本页

公海赌赌船官网710教育技术与网络中心版权所有

©GDAFC Education Technology & Network Center, All Rights Reserved.