一、Cache 的基本工作原理
Cace位于存储器层次结构的顶层,通常由SRAM构成。
Cache和主存都被分成若干大小相等的块(Cache块又称为Cache行),每块由若干字节组成,块的长度称为块长(Cache行长)。由于Cache的容量远小于主存的容量,所以Cache中的块数要远少于主存中的块数,它仅保存主存中最活跃的若干块的副本。故而Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache。
当CPU发出读请求时,如果访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关;如果Cache不命中,则仍需访问主存,并把此字所在的块一次从主存调入Cache内。若此时Cache已满,则需根据某种替换算法,用这个块替换掉Cache中原来的某块信息。值得注意的是,CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换则是以Cache块为单位。
二、Cathe的实现依据
三、Cache 和主存的映射方式
1.直接映射
主存数据块只能装入Cache中的唯一位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)。直接映射实现简单,但不够灵活,即使Cache存储器的其他许多地址空着也不能占用,这使得直接映射的块冲突概率最高,空间利用率最低。
2.全相联映射
可以把主存数据块装入Cache中的任何位置。全相联映射方式的优点是比较灵活,Cache块的冲突概率低,空间利用率高,命中率也高;缺点是地址变换速度慢,实现成本高,通常需采用昂贵的按内容寻址的相联存储器进行地址映射。
3.组相连映射
四、Cathe中主存块的替换算法
在采用全相联映射和组相联映射方式时,从主存向Cache传送一个新块,当Cache中的空间已被占满时,就需要使用替换算法置换Cache行。而采用直接映射时,一个给定的主存块只能放到一个唯一的固定Cache行中,所以,在对应Cache行已有一个主存块的情况下,新的主存块毫无选择地把原先已有的那个主存块替换掉,因而无需考虑替换算法。
常用的替换算法有随机算法、先进先出(FIFO)算法、近期最少使用(LRU)算法和最不经常使用(LFU)算法。
1)随机算法:随机地确定替换的Cche块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低。
2)先进先出算法:选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉。
3)近期最少使用算法:依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FIFO要高,是堆栈类算法。
4)最不经常使用算法:将一段时间内被访问次数最少的存储行换出。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/105278.html