关于CPU对Cache的访存操作 浅解

最近在做计算机组成原理关于高速缓存处理器的相关习题,由于一开始没有完全理解导致做题时特别崩溃。在做错无数次题后我感觉自己有必要总结一下自己对Cache的理解,以防以后再忘记。

一 | 前因

1 为什么需要Cache?

首先我们需要明白为什么需要使用Cache。在CPU访存时,其实是要取主存中存储的数据,但由于 CPU的访问速度远远大于主存的读、取数据的速度,所以需要在他们之间使用一种更快的介质作为缓存,将我们当前常用和与当前访问的数据空间相接近的数据存储到这个缓存中。

在上面这段话中,我们常用到的缓存就是 高速缓冲存储器Cache ;而利用数据在存储空间上的邻近的这种思想叫做 空间局部性原理 ;利用当前使用数据在未来很可能还会用到的这种思想叫做 时间局部性原理

2 Cache是什么?

Cache通常由SRAM构成,其位于存储器层次结构的顶层,这也就意味着它的 速度很快、容量较小、价格较高 。在速度上应该仅次于寄存器,有着一器之下,好几器之上的地位。

3 Cache如何起作用?

当CPU发起读请求时,会先在Cache中查找数据(假设是找一个字),如果找到了,则称为 访存地址在Cache中命中 。此时就对Cache进行读操作,就不需要访问主存了;若没有命中,则再访问主存,并把此字所在的块一次性从主存调入Cache

以上过程均由 硬件实现 。【注:有些计算机也会同时访问Cache和主存,优点是可以提高平均访问时间,缺点是设计结构更复杂】

二 | Cache与主存

1 Cache和主存中都存些什么?

为了便于Cache和主存交换信息,Cache和主存都被划分为相等的 。Cache块又叫做Cache行,每个“块”由若干字节组成,块的长度被称为块长。

从一的解释中,我们可以知晓Cache只是为了加快CPU对主存中数据的访问的中间介质,所以在Cache中存储的数据是主存中最活跃的部分数据的副本。由于计算机中存储的都是01数据,所以只需要明白Cache和主存分别存储与什么相关的01位代码即可,也即,明白它们的存储地址结构即可。

2 关于主存和Cache的存储地址结构

因为Cache比主存小,所以无法一对一映射。而访存地址都是与主存地址保持一致的,所以我们需要能够从主存地址推得其Cache中存储地址的映射方式。通常有三种方式:①直接映射 ②全相联映射 ③组相联映射。详细映射方式在此不介绍,需要注意的是 它们的地址结构都是主存中存储的地址结构 。而不是Cache中的。

直接映射 地址结构:

全相联映射 地址结构:

组相联映射 地址结构:

其中,块内地址计算方式取决于单个块的容量以及计算机编址方式(没说明就是按字节编址)。如若每个Cache块的容量为2bB,则块内地址为b位。

Cache行号和组号很容易根据Cache的行数和组数算出,如Cache有2c行,则Cache行号占c位。

然后再根据主存总容量,设为2kB,则总的地址长度就应为k位,那么可以得到,直接映射中标记的位数为 k - b - c;

Cache的地址结构通常如下:

  • 有效位:又称为装入位,用来表示对应页面是否在Cache中
  • 脏位:又称为修改位,用来表示页面是否被修改过 (当不考虑一致维护性时,则没有该位)
  • 替换控制位:当使用替换算法时,需要用控制位表示使用时间长短 (当不使用替换算法时,则没有这位,如采用直接映射)
  • 标记位:用于表示是主存中哪一块的副本

根据Cache的地址结构,我们可以将Cache的总容量划分为两部分,如下:

  1. 存储容量(即存储的数据)
  2. 标记阵列容量(包括有效位、脏位、替换控制位、标记位)

通常题目中给出Cache行长xxB,指的都是存储容量。

如果你看懂了,希望能给作者点一个免费的赞,鼓励一下。如果还有没理解的欢迎在评论区一起交流。作者能力有限,若有错误,还望斧正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值