计算机组成原理 学习总结3.6  Cache存储器

3.6 Cache存储器

3.6.1 Cache基本原理

使用Cache的原因
CPU速度越来越快,主存储器与CPU的速度差距越来越大,影响CPU的工作效率。
Cache的作用
在CPU和主存之间加一块高速的SRAM(Cache);
主存中将要被访问的数据提前送到Cache中;
CPU访存时,先访问Cache,若没有再进行数据调度。
使用Cache的依据 程序访问的局部性原理

结构模块化
CPU访问Cache或主存时,以字为单位;
Cache和主存交换信息时,以块为单位,一次读入一块或多块内容;
Cache的每行都设置有标记,CPU访问程序或数据时,先访问标记 。
相邻层之间的数据传送单位
CPU  高速缓存:字 (假设1个字包含4个字节)
高速缓存  主存储器:块 (每块32个字节(8个字))
主存  磁盘:页面 (每页4K字节,包含128块)

存储体
基本单位为字,若干个字构成一个数据块;
地址映射变换机构
用于将主存地址变换为Cache地址,以利用CPU发送的主存地址访问Cache;
替换机构
若要更新Cache中数据时使用的机制;
相联存储器
Cache的块表,快速指示所要访问的信息是否在Cache中;
读写控制

在这里插入图片描述
命中率是指CPU要访问的信息在Cache中的比率;

失效率=1- 命中率
影响命中率的主要因素
Cache 容量:过小时,局部信息装不完,命中率低。 过大时,对提高效率不明显,且成本高。
Cache中块的大小:一般用一个主存周期所能调出的单元数(字或字节)作为一个块大小。

主存系统的平均访问时间

在这里插入图片描述
CPU执行一段程序时,Cache完成存取的次数为1900次,主存完成存取的次数为100次,已知Cache存取周期为50ns,主存存取周期为250ns,求Cache/主存系统的效率和平均访问时间。

命中率
h=Nc/(Nc+Nm)=1900/(1900+100)=0.95
主存与Cache的速度倍率
r=tm/tc=250ns/50ns=5
访问效率
e= 1 /(r+(1-r)h ) = =83.3%

平均访问时间
ta=tc/e=50ns/0.833=60ns

3.6.2 主存与Cache的地址映射

信息从主存→Cache中,如何定位?
Cache的容量小于主存,需要采用某种算法确定主存和Cache中块的对应关系;
地址映射
主存中数据块调入Cache中时,主存数据块与Cache行之间的映射关系;
地址变换
CPU访存时,将主存地址按映射函数关系变换成Cache地址的过程;
地址映射的方式
全相联映射、直接映射、组相联映射;

例:某机主存容量为1MB,划分为2048块,每块512B;cache容量为8KB,划分为16块;每块512B。
主存地址共20位,块内地址9位,主存块号11位。
在这里插入图片描述
由于cache的块数远小于主存的块数,因此一个cache不能唯一地、永久地只对应一个存储块,在cache中,每一块外加有一个标记,指明它是主存的哪一块的副本(拷贝)。

全相联映射(Associative Mapping)

映射关系
主存中的任意字块可调进Cache的任一行中;
地址映射
主存中数据块调入Cache时,可以调入Cache的任一空行;
调入的同时,将主存标记和Cache的行号同时写入块表;
地址变换
CPU访存时,发出主存地址;
将主存标记作为关键字,送入块表中检索每一个单元;
命中时,读出对应单元中的Cache行号;
使用Cache行号和主存地址中的块内地址访问Cache;
在这里插入图片描述

在这里插入图片描述

全相联映射的主存地址格式

在这里插入图片描述
在这里插入图片描述

全相联映射Cache的特点
优点
灵活性好(最理想)
Cache中只要有空行,就可以调入所需要的主存数据块;
缺点
成本高
块表单元字长为m+c位,需要较大容量的Cache块表;
速度太慢
访问Cache时,需将所有标记比较一遍,才能最后判出所需主存中的字块是否在Cache中;
一般较少使用。

【例1】设主存容量1MB,Cache容量16KB,块的大小为512B,采用全相联映射方式。

写出Cache的地址格式。
写出主存的地址格式。
块表的容量多大?
画出地址映射及变换示意图。
主存地址为CDE8FH的单元,在Cache中的什么位置?

写出Cache的地址格式
Cache地址格式
Cache的容量16KB
块(行)的大小为512B
行地址为14-9=5位
写出主存的地址格式
主存的地址格式为
主存容量1MB
块表的容量多大?
块表的大小应为2c×(m + c) 位,即25×16位;
画出地址映射及变换示意图。
主存地址为CDE8FH的单元,在Cache中的什么位置?
主存地址为CDE8FH的单元可映射到Cache中的任何一个字块位置;
CDE8FH= 1100 1101 1110 1000 1111 B
其块/行内地址为:010001111。

直接映射(Direct Mapping)

映射关系
主存中的每一块数据只能调入Cache的特定行中;
直接映射函数为: i = j mod 2c
地址映射
主存中数据块调入Cache时,只能调入Cache的特定行;
同时,将主存标记写入块表中与Cache行地址相同的单元;
地址变换
CPU访存时,发出主存地址;
从主存地址中截取出Cache行号,访问块表的对应单元;
若该单元中数据与主存标记相同,则命中,否则未命中;
命中时,使用Cache行号和块内地址(即主存地址中除主存标记位之外的其余位)访问Cache;

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Cache标记由11位减少为7位,利用主存 地址按字段直接判断,就可知命中与否。
优点:硬件实现简单,成本低。
缺点:主存多个块对应唯一的cache块,即使cache别的地址空着也不能占用。cache空间无法充分利用,降低了命中率。
在这里插入图片描述

特点
一个主存块只能调入Cache的一个特定行中 。
优点
该映射函数实现简单,查找速度快;
主存地址的中间c位即为Cache的行地址;
在块表对应单元中,使用高t位地址(主存标记)进行比较,决定是否命中;
缺点
灵活性差;
主存的2t个字块只能对应唯一的Cache字块,即使Cache中别的字块空着也不能占用。

组相联映射(Set-associative Mapping)

组相联映射是直接映射和全相联映射的一种折中方案。
映射关系
将Cache中的行等分为若干组,主存中的每一块只能映射到Cache的特定组中,但是可调入到该组的任一行中;
组间为直接映射,组内为全相联映射。
设Cache共u组,每组r行,则映射函数如下
组号 q= j mod u
当Cache的一组包含r行时,通常称为r路组相联映射。

在这里插入图片描述

当Cache为2路组相联映射,共4组时,映射函数为q=j mod 4;

特点:
灵活性:比直接映射灵活(主存可映射到组内任一块);
快速性:比全相联比较次数少,只需组内全部比较;
由于比较次数少,电路也较易于实现。

地址映射
主存中数据块调入Cache时,只能调入Cache的特定组;
在该组内,可选择任一行调入数据;
调入的同时,将主存标记和Cache的组内行号写入块表;
地址变换
CPU访存时,发出主存地址;
从主存地址中截取出Cache组号,找到块表的对应组;
在组内,使用主存标记进行检索;
命中时,使用Cache组号、Cache组内行号和块内地址访问Cache;

在这里插入图片描述
cache 读
CPU发出有效的主存地址;
查找相联存储器,判断所要访问的信息是否在Cache中;
若命中,经地址变换机构,变换为相应的Cache地址;
CPU直接读取Cache获取数据;
若未命中,则CPU访问主存,并判断Cache是否已满;
若Cache未满,将该数据所在块从主存中调入Cache;
若Cache已满,使用某种替换机制,使用当前数据块替换掉Cache中的某些块。
cache 写
CPU发出有效的主存地址;
查找相联存储器,判断所要访问的信息是否在Cache中;
若命中,经地址变换机构,变换为相应的Cache地址;
使用某种写策略将数据写入Cache或主存。
若未命中,则使CPU直接写主存数据;
同时根据写策略,决定是否将该块内容调入Cache

Cache的替换策略 ——最不经常使用(LFU)算法

替换原则
将一段时间内被访问次数最少的那行数据替换出去;
使用方法
每行设置一个计数器,从0开始计数;
每访问一次, 被访行的计数器增1;
当需要替换时,将计数值最小的行换出,同时将这些行的计数器都清零。
特点
这种算法将计数周期限定在对这些特定行两次替换之间的间隔时间内,不能严格反映近期访问情况。

Cache的替换策略 ——近期最少使用(LRU)算法

替换原则
将近期内长久未被访问过的行替换出去。
使用方法
每行也设置一个计数器;
每访问一次,被访行的计数器清零,其它各行计数值加1;
当需要替换时,将计数值最大的行换出。
特点
这种算法保护了刚调入到Cache中的新数据行,使Cache的使用率较高。

Cache的替换策略 ——随机替换算法

替换原则
从特定的行位置中随机地选取一行换出。
特点
在硬件上容易实现,且速度也比前两种策略快。
但降低了命中率和Cache工作效率。

Cache的写策略 ——写回式

写入策略
只修改Cache的内容,而不立即写入主存;
只有当此行被换出时才写回主存。
优点
减少了访问主存的次数;
缺点
存在Cache与主存不一致性的隐患。
实现该方法时,Cache行必须配置一个修改位,以反映此行是否被CPU修改过。

Cache的写策略 ——全写式

这种策略又称写透式
写入策略
Cache与主存同时发生写修改,因而较好地维护了Cache与主存的内容的一致性。
Cache中无需设置修改位以及相应的判断逻辑。  
缺点是降低了Cache的功效。
每次同时写入主存和Cache,使写入速度变低。

Cache的写策略 ——写一次法

写入策略
基于写回法,并结合全写法的写策略;
写命中与写未命中的处理方法与写回法基本相同,只是第一次写命中时要同时写入主存。
该写入策略适用于包含多个Cache的系统中;
第一次Cache写命中时,将数据写入主存和一个Cache中;
使系统中的其它Cache可以及时更新或废止该块内容,从而维护系统中该块数据的一致性。

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值