Cache结构图

Cache和主存被划分为很多块, 块(Cache Block ) 作为映射的最小单元,块大小(Cache Block size) 反应块内所包含的字节数。

以256byte大小Cache为例,其Cache Block size=4 byte,被划分为32块。

Cache地址相当于被划分为了2部分:块号(index)+块内地址/偏移量(offset)

主存的结构与Cache相同,Main Memory Block size = Cache Block size

直接映射

直接映射就是每个主存块只与一个缓存块相对应,映射关系为i=jmodCi = j\;mod\;Ci=jmodC(其中iii为缓存块号,jjj主存块号,CCC为缓存块数)。
以4个Block的Cache与32个Block的主存为例 (Cache Block size = Main Memory Block size),这里假设每块含4字节,Main Memory中每4个Block为一组 (每组的Block数量 = Cache的Block数量) ,每组的第1块映射到Cache中的Cache Block[0],第2块映射到Cache Block[1]…

Cache index Main Memory index
0 0,4,8…28
1 1,5,9…29
2 2,6,10…30
3 3,7,11…31

假设现在需要主内存中的地址为15H的数据,CPU首先会在Cache中查找,这就需要将主存中15H地址映射到Cache中。
15H=0001010115H = 0001\;01\;0115H=00010101,其中offset(01)表示在块内的偏移量,index(01)表示在Cache的块号。每一组相同index将映射到Cache中的同一块,因此需要一个tag来区分不同的组。

图上还有一个valid bit,这个是用来标记Cache Block是否有效的,当根据Main Memory地址映射到Cache所在块之后会先检查valid bit是否有效,只有在有效的情况下,比较tag才有意义。如果无效,直接判定cache缺失。当系统刚启动时,cache中的数据都应该是无效的,因为还没有缓存任何数据。

直接相连映射的优缺点
优点:简单易实现,硬件成本会比较低
缺点:不够灵活,Cache中的每个Block对应Main Memory中每组index相同的Block,一个一对多的关系,如果需要访问Main Memory每组index=1的Block,则Cache中只有index=0的Block会被使用,并且数据还会被不断替换,其他空闲位置无法使用,命中率降低。

全相联映射

全相联映射允许Main Memory中的每一个Block映射到Cache中的任何一个位置上面,只有当Cache中的Block全部被占用时,才考虑替换。
假设Cache被划分为4个Block,Main Memory被划分为32个Block,(Cache Block size = Main Memory Block size),假设此时需要地址为15H(00010101)的数据。CPU首先会查找Cache是否有存储,由于采用全相联映射,Main Memory中的Block可以映射到Cache中的任一一Block,因此需要逐一检验tag标签来判断。如下图所示在Cache中Block[1]的tag匹配成功。通过offset来确定该内容在Block中的位置。

全相联映射的优缺点
优点:因为Main Memory中的Block可以映射到Cache中的任一一Block,不像直接映射一样,Main Memory中某一个Block映射到Cache中唯一的Block灵活,这种方式命中率更高,缩小了块冲突(只有当Cache全部Block都被占用才会冲突)。
缺点:直接相连映射定位到Cache中的Block之后,只需要检验一次tag标签即可,而全相联映射,需要逐一匹配Cache中每一个Block的tag标签,这种方式的硬件成本较高。

组相联映射

组相联映射是直接相连映射和全相联映射的一种折中方法。
直接相连映射是Main Memory中的任一Block只能映射到Cache中唯一的Block,而组相联映射则是映射到Cache中唯一的组(Group)(一组包含若干Block),映射规则为ii=jmodCi = j\;mod\;Ci=jmodC(其中iii为Cache中的组号,jjj为Main Memory的块号,C为Cache的组数)。
对于同一组,采用全相联映射,Main Memory中的Block可以映射到对应组中的任一一Block,通过逐一检查tag标签来定位。

假设Cache被划分为4个Group,每个Group有2个Block,Main Memory被划分为32个Block,现需要Main Memory中地址为15H的数据,CPU会先到Cache中寻找,15H = 0001 01 01,其中的index(01)确定为Group[1],然后逐一匹配Group[1]中所有Block对应的tag,最后确定15H在Cache所映射的位置。

可见直接相联映射和全相联映射都是特殊的组相联映射,直接相联映射是当Cache中每组只有一个Block情况下的组相联映射,而全相联映射则是Cache只划分一个组(即Cache所有Block作为一个组)情况下的组相联映射。

牙牙yyds

Cache与主存的地址映射相关推荐

  1. 计算机组成原理——Cache与主存的地址映射

    Cache–主存的地址映射 由主存地址映象到cache地址称为地址映射 cache的基本结构: Cache的工作过程: CPU发出一个地址,同时发给主存和cache的地址映射机构,CPU会从主存中取出 ...

  2. Cache – 主存的地址映射及相关计算问题

    Cache – 主存的地址映射及相关计算问题 在开始本篇博文之前,首先来介绍下问题背景,以便于初学者能更好的理解(当然其实我也是个小白),如果大家已经了解问题背景,直接跳过下面两段,不用听我多BB. ...

  3. Cache与主存的三种地址映射详细解读

    前言 我们知道,Cache又叫做高速缓冲存储器, 它保存的是主存中的一部分数据.当CPU要访问数据时,它会同时发送地址给Cache和主存,如果在Cache中找到了想要的数据,则由Cache直接返回数据 ...

  4. (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)

    文章目录 一:全相联映射 二:直接映射 三:组相连映射 前面说过,Cache中实际保存的是主存中的数据副本,所以这里会涉及一个很重要的问题:Cache和主存是如何映射的?所谓映射是指把主存地址空间映射 ...

  5. 访问Cache和主存的效率计算问题

    第一,看命中率的定义:CPU欲访问的信息已经在Cache中的比率称之为命中率. 设程序在执行期间,Cache的命中次数是Nc,访问主存的次数是Nm,则命中率H=Nc/(Nc+Nm)H = Nc / ( ...

  6. Cache与主存的地址映像

    Cache与主存的地址映像 Cache 和主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和 Cache 的数据交换是以块为单位. 地址映像 把主存地址空间映像到 Cache 地址空间,即按 ...

  7. 3.6.3 Cache和主存的映射方式

    棒棒哒加油哦 (*^▽^*) 在这个小学中我们要学习cache和主存的三种映射方式,那上小杰的没为我们留下了这样的几个问题,由于开始他保存的是储存里边的某一些数据块的副本,那么我们必须考虑到的一个问题 ...

  8. 【计算机组成原理】Cache和主存的映射方式

    Cache和主存的关系 Cache行中的信息是主存中某个块的副本,将内存以块为单位调入Cache供快速访问.内存的数据将被调入到Cache行的数据块中,Cache用于缓和主存和CPU之间的速度矛盾. ...

  9. 有关cache、主存地址结构的问题,终于不用再怕了

    Cache和主存的映射方式 下面所提到的字指的是存储字,与容量密切相关. 直接映射 主存: 区 块 字 Cache: 块 字 计算出主存.Cache的总位数. 主存:区+块+字 Cache:块+字 计 ...

最新文章

  1. 新国货美妆品牌数字营销能力升级“三步法”
  2. boost::core模块lightweight的测试实例
  3. 二叉搜索树介绍及其接口说明
  4. Springboot+idea的一个bug(Unregistering JMX-exposed beans on shutdown)
  5. 15年编程生涯,资深架构师总结的7条经验
  6. 【LeArm】动手实践机械臂(一)
  7. Delphi 2010 新增功能之: 手势编程[5] - 关于自定义手势
  8. 多变量遗传算法python代码_遗传算法介绍并附上Python代码
  9. 【DM】DMHS的安装部署及DM7的二节点同步
  10. 2021-09-10 QTdesigner 介绍入门 布局
  11. Ubuntu状态栏显示网速,内存利用率等信息——sysmonitor
  12. 20172304 《程序设计与数据结构》第七周学习总结
  13. 计算机主板自动重启,电脑开机后自动重启,详细教您电脑开机后自动重启如何解决...
  14. 怎样实现将分数进行相加的操作?
  15. 1000个微信小程序源码分享
  16. Spark ML 特征工程之 One-Hot Encoding
  17. 超越大典汽车维修系统
  18. php gd图片验证,php笔记之GD库图片创建/简单验证码
  19. 由计算机病毒引起的现象,计算机病毒的症状
  20. GithubPages教程 在GithubPages上搭建个人主页

热门文章

  1. JAVA判断两个时间戳,相隔多少分钟
  2. Cadence 16.6在win10系统上的安装
  3. vue 在结合 vant 写移动端时上传图片之前,压缩图片大小
  4. python数据分析、数据挖掘,数据源从哪儿找?
  5. 链表的三种插入方法(头插法,尾插法,任意位置插入)
  6. mysql 如何查询json字段为空的
  7. NP难问题以及近似算法(基于次模)
  8. Cocos Creater 学习笔记(一)
  9. QT Creater工程文件介绍
  10. 在无字体时使用word样式,并设置字体样式