映射方法
1.直接映射
按照Cache的大小,将主存储体划分为区,每个区的大小都和Cache大小一致。
每个区的第0位只能放到Cache中的第0个字块,每个区的第1位只能放到Cache中的第1个字块,以此类推。
放入之后,要在Cache前面的标记中,记下是哪个区。
CPU访问时,会根据字块标记来判断是否为对应区的字块。
问题:
1.冲突问题严重
比如第0区的第0块已经放入了Cache中,当第1区的第0块也想放入Cache中时,根据映射规则,只能放入字块0中,产生冲突。即使其他字块空闲。
2.每个缓存块可以和多个主存块对应,每个主存块只能和一个缓存块对应
2.全相联映射
主存储器中的每个字块都可以放到Cache中
这样在Cache中寻找起来就比较慢
3.组相联映射
将Cache分组,每组包含若干块。
然后将主存按照组的个数划分为区。
每个区的第0块,只能放到第0组,可以是任意位置,每个区的第1块,只能放到第1组,可以是任意位置…以此类推。
替换算法
上面讲述了主存块如何映射到Cache中,如果映射过去发现Cache位置被全占用了,那么就要用替换算法,将主存块换出。
1.先进先出(FIFO)算法
认为先放进去的已经使用完,进行替换
2.近期最少使用(LRU)算法
在最近一段时间内,使用最少的块被替换出