Cache与主存的地址映射
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与主存的地址映射相关推荐
- 计算机组成原理——Cache与主存的地址映射
Cache–主存的地址映射 由主存地址映象到cache地址称为地址映射 cache的基本结构: Cache的工作过程: CPU发出一个地址,同时发给主存和cache的地址映射机构,CPU会从主存中取出 ...
- Cache – 主存的地址映射及相关计算问题
Cache – 主存的地址映射及相关计算问题 在开始本篇博文之前,首先来介绍下问题背景,以便于初学者能更好的理解(当然其实我也是个小白),如果大家已经了解问题背景,直接跳过下面两段,不用听我多BB. ...
- Cache与主存的三种地址映射详细解读
前言 我们知道,Cache又叫做高速缓冲存储器, 它保存的是主存中的一部分数据.当CPU要访问数据时,它会同时发送地址给Cache和主存,如果在Cache中找到了想要的数据,则由Cache直接返回数据 ...
- (计算机组成原理)第三章存储系统-第六节2:Cache和主存的映射方式(全相联映射、直接映射和组相连映射)
文章目录 一:全相联映射 二:直接映射 三:组相连映射 前面说过,Cache中实际保存的是主存中的数据副本,所以这里会涉及一个很重要的问题:Cache和主存是如何映射的?所谓映射是指把主存地址空间映射 ...
- 访问Cache和主存的效率计算问题
第一,看命中率的定义:CPU欲访问的信息已经在Cache中的比率称之为命中率. 设程序在执行期间,Cache的命中次数是Nc,访问主存的次数是Nm,则命中率H=Nc/(Nc+Nm)H = Nc / ( ...
- Cache与主存的地址映像
Cache与主存的地址映像 Cache 和主存都被分成若干个大小相等的块,每块由若干个字节组成,主存和 Cache 的数据交换是以块为单位. 地址映像 把主存地址空间映像到 Cache 地址空间,即按 ...
- 3.6.3 Cache和主存的映射方式
棒棒哒加油哦 (*^▽^*) 在这个小学中我们要学习cache和主存的三种映射方式,那上小杰的没为我们留下了这样的几个问题,由于开始他保存的是储存里边的某一些数据块的副本,那么我们必须考虑到的一个问题 ...
- 【计算机组成原理】Cache和主存的映射方式
Cache和主存的关系 Cache行中的信息是主存中某个块的副本,将内存以块为单位调入Cache供快速访问.内存的数据将被调入到Cache行的数据块中,Cache用于缓和主存和CPU之间的速度矛盾. ...
- 有关cache、主存地址结构的问题,终于不用再怕了
Cache和主存的映射方式 下面所提到的字指的是存储字,与容量密切相关. 直接映射 主存: 区 块 字 Cache: 块 字 计算出主存.Cache的总位数. 主存:区+块+字 Cache:块+字 计 ...
最新文章
- 新国货美妆品牌数字营销能力升级“三步法”
- boost::core模块lightweight的测试实例
- 二叉搜索树介绍及其接口说明
- Springboot+idea的一个bug(Unregistering JMX-exposed beans on shutdown)
- 15年编程生涯,资深架构师总结的7条经验
- 【LeArm】动手实践机械臂(一)
- Delphi 2010 新增功能之: 手势编程[5] - 关于自定义手势
- 多变量遗传算法python代码_遗传算法介绍并附上Python代码
- 【DM】DMHS的安装部署及DM7的二节点同步
- 2021-09-10 QTdesigner 介绍入门 布局
- Ubuntu状态栏显示网速,内存利用率等信息——sysmonitor
- 20172304 《程序设计与数据结构》第七周学习总结
- 计算机主板自动重启,电脑开机后自动重启,详细教您电脑开机后自动重启如何解决...
- 怎样实现将分数进行相加的操作?
- 1000个微信小程序源码分享
- Spark ML 特征工程之 One-Hot Encoding
- 超越大典汽车维修系统
- php gd图片验证,php笔记之GD库图片创建/简单验证码
- 由计算机病毒引起的现象,计算机病毒的症状
- GithubPages教程 在GithubPages上搭建个人主页