挑战408——组成原理(15)——Cache块中的替换算法

前面我们提到过,在Cache与主存之间的映射过程当中,当遇到已有的主存块的时候,我们的操作是直接进行替换的。因为对于直接映射来说,每一个主存块都对应映射到固定的一个Cache行中,因此在替换的过程中,也就不需要什么替换算法了,直接进行替换就好。

替换算法

其他的两种方式,都需要考虑替换算法
常见的替换算法有:

  • FIFO算法:即先进先出的算法,选择最早调入Cahce的字块进行替换,这种方式实现简单。但是由于总是以最早调入的Cache块为替换目标,没有按照程序的局部性进行。所以并不能提高Cache的命中率。因为最早调入的信息,以后可能还会用到。
  • LRU算法:近期最少使用算法,这种做法替换的是近期用的最少的字块,较好的利用了局部性原理,但是需要时刻记录Cache各个字块的使用情况,以便确定那哪个字块是近期最少使用的。
  • LFU算法:将一段时间内访问次数最少的存储块换出,每行设立一个计时器,每访问一次,计时器的数值加1,替换的时候,将最数值最小的Cache块替换出去。
  • Rand算法:顾名思义,随机替换。

注意:Cache对于用户来说是透明的,用户编程的时候,所用的地址是主存地址,用户并不知道这些主存块是否已经调入了Cache块中,因为主存与Cache之间的替换是由机器自动实现的。

Cache写策略

Cache的写操作比较复杂,因为对Cache块内写入信息,必须与映射的主存块内的信息完全一致,那么如何使得cache与主存的内容一致呢?目前常用的方式有以下两种:

  1. 全写法(write—through):又称写直达法,即在进行写操作的同时,写入Cache和主存,这样主存中的数据与Cache中的数据就能时刻保持一致。但是这样会导致访存次数的增加。
  2. 写回法(write—back):即写操作的时候,只把数据写入Cache中,待到Cache块要被换出的时候,再写出到主存中,,为了识别Cahce中的数据是否与主存中的一致,于是在Cache中每一块都增设一个标志位(也称为“脏”位)。脏位有两种状态,清:表示未被修改过,这个块当然也与主存间的数据块的内容一致了;浊:则表示被修改过,内容与主存不一致,于是替换算法就将此块替换出去。并将浊位置为清。显然在计算机中用0和 1 来表示这两种状态

而上面的两种状态,都是对应于写命中的情况(也就是CPU要写的单元都在Cache上面),那么当CPU访问的数据块不在Cache中,那又该如何?我们也常常有两种做法:

  • 写分配法:加载主存的块到Cache中,然后更新这一块。(所以常常跟写回法一同使用 )
  • 写不分配法:对应于上面的做法,这个做法就是只是将要修改的内容写入到主存块而已,不进行与Cache之间的调块

Cache的改进

Cache的特性决定了它不能大容量的存储,所以目前我们普遍采用多个Cache,主要的改进方面有1,增加Cache的级数。2将统一的Cache变成分立的Cache。于是有了多级缓存的概念。将缓存分为多个级别,越接近CPU,速度就越快,容量也就越小。所以指令Cahce和数据Cache一般都在L1(靠近CPU)的那一级别。随着集成电路的发展,又把一级缓存直接与CPU做 在同一个芯片上,称为片内缓存。其他的称之为片外缓存。

下面来看一道Cahce——主存映射的题目

在这里插入图片描述
其实有三问,但是我们只需要了解一问就好了。接下来读题:
第一,主存容量为16mb,也就是2的24次方b,所以主存地址的总字段长度为24位。(不然表示不了那么多的地址)
第二,Cache容量的为8kb,根据前面的数据,我们可以知道这个机器是用字节存储的,所以每个字块8个字,每个字32位。32位就是4个字节,即8 X 4B.,所以块内地址一共需要5位。
第三,我们要确定组内地址,也就是说Cache要被分成几组。我们刚刚得到了块内的地址,那么这个时候我们就知道了Cache一共有8kb/2^5 =2的8次方,也就是2的8次方块。
于是的得出组数为:2的8次方除以4(4块为一组) = 2的6次方。
所以组内地址字段为6.
第四,用总长度减去已知的两个长度,于是得到标记字段。
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值