对于理解高速存储器首先要知道局部性原理,局部性原理分为时间局部性和空间局部性。分别是在未来要使用的信息可能是现在正在使用的信息,另一个是最近的未来要用的信息很可能是正在使用的信息在存储空间上是邻近的。
1.Cache工作的基本原理
cache一般位于存储器层次结构的顶层,通常由SRAM构成;由数据总线,地址总线和cpu连接,cache中保存主存中最活跃的若干副本。cpu发出读请求的时候,如果访存地址在cache中命中,就将其地址转化为cache的地址,否则的话还要取主存那里取访问。然后就是有关于cache命中率的介绍;cache命中率指的是cpu访问的内容是cache已经存在的单元内容,cpu发现cache没有自己要找的内容的话,就会去主存继续寻找。然后就是我们要如何求出平均访问时间?
其实访问的时候由两种情况,一种是cache和主存同时访问,一种是先访问cache再访问主存。比如说我有一个主存,读取速度为T,cache的读取速度为5T,命中率为95%,我们采用第一种方式的总时长为T*95%+5%5T=1.2T,第二种方式自行计算。
然后我们由此引出三个问题
2.cache和主存的映射方式
就是说怎么把主存的存储内容放入cache中;emmm这里由三种方式
(1)直接映射
这个方式主存中的每一块只能装入cache中的唯一的位置,因为它是用主存块号对cache总块数取模(实现简单,但是不够灵活,没办法用替换算法)
(2)全相联映射
这个方式主存中的每一块可以装入cache中的任何位置
(3)组相联映射
这个方式主存中的每一块可以装入cache中的所分的组内,比如说cache有8块,我把它分为两组,然后用地址块对分组数取模,假设一个地址快对组数取余为2,说明它可以放入cache里面第二组中两个位置的任意一位置。就是第一种方法和第二组的结合
【注意】
8个cache行的话直接映射中只要找高位的前三位就是对应的行号
而如果是用二路组相连,两位就够了00 01 10 11 刚好表示0 1 2 3四组。
3.cache替换算法和写入策略
常用的替换算法有下面四种:
1.随机算法
2.先进先出算法
3.近期最少使用算法
算法将一段时间内被访问次数最少的那个块替换出去。每块设置一个计数器,从0开始计数,每访问一次,被访块的计数器就增1。当需要替换时,将计数值最小的块换出,同时将所有块的计数器都清零。比如cache有四块,每次需要调用1 2 3 4 5 1 2 3 4 5,就会出现抖动的现象。
4.最不经常使用算法(不遵循局部性原理)
设置一个计数器,Cache每命中一次,命中块计数器清零,其他各块计数器增1。当需要替换时,将计数值最大的块换出。
Cache写策略(保持数据的一致性)
1.全写法
CPU对cache写命中时,数据同时写入cache和主存,新调入的块直接覆盖
2.写回法
CPU对cache写命中时,只修改cache里面的内容,当此块被换出的时候,才要写回(判断是否被修改,需要设置脏位作为标志位)
未命中时候:
1.写分配
加载主存的块到cache中,更新cache(与写回法结合)
2.非写分配
只写入主存,不进行调块(与全写法结合)