直接映射

       相信有些小伙伴第一次学习直接映射时和博主一样有些稀里糊涂,傻傻搞不清楚CPU提供的主存字块标记,Cache字块地址与Cache的标记位和有效位之间的关系,以及比较器它到底是在干啥子,本文不讲Cache和主存之间相较于十进制是如何映射的,书上都有哈~一定比我口述的详细的多

首先,在此先强调两个概念,地址映像和地址变换,它两是不一样的。
地址映象
是将每个主存块按某种规则装入Cache,并建立主存地址与Cache地址之间的对应关系。它是一种规则。
地址变换
是主存块按照这种映象关系装入Cache后,每次访Cache,如何将主存地址变换成Cache地址。

       书上说,直接映射会将其中每个存储器地址仅仅对应到缓存中的一个位置,那么它对应的规则(地址映像)是什么?书上为了方便大家理解讲了十进制的取模法,然而大家都知道计算机中的数据是01代码组成的二进制,那么我们在这里直接讲解二进制,为方便,我们假设一个块中只有一个字节,且以内存16个字节的主存和4个字节的缓存为例进行讲解。
主存和cache的映射关系图:
在这里插入图片描述

在这里插入图片描述

       在这里我们只对主存地址的前m位进行阐述,将内存地址映射到Cache块中方式是将内存地址中的一串二进制中的中间c位(在我们举的例子中是第3,4位)进行映射,即以本例讲解就是,中间两位为00则将其映射到cache中的第一块,假设其编号为00,中间两位为01则将其映射到cache中的第二块,假设其编号为01,我们可将其视为索引(这个索引也并没有被保存到任何位置),然而这只是一种映射规则,并没有将内存中的存储内容装入cache块中,此为地址映像
       规则有了,如上图所示会有内存中的四块竞争cache中的一块,那么我们怎么知道到底是内存中哪一块被放入了内存呢?这时我们就用到主存地址的前t位了,我们根据前t位(在我们举的例子中是前2位,1,2位)来划分区,并将其放入cache中的标记位中,使主存与cache建立关系,这样我们就很清楚地看清到底是哪个块啦~专业点来讲就是,向高速缓存中添加标记,通过内存地址的高位来提供标记位,以使我们能够区分映射到同一高速缓存块的不同存储位置。这一段描述地就是地址变换
那么又有人要问了,那有课本上描述的有效位是什么鬼?
Cache它并不是只包含了主存字块标记和字块内地址的,它是这样的 Cache地址 = 存储容量+有效位+标记为(Tag)+一致性维护位(脏位)+替换算法控制位,我们在此提一下有效位和脏位,有效位是判断cache中数据是否有效的,即初始时刻cache应该是“空”的,其中的内容是无意义的;脏位就是用来标记某段cache中存储的内容与主存中的内容是否一致,即是否被更改了(在这篇文章中不重要,只是提一下,让小伙伴们知道是啥);只有当主存标记位相等且Cache地址内的有效位 = 1时,我们才能说是命中了。

二个字节组成一块: 按块地址映射,在此不做详细解释,与一个字节组成一块道理相同,只不过将字节地址改成了块地址
在这里插入图片描述

三个字节构成一个块

N个字节构成一个块:如果缓存块大小为2i字节,我们也可以在概念上将主内存也划分成2i字节块

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值