第三章存储器之高速缓冲存储器(超重点)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章存储器之⾼速缓冲存储器(超重点)
⾼速缓冲存储器(每年必考)
⼀、概述
1. 问题的提出
避免 CPU “空等” 现象
CPU 和主存(DRAM)之间速度的差异
缓存主存
容量⼩容量⼤
速度⾼速度低
程序访问的局部性原理
空间的局部性(冯·诺依曼机,重复访问):空间局部性是指如果⼀个存储单元被访问,则该单元邻近的单元也可能很快被访问。

时间的局部性:时间局部性是指如果⼀个存储单元被访问,则可能该单元会很快被再次访问。

这是因为程序存在着循环。

2. Cache 的⼯作原理
Cache 保存的信息只是主存中最急需执⾏的若⼲块的副本。

⽤主存地址的块号字段访问 Cache 标记,并将取出的标记和主存地址的标记字段相⽐较。

若相等,说明访问 Cache 有效,称 Cache 命中;若不相等,说明访问Cache ⽆效,称 Cache 不命中或失效。

(1)主存和缓存的存储:主存和缓存按块存储,块的⼤⼩相同
(2)命中与未命中
缓存共有 C 块,主存共有 M 块(M >> C)
命中:主存块调⼊缓存,主存块与缓存块建⽴了对应关系,⽤标记记录与某缓存块建⽴了对应关系的主存块号
未命中:主存块未调⼊缓存,主存块与缓存块未建⽴对应关系
(3)Cache 的命中率
CPU 访问的信息在 Cache 中的⽐率
命中率与 Cache 的容量与块长有关,⼀般每块可取 4~8 个字
块长取⼀个存取周期从主存调出的信息长度,同时块长取多少存储字与多体交叉也有关系
(4)Cache -主存系统的效率
假设 Nc 为访问 Cache 的总命中次数,Nm 为访问内存的总次数,则命中率为:h = Nc /(Nc+Nm)
设 Cache 命中率为 h,访问 Cache 的时间为 t c,访问主存的时间按为 t m(t c << t m)
平均访问时间(同步)=h × t c+(1-h) × t m ——————> 同步:地址线传输会到达Cache也会到达内存,如果数据在 Cache 中命中,那么数据直接送到 CPU ,内存不动;如果没中就到内存中传输。

平均访问时间(异步)=t c + (1-h) × t m ——————> 异步:⾸先访问 Cache,如果没命中再次访问内存,从内存中取出数据。

h ×t c+(1-h) × (t c+t m)
⽆特殊说明全按同步计算
效率 e 与命中率有关
e = 访问 Cache 的时间 / 平均访问时间 × 100%
例题:假设 Cache 的⼯作速度是主存的5倍,且 Cache 被访问命中概率为 95 %,则采⽤ Cache 后存储器的性能提⾼了多少?
设 Cache 速度为 t,内存为 5t,( 5t / (0.95×t+0.05×5t) )- 1
3. Cache 的基本结构
4. Cache 的读写操作
(1)Cache 的读操作
当 CPU 发出读请求时,如果 Cache 命中,就直接对 Cache 进⾏读操作,与主存⽆关;如果 Cache 不命中,则仍需访问主存,并把该块信息⼀次从主存调⼊Cache内。

若此时Cache已满,则须根据某种替换算法,⽤这个块替换掉Cache中原来的某块信息。

(2)Cache 的写操作
由于 Cache 中保存的只是主存的部分副本,这些副本与主存中的内容能否保持⼀致,是 Cache 能否可靠⼯作的⼀个关键问题。

当CPU 发出写请求时,如果 Cache 命中,有可能会遇到 Cache 与主存中的内容不⼀致的问题。

处理的⽅法有:写直达法和写回法。

(命中的情况下)如果写 Cache 不命中,就直接把信息写⼊主存(写直达法),并有两种处理⽅法:写分配法和⾮写分配法(不加载到⾼速缓存中)。

写直达法(Write through):写操作时数据写⼊ Cache ⼜写⼊主存
写操作时间就是访问主存的时间,读操作时不涉及对贮存的写操作,更新策略⽐较容易实现。

写回法(Write back):写操作时只把数据写⼊ Cache ⽽不写⼊主存,当 Cache 数据被替换出去时才写回主存写操作时间就是访问 Cache 的时间,读操作 Cache 失效发⽣数据替换时,被替换的块需写回主存,增加了 Cache 的复杂性
(简单的说就是我先把数据放到 Cache 中,啥时候 Cache 不要了,再将主存中的数据替换)
写回法在 Cache 需要增加修改位(dirty bit)与标记放在⼀起,不论是写回法还是写直法还需要⼀个有效位(存在位)与标记并⾏,来判断访问是否是Cache,也就是是否命中。

注意有的⾼校可能会考多级Cache的命中率
的命中率))
5. Cache 的改进(
的改进(注意有的⾼校可能会考多级
增加 Cache 的级数
⽚载(⽚内)Cache
⽚外 Cache
统⼀缓存和分⽴缓存
流⽔线⼯作解决结构相关性(结构冒险)————> 把指令与数据分离即可解决
分为指令 Cache 和数据 Cache
与主存结构有关
与指令执⾏的控制⽅式有关(是否流⽔)
⼆、Cache - 主存的地址映射
1. 直接映射
直接映像是指主存中的每⼀个块只能被放置到 Cache 中惟⼀的⼀个指定位置,若这个位置已有内容,则产⽣块冲突,原来的块将⽆条件地被替换出去。

直接映像⽅式是最简单的地址映象⽅式,成本低,易实现,地址变换速度快,⽽且不涉及其它两种映像⽅式中的替换算法问题。

但这种⽅式不够灵活,Cache的块冲突概率最⾼、空间利⽤率最低。

可能会发⽣冲突,导致⾼速缓存造成浪费
例如增加⼀个标记位,假如现在有 50 组[编号 0 ~ 49]学⽣要考试,每组学⽣10⼈[学⽣编号 000 ~ 499,前两位组号,中间⾏号,最后⼀位列号],只有⼀个房间进⾏考试,该房间是 10 × 10 座位,⾏列编号分别从0~9。

现随机抽取组号进⾏考试,不巧抽取123、223、323、423进⾏考试,在同⼀座位考试究竟谁来考试??发⽣冲突。

i:第 i 个缓存块,j:第 j 个主存块,C:Cache 的块数;(i=j%C)
每个缓存块 i 可以和若⼲个主存块对应
每个主存块 j 只能和⼀个缓存块对应
⽐较器后进⾏有效位判断,如果标记相同但⾥⾯存储内容不同,访问的是主存在 Cache 中没有命中
2. 全相联映像
全相联映像就是让主存中任何⼀个块均可以映像装⼊到 Cache 中任何⼀个块的位置上。

全相联映像⽅式⽐较灵活,Cache的块冲突概率最低、空间利⽤率最⾼,但是地址变换速度慢,⽽且成本⾼,实现起来⽐较困难。

组相联映射(看教材吧,主存可能不⼀样
看教材吧,主存可能不⼀样))
3. 组相联映射(
组相联映像将主存空间按 Cache ⼤⼩等分成区后,再将 Cache 空间和主存空间中的每⼀区都等分成⼤⼩相同的组。

让主存各区中某组中的任何⼀块,均可直接映像装⼊Cache中对应组的任何⼀块位置上,即组间采取直接映像,⽽组内采取全相联映像。

下图为:⼆路组相联
标记组号Cache 块地址字块内地址
主存不分组(某⼀主存块 j 按模 Q 映射到缓存的第 i 组中的任何⼀块)
|标记|组地址|字块内地址|
|---|---|---|---|
⼩结:
直接某⼀主存块只能固定映射到某⼀缓存块
全相联某⼀主存块能映射到任⼀缓存块
组相联某⼀主存块只能映射某⼀缓存组中的⼈⼀块
三、替换算法(主要针对组相联)
1. 先进先出(FIFO)
按调⼊Cache的先后决定淘汰的顺序,即在需要更新时,将最先进⼊Cache的块作为被替换的块。

这种⽅法要求为每块做⼀记录,记下它们进⼊Cache的先后次序。

这种⽅法容易实现,⽽且系统开销⼩。

其缺点是可能会把⼀些需要经常使⽤的程序块(如循环程序)也作为最早进⼊Cache的块替换掉。

2. 近期最少使⽤(LRU)算法(局部性)
LRU算法是把 CPU 近期最少使⽤的块作为被替换的块。

这种替换⽅法需要随时记录Cache中各块的使⽤情况,以便确定哪个块是近期最少使⽤的块。

LRU算法相对合理,但实现起来⽐较复杂,系统开销较⼤。

通常需要对每⼀块设置⼀个称为“年龄计数器”的硬件或软件计数器,⽤以记录其被使⽤的情况。

四、试题
1. 假设主存容量为 512 KB,Cache 容量为 4KB,每个⼦块为16字,诶个字 32 位
(1)Cache 地址有多少位?可容纳多少块?
(2)主存地址有多少位?可容纳多少块?
(3)在直接映射⽅式下,主存的第⼏块映射到 Cache 的第5块(假设开始字块为第1块)?
(4)画出直接映射⽅式下主存地址字段中各段的位数。

解析:地址线的位数与容量有关
512KB = 219 B
4KB = 212 B
16 个字 = 24
32bit/8 = 4B = 22B
答案:
(1)由于地址线的位数与容量有关,故Cache 地址有 12 位;212/(24×22)= 64(块)
(2)19;8K
(3)第 5 个缓存块,j:第 j 个主存块,C:Cache 的块数**;(5=j%64)————> 假设开始字块为第1块(这⾥规定从 1 开始,如果题⽬不说⼀般从 0 开始)
(4)
标记Cache块地址块内地址
19-6=712-6=66
标记Cache块地址块内地址
2. 假设主存容量为 512K×16位,Cache 容量为 4096×16位,块长为4个16位字,访存地址为字地址。

(1)直接映射⽅式下,设计主存地址格式
(2)全相联映射⽅式下,设计主存地址格式
(3)⼆路组相联映射⽅式下,设计主存地址格式
(4)若主存容量为 512×32位,块长不变,在四路组相联映射⽅式下,设计主存地址格式
答案:按字编址,每个字2B
(1)直接映射:Cache 地址线(地址线的位数与容量有关)= Cache块地址线 + 块内地址线
标记Cache块地址块内地址
19-10=912-2=102
(2)全相联
标记Cache块内地址
172
(3)⼆路组相联,Cache块两块⼀组
标记Cache块地址块内地址
17-9=8210/2=29(⼆路)2
(4)块长不变,Cache块地址地址线 + 标记地址线 + 块内地址线 = 主存所需要的地址线标记Cache块地址块内地址
20-8-2=10210/22=28(四路)2
注:为什么主存需要20根地址线?
若主存容量为 512×32位,按字编址
512KB = 219 B
32bit/8 = 4B = 22B
主存容量= 219B × 22B / 2B = 220 ————> 20根地址线。

相关文档
最新文档