1、cache是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术
2、cache是介于CPU与主存M2 之间的小容量存储器
3、从功能上看,它是主存的缓冲存储器,由高速的SRAM组成
4、为追求高速,包括管理在内的全部功能由硬件实现因而对程序员是透明的
5、目前,已将cache放入CPU中,其工作速度接近于CPU,从而能组成两级以上的cache系统
6、cache除含SRAM外,还有控制逻辑; 如果cache在CPU芯片外,它的控制逻辑一般与主存的控制逻辑合成在一起,称为主存/cache控制器; 若在CPU芯片内,则由CPU提供它的控制逻辑
7、CPU与cache之间的数据交换是以字为单位的; 而cache与主存之间是以块为单位的
8、当CPU读取主存中一个字时,便发出此字的内存地址到cache和主存; 此时cache的控制逻辑依据地址判断此字当前是否在cache中,若是,此字立即传送给CPU; 若不是, 则用主存读周期把此字从主存中读出送给CPU,与此同时,把含有这个字的整个数据块从主存中读出送到cache中
9、cache原理图
10、分配给cache的地址存放在一个相联存储器CAM中,它是按内容寻址的存储器; 当CPU执行访存指令时,就把所要访问的字的地址送到CAM;
11、cache命中率
12、访问效率
13、把主存地址定位到cache中叫做地址映射,在计算机中是用硬件实现的了当CPU访问存储器时,它给出的一个字的内存地址很快会变换成cache的地址
14、全相联映射方式
- cache的数据块的大小称为行, 主存的数据块的大小称为块
- 在全相联映射中,将主存中一个块的地址(块号)与块的内容(字)一起存于cache的行中
- 这种带全部块地址一起保存的方法可使主存的一个块直接拷贝到cache中的任意一行上,非常灵活
- 全部标记用一个相联存储器来实现,全部数据用一个普通RAM来实现
- 缺点是比较器电路难于设计和实现,只适合小容量的cache使用
- 一个主存块只能拷贝到cache的一个特定的行位置上去
- cache的行号i 和主存的块号j 有如下关系: i = j mod m; m 是cache中行的数目
- 在直接映射中,cache将s 位的块地址分成两部分:r 位作为cache的行地址; s - r 位作为标记与块数据一起保存在该行上; 当CPU以一个给定的内存地址访问cache时,首先用r 位行号找到cache中的此一行, 然后用地址中的 s- r 位标记部分与此行的标记在比较器中做比较,若相符则命中,否则,未命中;
- 将cache分成u 组, 每组 v行
- 主存块存放在哪个组是固定的,至于是哪一行是灵活的
- m = u x v; 组号 q = j mod u
- 块内存地址中s 位块号划分为两部分, 低位的d 位(2^d = u)用于表示cache的组号, 高位的 s- d位作为标记与块数据一起存放在此组的某行中
- cache工作原理要求它尽量保存最新的数据
- 最不经常用(LSU)算法; 应将一段时间内被访问次数最少的那行换出
- 近期最少使用(LRU)算法; 将近期内长期未被访问过得行换出
- 随机替换
- 由于cache的内容只是主存部分内容的拷贝,它应当与主存内容保持一致
- 写回法;当CPU写cache命中时,只修改cache的内容,而 不立即写入主存,只有在当此行被换出时才写回主存; 明显的,这样存在着内存与cache不一致性的隐患
- 全写法;当CPU写cache命中时,cache与主存同时发生修改; 当未命中时,直接向主存进行写入;
- 写一次法;在第一次写命中时要同时写回主存; 这是因为第一次写cache命中时,CPU要在总线上启动一个存储写周期,其他cache监听到此主存块地址及写信号后,即可拷贝该块或者是几时作废,以便维护系统全部cache的一致性