容易理解的计算机组成原理中主存与Cache的3种映射方式(直接映射,全相联映射,组相联映射)

容易理解的计算机组成原理中主存与Cache的3种映射方式(直接映射,全相联映射,组相联映射)

一.为了让大家更加方便的理解,我首先设置了两个问题,同时也写了相应的个人所理解的答案

  1. 为什么引入Cache?
    答: Cache是一种高速缓冲存储器,他位于cpu和主存之间,是为了提高cpu对主存的访问速度。

  2. 为什么主存与Cache之间要进行映射?
    答:前面我们知道,Cache是为了提高cpu对主存的访问速度。故cache可看做是一种介质,而这种介质是主存的替代品,而cpu只认主存的单元地址,所以我们需要把主存的地址映射到cache,这样cpu直接访问cache即相当于间接的访问主存,从而提高了cpu对主存的访问速度。

二.正式进入三种映射方式

1.直接映射

直接映射:说白了就是一对一的映射方式。前者 ‘一’ 指的是主存中的任意一块,主存中的不同分区下的块号,后者 ‘一’ 指的是cache中特定的某一个块。
直接来看下面主存与cache之间的直接映射,如下图:
在这里插入图片描述

从上面图形分析着手:左边的cache被分成了n行,其次右边主存部分被分成了m个区,其中每个区被分成了n块,n块和n行不是巧合,这恰好说明了cache是主存的替代品,其次我们还发现每个区中的每一块都是有规律的映射到cache中的一个特定行中。
所以在主存,区中的某一块映射到cache中的某一个特定行有如下规律  
在这里插入图片描述

其中上面的i指的是cache中的特定行,j指的是主存区中的块号,n指的是cache中的总行数或每个主存区中的总块数。
  相对应的地址格式
在这里插入图片描述

下面以一道题为例:
有一处理机,主存容量1MB,字长1B,块大小16B;Cache容量4KB,若cache采用直接映射,请给出2个不同标记的内存地址,它们映射到同一个cache行。

我的解法思路:首先要写出内存地址,我们就首先要求出主存的地址格式:区号、块号、字号。
区号:主存容量1MB,Cache容量4KB,故:1MB/4KB=2^8,即区号或标记位8位。
块号:Cache容量4KB,块大小16B,故:4KB/16B=2^8,即块号8位。
字号:字长1B,块大小16B,故:2^4,即字号4位。
所以:题目中的映射到同一个cache行,即只要块号相同即可满足。
在这里插入图片描述

直接映射总结:
优点:地址映射方式简单,数据访问时只需要检查块号是否相等即可,因而能得到比较快的访问速度,硬件设备简单;
缺点;替换操作频繁,命中率比较低。

2.全相联映射

全相联映射即主存块可以映射到cache中的任意一块,即说白了就是一对多,‘一’指的是主存中的任意一块,‘多’指的是cache的每一行,即主存块可以映射到cache中的任意一块。
直接来看下面主存与cache之间的全相联映射,如下图:
在这里插入图片描述

从上面的图片我们也可以很直观的看出一对多的含义,所以全相联映射也相对比较简单。
相对应的地址格式
在这里插入图片描述

例题演示
若数据在主存和Cache之间按块传送单位为512字节。Cache大小为8KB,主存容量为1MB ,求其主存的地址格式。

我的解法思路:
字号:按块传送单位为512字节,即512=2^9,故字号为9位
块号或主存标记:主存容量为1MB,即 1M/512=2^11,故标记号11位。

全相联映射总结:
优点:命中率比较高,cache存储空间利用率高;
缺点:访问相关存储器时,每次都要与全部内容比较,速度低,成本高,因而利用少。

3.组相联映射

组相联映射:说白了就是基于直接映射和全相联映射的一个比较折中的方式,即组内是全相联映射,组间是直接映射。就是一对N,‘一’指的是主存中的任意一块,‘N’ 指的是cache的每组内的块数,即主存块可以映射到cache中的任意一组的若干块。

直接来看下面的组相联映射的图进行下一步分析解释

在这里插入图片描述

根据上面的图:我们知道cache被分为了8组,每组又分为了2块,右边主存部分被分成了256个区,每个区8块,每个区的8块与cache中的8组不是巧合,而是为了实现组间直接映射,然疑问来了,当主存的某一块按直接映射方式规则进行映射后到了cache中相应的组,而此时在cache中每组有两块,这时候就是实行组内全映射。

前面我说过组相联映射是直接映射和全相联映射的一个折中形式,那么必然也就存在下面俩种特殊的形式:
1>当cache中每组内的块数变为1时,这就变成了直接映射;
2>当cache中只有一组时,这就变成了全相联映射。

组相联映射相对应的主存地址格式(和直接映射方式很像,只是块号变成了组号):
在这里插入图片描述

下面以一道例题为例:

某计算机按字节寻址,主存有2K个块,每块32个字节。 Cache由64个块组成,每组8块(8路组相联)。请表示主存地址格式。给内存地址为A21FH和C028H两个地址对应的标记、组号和字号。

我的解法思路是:
字号:每块32个字节,即 32=2^5,故字号5位。
组号:Cache由64个块组成,每组8块,即64/8=8=2^3,故组号3位。
区号标记:主存有2K个块,又因为我们知道组间是直接映射(所以把cache中的组数看作直接映射中的块),即2k/8=2^8,故区号8位。
所以,主存格式为:区号8位、组号3位、字号5位。
又A21FH=1010001000011111B
故对应的标记:10100010,组号:000,字号:11111
同理C028H=1100000000101000B
故对应的标记:11000000、组号:001、字号:01000

组相联映射总结:
优点:块的冲突概率比较低,块的利用率大幅度提高;
缺点:实现难度和造价要比直接映射高。

————————————————
版权声明:本文为CSDN博主「-希冀-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46371813/article/details/107631076


如果这篇文章对您有帮助,可否支持一下博主?
点赞+关注呗,谢谢您。

在这里插入图片描述

  • 99
    点赞
  • 479
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
主存与缓存之间的地址映射通常使用缓存映射方式来实现。常见的三映射方式为:直接映射全相联映射组相联映射。 1. 直接映射(Direct Mapping): 直接映射是最简单的映射方式主存的每个地址只能映射到缓存的唯一一个位置。主存地址的某些位用于标识缓存行的索引,其余位用于标识缓存行内的字节偏移量。这映射方式具有低映射开销和较高的缓存命率,但容易产生冲突,导致缓存失效。 2. 全相联映射(Fully Associative Mapping): 全相联映射是最灵活的映射方式主存的每个地址可以映射到缓存的任意位置。主存地址的某些位用于标识缓存行的索引,其余位用于标识缓存行内的字节偏移量。这映射方式具有较高的命率,但需要更大的硬件开销来实现。 3. 组相联映射(Set Associative Mapping): 组相联映射直接映射全相联映射的折方式,将缓存划分为多个组,每个组包含多个缓存行。主存地址的某些位用于标识组的索引,另外的位用于标识缓存行内的字节偏移量。在每个组内,使用直接映射方式进行地址映射。这映射方式综合了直接映射全相联映射的优点,能够提供较高的命率和较低的映射开销。 以上是主存与缓存之间常见的地址映射方式。具体的实现方式可能因处理器架构和缓存设计而有所不同。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值