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。