为什么要使用缓存、
避免cpu空等现象,cpu相比主存相比具有容量小速度快的特点
程序访问的局部性原理即程序执行数据使用的规律
时间的局部性:当前使用的指令和数据在不久的将来可能还会使用到
空间的局部性:当前正在使用的指令和数据相邻的指令和数据在不久的将来可能会用到,从这一点可以看出cache和主存数据交换的单位是当前的和相邻的即块为单位
cache的工作原理
1.cpu如何知道主存的块信息是否被缓存到cache?
通过cache的标记和主存的块号(或者区号)对比
主存和cache层次结构当中按块进行存储的,按块进行传输,块的大小是相同的,块内地址是完全相同的(块号是不一样的)
命中和不命中
命中:cpu要访问的数据已经调用缓存则命中
不命中:cpu要访问的数未调入缓存
命中率:cpu欲访问的信息再cache中的比率,命中率与cache的容量与块长有关
块长取一个存取周期内从主存调出的信息长度
cache——主存系统的效率,效率e与命中率有关 e = 访问cache的时间/平均访问时间 *100%
cache的基本结构:
这里需要插入一张图片
cache的读:
这里需要一张图片
cache的写:
这里需要一张图片,
解决缓存和主存数据不一致的问题的方法:
写直达法:写操作时数据即写入缓存也写入主存。写操作时间就是访问主存的时间,cache块退出时,不需要对主存执行写操作,更新策略比较容易实现(有点主存和内存一直保持一直,缺点可能对同一个内存块进行多次的写,造成缓存和主存之间发生频繁的信息交换)
写回法:写操作时只把数据写入cache而不写入主存,当cache数据被替换出去时,才写回主存(多处理器情况下,各个处理器的缓存都有主存当中数据的副本,这个需要在执行并行结构时需要考虑)
cache的改进:
1)增加cache的级数:片载(片内)cache,片外cache、
2)统一缓存和分立缓存
将指令和数据统一放到一个cache
将指令和数据分别放到不同的cache中
cache主存的地址映射:
1)直接映射:主存当中任意一个给定的块,它只能映射到(装载)到指定的cache块当中。原理将主存按照缓存的大小分为若干的区,将每个区的指定块放入cache的指定块当中即每个缓存块i可以和若干个主存块对应,每个主存块只能和一个缓存块对应(特点:速度快,cache的利用率不高)
2)全相联映射:主存当中任何一个块可以给到cache的任何一个块中(速度较慢,cache利用率较高)
3)组相联映射:组的概念是指对cache的若干个块分为一个组,然后主存按照缓存组的大小分为若干个区,每个区内的任意块可以给到指定组中的任意块中(速度和利用率是直接相连和全相连的折中)
替换算法:
先进先出FIFO算法
近期最少使用LRU算法