关于组相连命中率问题

那个没有命中是这么回事:

Cache的容量8K字/64个字=128页,即cache能装入128页(块)内容。

因为文件分成132个页,且cache开始为空,第一次往cache中调入页面时,只能调进128个,因为cache只能装128个页面(物理块),那么还有132-128=4个页面没有装进去。

按照LRU算法只能将cache的其中4页换出,即132页,其中:

0,32,64,96,128号块,总会访问第0组,

1,33,65,97,129号块,总会访问第1组, 

 

 

2,34,66,98,130号块,总会访问第2组,

 

3,35,67,99,131号块,总会访问第3组,

 

…………

第31,66,98,130号块,  总会访问第31组;

但是每组只有4块物理块,所以

第一次访问文件时,第0组调入的块号为:0,32,64,96,

                            第1组调入的块号为:1,33,65,97,

                            第2组调入的块号为:2,34,66,98,

                            第3组调入的块号为:3,35,67,99;……

到了文件末尾4页(即第128,129,130,131块)时,需对0,1,2,3组的页面按照LRU算法进行调换,得到:

0组的块号为:128,32,64,96,(第0号页面换出)

1组的块号为:129,33,65,97,(第1号页面换出)

2组的块号为:130,34,66,98,(第2号页面换出)

3组的块号为:131,35,67,99;(第3号页面换出)

这时,第一次访问文件结束。下面开始第二次访问,发现:

访问文件的第0号物理块不在0组,则进行调换:

0组调入的块号为:128,0,64,96,(第32号页面换出)

访问文件的第1号物理块不在1组,则进行调换:

1组调入的块号为:129,1,65,97,(第33号页面换出) 

 

访问文件的第2号物理块不在2组,则进行调换: 

2组调入的块号为:130,2,66,98,(第34号页面换出) 

访问文件的第3号物理块不在3组,则进行调换:

3组调入的块号为:131,3,67,99,(第35号页面换出)

------------如此类推在第二次访问中,当访问到:

0,1,2,3时,32,33,34,35时,64,65,66,67时,96,97,98,99时,128,129,130,131时还会再换进换出,第二次访问总有20页没有命中。且再后续的访问中,每次都是缺20页。

故,答案错误,在组相连的情况下不应该是8,而应该是20*20,即

 

命中率=(8448*21-132-20*20)/(8448*21)。

 

---------------------------- 

 

 

 

若按直接映射来做:

cache容量是128页,文件是132页。

按直接相连的话: 

第一次将文件装入cache,装了128页,cache满了,文件还有剩4页(第128,129,130,131页)没装入, 

文件的第128页对应cache的第0号块(128 mod 128=0),

 

文件的第129页对应cache的第1号块(129 mod 128=1),

文件的第130页对应cache的第2号块,

文件的第131页对应cache的第3号块,又因为直接映射是主存块只能固定的对应于某个cache块,

 

于是第二次开始访问132页的文件,发现

访问文件第0号物理块不在cache,则需要把128调出,把0调入;

访问文件第1号物理块不在cache,则需要把129调出,把1调入;

访问文件第2号物理块不在cache,则需要把130调出,把2调入;

访问文件第3号物理块不再cache,则需要把131调出,把3调入;

以后的物理块均能在cache中访问到,直到访问到文件物理块第128号~第131号,再次进行调换,如下: 

 

访问文件第128号物理块不在cache,则需要把0调出,把128调入;

访问文件第129号物理块不在cache,则需要把1调出,把129调入;

访问文件第130号物理块不在cache,则需要把2调出,把130调入;

访问文件第131号物理块不再cache,则需要把3调出,把131调入; 

 

 

在第二次访问中共缺了8页,以后每次都如此,所以:

 

命中率=(8448*21-132-8*20)/(8448*21)。

----------------------------------------------------------------

若按全相连来做: 

cache容量是128页,文件是132页。

第一次将文件装入cache,装了128页,cache满了,文件还有剩4页(第128,129,130,131页)没装入,那么

当访问文件第128块,发现不在cache中,则把cache中第0块调出去,把第128块调入; 

当访问文件第129块,发现不在cache中,则把cache中第1块调出去,把第129块调入; 

当访问文件第130块,发现不在cache中,则把cache中第2块调出去,把第130块调入; 

当访问文件第131块,发现不在cache中,则把cache中第3块调出去,把第131块调入; 

第二次开始文件的第0块时,

当访问文件第 0  块,发现不在cache中,则把cache中的第4块调出去,把第0块调入;

…………

依次这么调换,当访问完第131页时,发现每次都需要进行调换,则第二次访问共缺132页,以后每次都如此,所以有: 

命中率=(8448*21-132-132*20)/(8448*21)。 

 

----------------------------------

 

直接映像应该是8*20
组相联映像应该是 20*20
全相联映像应该是 132*21

----------------------------------------百度之:http://wenwen.soso.com/z/q223561071.htm

 

组相联映象 :组相联映象方式是直接映象和全相联映象的一种折衷方案。

这种方法将存储空间分为若干组,各组之间是直接映像,而组内各块之间则是全相联映像。它是这两种映像方式的一般形式,如果组的大小为1,即Cache空间分为2N组,就变为直接映像;如果组的大小为Cache整个的尺寸,就变为了全相联映像。

       组相联方式在判断块命中及替换算法上都要比全相联方式简单,块冲突的概率比直接映像的低,其命中率也介于直接映像和全相联映像方式之间。

       替换策略和一致性问题的处理方法 Cache和存储器一样具有两种基本操作,即读操作和写操作

      当CPU发出操作命令时,根据产生主存地址分为两种情形一种是需要的数据已在Cache中,那么只需直接访问Cache,从对应单元中读取信息到数据总线;另一种是需要的数据尚未装入Cache,CPU需从主存中读取信息的同时,Cache替换部件把该地址所在的那块存储内容主存拷贝到Cache中若Cache中相应位置已被字块占满,就必须去掉旧的字块。常见的替换策略有两种:

 1.先进先出策略FIFO(First In First Out)策略总是把最先调入的Cache字块替换出去,它不需要随时记录各个字块的使用情况,较容易实现;缺点是经常使用的块,如一个包含循环程序的块也可能由于它是最早的块而被替换掉。

2.最近最少使用策略LRU(Least Recently Used)策略是把当前近期Cache中使用次数最少的那块信息块替换出去,这种替换算法需要随时记录Cache中字块的使用情况。LRU的平均命中率比FIFO高,在组相联映像方式中,当分组容量加大时,LRU的命中率也会提高。

当CPU发出操作命令时,也要根据它产生主存地址分为两种情形一种是不命中时,只向主存写入信息,不必同时把这个地址单元所在的整块内容调入Cache中另一种是命中时,这时会遇到如何保持Cache与主存的一致性问题,通常有三种处理方式:

1.直写式(write through)即CPU在向Cache写入数据的同时,也把数据写入主存以保证Cache和主存中相应单元数据的一致性,其特点是简单可靠,但由于CPU每次更新时都要对主存写入,速度必然受影响。

 2.缓写式(post write)即CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓存器暂存,在适当的时候再把缓存器中的内容写入主存。在这种方式下,CPU不必等待主存写入而造成的时延,在一定程度上提高了速度,但由于缓存器只有有限的容量,只能锁存一次写入的数据,如果是连续写入,CPU仍需要等待

 3.回写式(write back)即CPU向Cache写入,并用标记加以注明,直到Cache中被写过的块要被进入的信息块取代时,才一次写入主存。这种方式考虑到写入的往往是中间结果,每次写入主存速度慢而且不必要。其特点是速度快,避免了不必要的冗余写操作,但结构上较复杂。

此外,还有一种设置可Cache区(Non-cacheable Block)的方式,即在主存中开辟一块区域,该区域中的数据不受Cache控制器的管理,不能调入Cache,CPU只能直接读写该区域的内容。由于该区域不与Cache发生关系,也就不存在数据不一致性问题。目前微机系统的BIOS设置程序大多允许用户设置不可Cache区的首地址和大小。
------------------------------------------

 感谢秦淮的激辩,感谢杀破狼的耐心讲解……

 

 

 

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
相连映射缓存是一种高效的缓存结构,具有较好的命中率。这是因为它采用了一种灵活的映射方式,将主存中的数据块存储在缓存中的任意位置。 首先,全相连映射缓存允许同一个数据块被缓存到多个位置。这种灵活性使得缓存可以根据数据的访问模式进行局部性的高效利用。当数据局部性较高时,相同的数据块多次被访问的概率较大,因此就可以将该数据块存储在多个位置,提供了更多的命中机会。 其次,全相连映射缓存通过哈希函数来确定数据块在缓存中的位置,使得每个数据块都有相同的机会被存储到任意一个位置。相对于其他的映射方式,如直接映射或相连映射,全相连映射的命中率更高。因为数据块在缓存中的位置是灵活的,避免了同一个"块"中的多个数据块争夺同一个缓存位置的情况。 最后,全相连映射缓存在缓存替换算法方面也有一些优势。由于每个位置都可以存储任意的数据块,所以在替换算法中更容易找到替换的目标,不会受限于特定的块内替换。这样可以提高替换算法的准确性和效率,进一步增加了命中率。 综上所述,全相连映射缓存由于其灵活的映射方式、均等的存储机会以及替换算法的优势,能够提供较好的命中率。这使得全相连映射缓存成为一种常用的优化策略,尤其适用于对命中率要求较高的计算机系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值