第四章存储系统4.
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
举例
…
Cache
0块 1块
15块
…
…
主存
0块 1块
0区
15块 16块 17块
1区
31块
…
…
2032块 2033块
127区
…
2047块
直接映射是最简单的地址映射方式
硬件简单,成本低,地址变换速度快
不够灵活,Cache的存储空间得不到充分利用
每个主存块只有一个固定位置可存放,容易产生冲突,使 Cache效率下降,因此只适合大容量Cache采用
Cache容量为8KB,被分为16块,每块也是512B 以此为例介绍三种基本的地址映射方法
1. 全相联映射
全相联映射的Cache组织 Cache
主存
0块
0块
1块
1块
主存中任何一块都可以映
…
…
射到Cache中的任何一块 15块 位置上
…
15块 2047块
举例
全相联映射方式
比较灵活,主存的各块可以映射到Cache的任一块 中,Cache的利用率高
CPU
L1-Cache
地址 变换
Cache
MEMORY
Cache在读时
工作在“读”状况下Cache工作原理概说★★:
● Cache 利用程序访问局部性规律:在程序执行的过 zz程中,近期被访问过的信息项可能马上被再次访问, zz被访问过的地址的邻近地址可能紧接着被访问。
● 策略: 将现程序运行所需的主存的 “一块”内容 Copyzz(Map)到 Cache, CPU 访存时同时访问Cache, 访 问速zz度高。通常, 可以在Cache 中找到CPU所需内容。 除zz非运行到转移指令, 或者这块内容运行完毕, 下一 步zz需要的内容不在块内, 才从主存读入新的一块, 继 续zz满足CPU执行下一段程序之需。
● 提高Cache-Mem存储系统加速比
改善Cache
经验告诉我们, 提高Sp较好的方法有: 1. 适当的Cache容量: 实验表明 L2 Cache 容量在128k 有 到1M; L1在16k ~ 32k。有很好的命中率。 2. 选用好的相联法:Cache和主存的map采用组相联方 有 式有很好的命中率。 3. 使用 Victim (牺牲者) Cache :
** 4.3.4 Cache的写策略
写回Cache
CPU访问Cache包括读/写。 写时极可能修改被访字 内容, 这意味着程序运行的结果, 必须写回主存。Cache 作为主存的临时替代者, 对程序运行的结果必须忠实写 回主存,于是就有了写回策略。方法主要有:
1. 写直达法:CPU对Cache写命中时, Cache与主存内容 zz 同时修改, 此法维护了Cache与主存内容一致。 2. 写回法: CPU对Cache写命中时, 只修改Cache, 不修 zz 改主存。当此行被替换时将此行写回主存 3. 写一次法: CPU对Cache写命中第一次时同时改写zz zz Cache和主存,以后的命中采用写回法。
全相联 直接映象 组相联
Baidu Nhomakorabea
n (路数) M
1
1<n<M
G (组数)
1
M 1<G<M
◆ 绝大多数计算机的Cache: n ≤4
想一想:相联度一定是越大越好?
组相联 Mapping
组号G 块号B 字W Cache地址
主存地址
区号E 组号G 块号B 字W
比较 hit
块内地址
m
i
E+B B
1
L0
s s
L1 L2 L3
ZXZ TA =TCHC + TM(1-HC)=TCHC + TM FC. 式中
TC :命中时访问cache字的时间; FC=1-HC = 失效率;
TM :失效时访问cache字的时间(包括访问主存字并将
该字所在的主存块 map至Cache的时间).
● Cache 性能的评估 ★★
Cache评估3
例如,如果一个程序需要重复引用主存中第0块与第16块,最 好将主存第0块与第16块同时复制到Cache中
但由于它们都只能复制到Cache的第0块中去,即使Cache中 别的存储空间空着也不能占用
因此这两个块会不断地交替装入Cache中,导致命中率降低
直接Map
主存地址
区号E 块号B 字 W
块内地址
L0
L1
L2
L3
B0
B1 B2 B3
G0 E0
B0
B1 B2
G1
B3
B0
B1 B2
G0
B3 B0
E1
B1 B2
G1
B3
B0
B1 B2 B3
G0 Ek
B0
B1 B2
G1
B3
组相联算法
替换问题
**4.3.3 替换算法及其实现
•因为程序访问局部性规律, 程序运行极大可能使用一片 连续的存储字──块。这个块已经Map到Cache的某个行。 程序运行时就是访问的就是此行。当此行内容使用完毕, 程序需要访问新的行, 这就需要将主存相应的新块Map为 Cache相应的新行。
W1
B N-1
…
Wk-1
全相联算法
2. 直接映射
直接映射的Cache组织
主存中的一个块只能映射到 Cache的某一特定块中去
例如,主存的第0块、第16 块、……、第2032块,只能 映射到Cache的第0块;
而主存的第1块、第17 块、……、第2033块,只能 映射到Cache的第1块
……
** 4.3.5 Cache 性能的评估
1. 命中率HC:N次访问Cache,成功(命中)次数占总访问 次数的百分比。例如访问1000次,有950次成功,则
HC = 95% 一般情况有:访问N次,有N1次命中,N2次不命中,则
HC=
N1 N1 + N2
(N =N1 + N2)
2. Cache 存储系统等效访问时间 TA :
in cache? Y
Fetch RA word & deliver to CPU
Opoef r“aCtiaocnheFlRoewacdh”art★★★
Note: RA-Address, of a word to be read. M-Main Memory
N
Access M for block
Containing RA
Start 从CPU获地址RA
Cache读流程
“Cache读”的操作流程图★★
含RA的块 N 在Cache?
Y 读Cache中RA内容
在主存找含RA的块 计算该块的Cache行
将块Map到Cache 将RA字送CPU
Done
Start
Get RA from CPU
Is block containing RA
4.3.1 Cache工作原理
将现行程序的一个逻辑 块 Map 到Cache 中,CPU 在访问主存同时,访问 Cache,若Cache中有所 需地址,称之命中,访 问之。如果Cache无欲访 地址, 谓之不命中,则对 主存读写,同时把读写 单元所在的整个块 Map 到Cache. 为下步程序执 行使用。
地址变换机构
Cache满? Y
主存地址
命中 Cache地址 行号L 字 W
N Cache 替换 机构
M.M
Cache 系统
Cache
策
略 调进块 调出块
与处理机交换数据
图4.41 Cache-M系统结构
4.3.2 地址映像与变换
Cache的容量很小,保存的只是主存内容的一个子集, 且Cache与主存的数据交换是以块为单位的
3. Cache 存储系统的加速比SP:在没有cache的情况下,
主存字的访问时间为TM,设置Cache后, 存储系统等
效访问字时间为 TA ,则
SP
TM TA
TM TCHC + TM(1-HC)
1 (1-HC)+ HCTC/TM
可以看出加速比是命中率HC和时间比TC /TM的函数, 要提高Sp的只有提高命中率(即降低失效率FC )
为了把信息放到Cache中,必须应用某种函数把主存地址定 位到Cache中,这称为地址映射
CPU执行程序时,会将程序中的主存地址变换成Cache地址, 这个变换过程叫做地址变换
Cache的地址映射方式有全相联映射、直接映射和组 相联映射
假设某台计算机主存容量为l MB,被分为2048块,每块 512B;
组间采用直接映射 组内采用全相联映射
将Cache分成u组,每组v块
主存块存放到哪个组是固定的 至于存到该组哪一块则是灵活的
例如,
主存分为256组,每组8块 Cache分为8组,每组2块
…
Cache
0块 1块 2块 3块
14块 15块
…
主存
0块 1块
0组
7块 8块 9块
1组
15块
…
…
…
zz 在Cache和下一级存储器之间, 增设一个全相联的小Victim
Cache, 它存放刚刚被替换的那些块, 当发生失效,在访问下一 级存储器前先检查 Victim Cache中有否所需的块, 若有, 则Map该 块入Cache, 能有效提高命中率。
比较 失 效
命中
区号 区号
Cache地址
L0 L1
区号 区号
Li L M-1
…
B0 B1 E0
B7 B0 B1 E1
B7
…
B0
B1
E N-1
…
B7
直接相联算法
3. 组相联映射 举例
组相联映射实际上是直接映射和 全相联映射的折中方案 主存和Cache都分组
主存中一个组内的块数与Cache 中的分组数相同
2040块 2041块
255组
…
2047块
组相联映射方式
主存中的各块与Cache的组号之间有固定的映射 关系
但可自由映射到对应Cache组中的任何一块 例如
主存中的第0块、第8块……均映射于Cache的第0组, 但可映射到Cache第0组中的第0块或第1块;
主存的第1块、第9块……均映射于Cache的第1组,但 可映射到Cache第1组中的第2块或第3块
•新块Map到Cache的哪一行?也就是替换谁?这是个难题。 通常,不替换刚刚使用过的那些行。因为“局部性规律”, 刚刚访问过的内容可能马上被再次访问。保留它们以备 访问。替换有多种算法,目的是使Cache有较高的效率。
三种替换算法
● 下面一些算法多半是从试验得出的:
1. 随机算法: zz 当有替换需要,由硬件随机数发生器产生一个随机 zz 数, 经非常简单的硬件计算为被替换行号,此行即被 zz 新的块替换。 2. FIFO法: zz 在地址变换表中设置一个历史位, 可判断哪是最先 zz 被主存的块Map的行, 先进入者先被替换。 3. LRU法: zz 选择最近没有使用过的行作为被替换者。
Allocate cache line for M block
Load M block into cache line
Deliver RA word to CPU
Done
P.119 Fig 4.15
Cache
来自处理机的主存地址
Cache系统示意
★★
块号 B 字 W 主存地址
失 主存-Cache 效
常采用的组相联结构Cache
每组内有2、4、8、16块,称为2路、4路、8路、 16路组相联Cache
组相联结构Cache是前两种方法的折中方案
适度兼顾二者的优点 尽量避免二者的缺点 得到普遍采用
◆ n 路组相联:每组中有n 个块(n=M/G ) n 称为相联度。
相联度越高,Cache空间的利用率就越高, 块冲突概率就越低,失效率也就越低。
块冲突概率低
只要淘汰Cache中的某一块,即可调入主存的任一块
由于Cache比较电路的设计和实现比较困难,这种 方式只适合于小容量Cache采用
全相联 Map
主存地址
块号 B 字 W
块内地址
比较 命中
失 效
块号
L0
块号
L1
块号
Li
块号
L M-1
W0
W1
B0
…
Wk-1
W0
W1
B1
…
Wk-1
W0