javaee论坛

普通会员

225648

帖子

340

回复

354

积分

楼主
发表于 2017-07-22 04:14:48 | 查看: 104 | 回复: 1
高速缓冲存储器Cache是位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在Cache中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从Cache中调用,从而加快读取速度。由此可见,在CPU中加入Cache是一种高效的解决方案,这样整个内存储器(Cache+内存)就变成了既有Cache的高速度,又有内存的大容量的存储系统了。Cache对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与Cache间的带宽引起的。


下面给出一道例题:



  1. 全相联映射方式

全相联映射是指主存中任意一个块都可以映射到cache中任意一个块的方式,也就是说,当主存中的某一块需调入cache时,可根据当时cache的块占用或分配情况,选择一个块给主存块存储,所选的cache块可以是cache中的任意一个块。例如,设cache共有2^C块,主存共有2^M块,当主存的某一块j需调进cache中时,它可以存入cache的块0、块1、…、块i、…或块2^C - 1的任意一块上。如下图所示: 
这里写图片描述

优点:命中率比较高,cache存储空间利用率高;

缺点:存储映射信息的相联存储器庞大,比较电路复杂,查询相联存储器时,每次都要与全部内容比较,速度低,成本高,因而只适合于小容量的cache之用,应用少。

2、直接相联映射方式

直接相联映射方式是指主存的某块j只能映射到满足如下特定关系的cache块i中:

i=j mod 2^C

上图中,主存的第0、2^C、2^(C+1)、…块只能映射到cache的第0块,主存的第1、2^C+1、2^(C+1)+1、…块只能映射到cache的第1块,……,主存的第2^C-1、2^(C+1)-1、…2^M-1块只能映射到cache的第2^C-1块。即:对2^C求余后余数相同的主存块对应cache中同一个块。如下图所示: 
这里写图片描述

优点:比较电路最简单,地址映射方式简单,数据访问时,只需检查区号是否相等即可,因而可以得到比较快的访问速度,硬件设备简单。

缺点:cache块冲突率较高,余数相同的主存块无法同时进入cache,从而降低了cache的利用率。由于主存的每一块只能映射到cache的一个特定块上,当主存的某块需调入cache时,如果对应的cache特定块已被占用,而cache中的其它块即使空闲,主存的块也只能通过替换的方式调入特定块的位置,不能放置到其它块的位置上,替换操作频繁,命中率比较低。

3、组相联映射方式

组相联映射方式下,将cache分成2^u组,每组包含2^v块。主存的块与cache的组之间采用直接相联映射,而与组内的各块则采用全相联映射。也就是说,主存的某块只能映射到cache的特定组中的任意一块。主存的某块j与cache的组k之间满足如下关系:k=j mod 2^u

设主存共有2^s×2^u块(即M=s+u),则它们的映射关系如下图所示:

这里写图片描述

图中,主存的块0、2^u、2^(u+1)、…、[2^(s-1)]2^u可以映射到cache的第0组的任意一块,主存的块1、2^u+1、2^(u+1)+1、…、[2^(s-1)]2^u+1可以映射到cache的第1组的任意一块,……,主存的块2^u-1、2^(u+1)-1、…、2^M-1可以映射到cache的第2^u-1组的任意一块。

优点:块的冲突概率比较低,块的利用率大幅度提高,块失效率明显降低。

缺点:实现难度和造价要比直接映射方式高。



普通会员

0

帖子

358

回复

368

积分
沙发
发表于 2024-04-18 05:17:06

谢谢楼主分享

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017