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

Cache和主存的关系

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

直接映射

主存中每一块在Cache中有唯一Cache行与之对应。若调入内存块时该Cache行已有内容将会产生冲突。直接映射方式发生冲突概率最高。直接映射的关系定义为Cache行号 = 主存块号 % Cache总行数
若Cache有 2 c 2^c 2c行,主存有 2 m 2^m 2m块,映射关系如图所示。其中Cache块号即为主存块号的末尾c位。
在这里插入图片描述
其中,每个Cache行都有其对应的标记项。标记项+数据块共同构成一个Cache行。标记项的长度t=m-c。主存地址的高t位即为主存的标记,将主存数据调入数据块后将地址高t位写入标记。标记还有一位有效位,根据不同的需求还可能会有修改位(Cache回写法标记Cache行是否被修改)、替换位(Cache中主存块替换算法使用)等。
在Cache行查数据时,先通过直接映射关系找到Cache行,若Cache行中标记项与查找主存地址高t位相等且有效位为1,则查询命中,用主存块号的末尾c位定位Cache行,在Cache行中查询数据。若标记项与查找主存地址高t位不相等或有效位为0,则未命中,前往主存。
若主存地址为32位,一个内存块占64B(行长=内存块大小= 2 6 2^6 26B),共有32个Cache行( 2 5 2^5 25),则主存地址结构如下所示。

标记(19位)Cache行号(5位)块内地址(8位)

其中,高19+5=24位为主存块号,低5+8=13位为Cache地址。

【例题】 假设某个计算机的主存地址空间大小为256MB,按字节编址,其数据Cache有8个Cache行,行长为64B。若不考虑Cache的一致维护性和替换算法控制位,并且采用直接映射方式,则该数据Cache的总容量为多少?

【分析】计算机的主存地址空间大小为256MB= 2 28 2^{28} 228B,且该计算机系统按字节编址,则主存地址共有28位。数据Cache有 2 3 2^3 23个Cache行,故Cache行号占3位。行长=内存块大小= 2 6 2^6 26B,故块内地址占6位。主存地址结构如下所示。

标记(19位)Cache行号(3位)块内地址(6位)

Cache的总容量由标记项、Cache数据块共同构成。对每个Cache行,标记项占19+1(有效位)= 20bit,数据块占64B=64*8=512bit。
则该数据Cache的总容量 = 8 *(20+512)bit = 4256bit

全相联映射

主存中的每一块都可以装入Cache中的任何位置,每行的标记用于指出该行取自主存的哪一块,与直接映射不同的是,全相联映射需要与所有Cache行比较直到找到标记项相等的Cache行。但Cache块冲突概率低,空间利用率高,命中率也高。但需要与所有Cache行标记进行比较,速度较慢。
在这里插入图片描述
大体与直接映射类似,唯一不同之处在于全相联映射中主存块与Cache行不存在直接映射关系,故如上图中的主存地址结构里低b位为字块内地址(Cache行内地址),高m位全为标记项。

组相联映射

组相联映射结合了直接映射与全相联映射的优点,将Cache分成Q个大小相等的组,组间采用直接映射方式,组内采用全相联映射方式。若其中每组有r个Cache行,则称之为r路组相联。常见地,当r=2时,称之为二路组相联。若Q=1,组相联映射变为全相联映射(只留下一个组);Q=总Cache行数时,变为直接映射(不进行划分)。
在这里插入图片描述
组相联映射的关系定义为Cache组号 = 主存块号 % Cache组数(Q)
其地址结构类似于直接映射的地址结构。

标记Cache组号块内地址

从地址角度来解释,Cache组号的意义与直接映射的Cache行号意义相同。但是一个主存块被映射到了一个Cache组而不是Cache行。一个Cache组内有r个Cache行,在写入Cache组时采用全相联映射方式大大降低了冲突概率
按照我的个人解释,Cache组相联映射的查找原理类似于使用链地址法处理冲突的Hash查找表。首先利用Hash函数(组相联映射关系)定位查找元素位置(Cache组),遍历该位置的链上元素(该组Cache行的标记),若存在(且有效位为1)则查找成功,否则查找失败。不同之处在于组相联映射对同一种映射关系只能存在r个Cache行,第r+1个Cache行需要置换。

其中,由于组内是全相联存储器,不需要定位到它是组内第几行。
[Cache组号+块内地址]即为Cache地址。

Cache组号块内地址

n路组相联映射的标记阵列

对于n路组相联映射的标记项,将每组的标记项排成一行,各组从上到下排列(对直接映射和全相联映射是直接从上到下排列)。
下表为二路组相联的标记阵列,对n路组相联来说有n列标记项。

标记项标记项
标记项标记项
标记项标记项
标记项标记项
标记项标记项

其中每个标记项的内容都与直接映射中说明的标记项内容相同。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cache映射方式有三种: 全相连映射、直接映射和组相联映射。全相连映射中,每个内存字节块可以放置在缓存中任意的字节块当中。需要比较复杂的标记位以确定CPU访问的位置是否在缓存中。这种方式的电路复杂,速度较慢。直接映射方式中,每个内存字节块只能放到缓存的相应位置。CPU给出的地址分成区号、块号和块内偏移地址,缓存的标记为区号。根据区号和块号以及有效位来确定是否命中。直接映射方式的电路简单,速度快。组相联映射方式是介于全相连映射和直接映射之间的一种方式,它将缓存划分为多个组,并将每个内存字节块映射到某个组中的某个位置。命中率取决于组的数量,组数越多,命中率越高。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [计算机cache的几种映射方式](https://blog.csdn.net/klp1358484518/article/details/126355650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Cache 三种的映射方法(简单通俗)](https://blog.csdn.net/s1050712899/article/details/106384672)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值