工作原理
- 程序访问的
局部性:- 在一段时间内,对局部方位内的存储器频繁访问,而对其他大区域很少访问。 大量的典型程序运行情况分析表明,程序访问具有局部性。
- 根据程序访问的局部性特点,在cpu与主存之间设置一高速但容量较小的存储器(cache),将当前正在执行的程序、数据和周围局部地方放在其中,将会大大提高整个程序运行的速度。
一、基本设计思想:
- 主存和cache之间的信息交换,以块为单位,每块包含的字数一样多。
- Cache的每行都设置有
标记,cpu访问程序或数据时,先访问标记。 - 当Cpu访问主存某内容时,先检查该内容是否在cache中,若在就从cache中读出(cache命中),若没有就从主存中读出,同时将该单元所在块的所有字都读入cache中,以便下次访问。
- 除了包含快速的SRAM外( Cache通常使用昂贵但较快速的SRA
M技术(通常认为cache是静态随机存储器)。 Cache还要有相应的控制逻辑支持`。- 若cache在cpu外,则cache的控制逻辑一般与主存的控制逻辑合成在一起。
- 若cache在cpu内,则由cpu提供Cache的控制逻辑。
二、Cache的基本结构
-
存储体:基本单位为字,若干个字构成一个数据块 -
地址映射变换机构:用于将主存地址变换为Cache地址,以利用Cpu发送的主存地址访问cache。 -
替换机构:用于更新Cache中数据。 -
相连存储器:Cache的块表,快速指示索要访问的信息是否在Cache中(提高性能); -
读写控制:对读写操作实施控制
三、Cache读操作
- cpu发出有效的主存地址;
- 经过
地址变换机构,变换为可能的Cache地址; -
查找块表,判断所访问的信息是否在Cache中;- 若在,则直接读取数据。
- 若不在,则cpu访问主存,并判断cache是否已经满了。
- 若Cache未满,则将改数据所在块从主从中调入Cache
- 若Cache已满,使用替换机制,更新Cache中的某些块。
四、Cache写操作
-
CPU发出有效的主存地址
-
经过地址变换机构,变换为可能的Cache;
-
查找对于的相联存储器,判断所要访问的信息是否在Cache中,且是否已经更新
- 若不在,则使CPU直接写主存数据
- 若在,则使用某种写策略将数据写入Cache
-
Cache写操作有三种
- 直写式系统
- 缓冲直写式系统
-
回写式系统(常用)- 为每一块个数据块设置一个
更新位。- 当CPU准备写入数据时,若果更新位是1,则表示该块数据未被更新到主存中,则cpu跳过cache直接将数据写入到主存中,再回写入cache中。
- 如果更新位是0,则表示该块数据已经更新备份到主存中,cpu直接将数据写入到cache中。
- 为每一块个数据块设置一个
五、Cache的评价指标
-
Cache的命中率- 访问cache的次数占总访问次数的比例。
-
影响cache命中率的因素:- Cache容量 :如果容量过小,命中率低。 容量过大,对提高效率不明显,且成本高。
- Cache中的块大小:一般用一个主存周期所能调出的存储单元数(字或字节)作为一个块。
-
主存储系统的平均访问时间
- 主存系统的访问时间:cache系统的访问时间加上主存的访问时间
- 这一题直接用(190050+250100)/(1900+100) 计算更快
高速缓存存储器的地址映射
- 信息在主存和Cache中,确定它们的对应关系就需要借助地址映射。
-
地址映射的定义:- 主存地址按某种规律(函数)映射到cache中。
- 当cpu访问存储器时,它发出的内存会自动变换为cache地址。
-
实现:采用硬件,很快。而且编程人员不会感到Cache的存在。这种特性也称为cache的透明性。 -
主要地址映射方式:- 全相联方式
- 直接方式
- 组相联方式
几个概念
- “
行的概念“”: Cache的数据块称为”行”,用Li表示。 - “
块”: 主存的数据称为“块”,用Bj来表示 (每个数据块和cache的行的大小完全一样, 而且每个块或行都是由若干个连续的字组成的)。
一、全相连映射方式:
一、映射关系
- 主存中任意一个块
可以映射到cache中的任意一行中。需要在cache中的一行增加标记部分,存放该行内容的主存块的块号。 -
二、主存与cache地址格式
- 将CPU发出的内存地址的快号部分与cache所有行的标记进行比较 ,如果有相同的,则cache命中了。如果找不到,则没命中。
- 与主存中某块的标记相同,则表示cache命中了。
三、优缺点
-
灵活性好- Cache中只要有空行,就可以调入所需的主存数据块
-
利用效率不高- 因为存在了一个m位的标记位,使cache的行包含了一些对存储无用的信息。
-
速度太慢- 每次访问cache时,需将一个一个遍历并比较标记,才能判断所需主存的字块是否在cache中
- 因此全相联映射方式更适用于小容量的cache。(容量一大,所占位数就大,块内地址的位数不变,行内地址位数不变,那么行内标记的位数就更大了,利用率更不理想。)
五、例题!!!
- cache的地址格式:
- cache的容量是16KB,所以按字编码的话,cache的总线长度是14位。
- 块(行)的大小是512B,也就是说块(行)内地址是9位。
- 因此行标记 14-9=5位 ,也就是说cache一共有32行。
- 主存的地址格式
- 主存容量1MB,一共是20位。
- 块的大小是9位,所以块标记公用11位。 一共2048块
3.块表的容量 - 根据行的数量和块标记的位数,可以得到块表的容量是 32*11位
-
这个块表不包含地址部分,只有标记部分。块表中块的数量由cache行的数量决定。
直接映射方式:
一、简介:
- 一些约定的主存块只能复制到cache中的一个特定行中。
- 如果cache中有m行,则主存的第0块,第m块,第2m块,……,第2s-m块只能映射到cache的第0行。(s是块标记个数,m是行数)
- 主存的第1块,第m+1块,第2m+1块,……,第2s-m+1块只能映射到cache的第1行。
二、映射关系
三、主存地址格式
- 假设主存共2n个单元,分成2s个块,每块单元数为2w个,则主存地址为s+w位。(
2^s^个块代表块标记数目,每块单元数2^w^代表块内地址位数) - Cache空间被分成2m行,每行大小也应该为2w单元,则Cache地址为m+w位。