一种采用lru替换算法的缓存的制作方法

文档序号:6572379阅读:527来源:国知局

专利名称::一种采用lru替换算法的缓存的制作方法
技术领域
:本发明涉及Cache(緩存),特别是一种采用LRU(LeastRecentlyUsed,最长时间没有被用到)替换算法的緩存。
背景技术
:緩存的组织,从存储器映像的角度来看,主要有全相联映像法、直接映像法和组相联映像法。全相联映像法的基本思想是把一个主存块的地址(块号)和块的内容都拷贝到緩存行中;由于块地址也保存在緩存中,因此可以拷贝到緩存中的任意位置。此法的优点是灵活,但是查找比较困难,而且硬件的实现较为困难。直接映像法的基本思想是一个主存块只能拷贝到緩存中固定的行内。该按硬件成本低,但是由于一个緩存行要对应多个主存块,在使用中当这些主存块需要同时调入緩存时将发生冲突、增加调入调出的开销。组相联映像法是上述两种方法的折衷方案。其基本思想是把緩存分为m个组(set),每个组分为n行。主存块分配时对组是固定的、而在组内的位置可以任意。这样就综合了两者的优点,这是目前最常用的方法。这种组织的緩存就叫做n路(Way)组相联的緩存。由于緩存的容量总是远小于下一级存储器的容量,因此緩存中只能是下级存储器的部分映像。为了使下级存储器的内容都能在需要时拷贝到緩存中,必须随时替换緩存内容即把当前不需要的内容调出緩存,腾出空间,调入当前需要的内存块。在这种调入调出方法中,最重要的是替换的策略,即在需要时选择缓存中的哪些行调出,再调入所需的内存块。这种替换策略通常称为替换算法,它是由硬件实现的。如果算法选择不当,将大大增加调入调出的频度。例如把一个当前不需要但是很快就将使用的行调出,必然会降低系统的效率。目前最常见的调度算法有随机、循环、LRU算法等3种,其中LRU算法是最佳的现有LRU算法的通常实现方法是为每行设置一个计数器,命中行的计数器清零,其它各行中计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。以最为常见得4路緩存为例来说,每一组有4行,每行设置一个计数器,计数器至少必须是2位位宽用于区别4行。这样一个组就需要至少8位寄存器来实现LRU算法。此外,还需要一个比较器和选择器来选出数值最大的数据行。由于緩存中组的数量通常比较大,这样实现LRU算法就需要大量的寄存器,也就是说会占用比较多的芯片面积资源。
发明内容本发明的目的在于提供一种采用LRU替换算法的緩存,主要解决现有緩存实现LRU算法需要大量的寄存器的技术问题,它不但能节省硬件成本,而且也不会占用比较多的芯片资源。为实现上述发明目的,本发明是这样实现的一种采用LRU替换算法的缓存,其特征在于对缓存中每组的所有缓存行的被访问时间相互关系的状态进行编码,并将上述状态位编码存储于寄存器中以用于实现LRU替换算法。该状态位编码中的某几位直接表示最长时间没有访问过的緩存4亍号。该寄存器位数N与每组的緩存行n之间的数值关系是N是满足2N>=n!的最小整数,或者说整数N满足2N〉=n!>2N"藉由上述技术方案,本发明的优点是本发明直接对所有緩存行的被访问时间相互关系的状态进行编码,编码直接显示出最长时间没有被用到的緩存行的行号,而且状态改变逻辑电路可以给所有组共用,因此,在不降低緩存性能前提下,大大减少了LRU实现的面积需求,同时也降低了功耗。图1是本发明的原理图2是状态寄存器的状态改变逻辑实现示意图。具体实施例方式本发明提供了一种采用LRU替换算法的緩存,与现有技术不同的是本发明不采用每行实现一个计数器的方法,而对整个组的状态进行分析和编码。以4路緩存为例,由于我们只关心4行之间的未被使用时间的长短相互关系,而不关心具体的访问次数。所以可以不必具体计数。对于4行的一个组,一共有4!-24种可能出现的关系。所以我们只需要5位寄存器来记录这24种可能的状态(24<24<25)。本发明不局限于4路緩存的设计,同样适合于其他多路緩存的设计。表l为具体的编码方法及编码。表1状态编号1234路最近访问的排序L0,Ll,L2,L3(第一个值L0表示最长时间未被用的行的编号;最后一个值L3表示最近一次用到的行的编号)编码后的状态字(5位)S0,S1,S2,S3,S4{SO,Sl)表示L0值(S2,S3)表示Ll值{S4}为1表示L2>L3;{S4}为0表示L2<L30321011101—13120110112320111100331021101043021110015301211000623101011172130100118230110110921031001010203110001112013,012mo01111131230011011413020111015120301100161032o薩17102301000<table>tableseeoriginaldocumentpage7</column></row><table>如表1所示编码完全地直观地描述了每一行的排序地位,{S0,S1}直接表示出最长时间未被使用的行的编号。不需要比较器和选择器来选择某一行。对于每一个组(Set),实现LRU替换的寄存器需求大大减少。由于寄存器少了,功耗也有相应降低。状态字改变逻辑由组合逻辑实现,所以这个编码的实现不会带来緩存性能的损失。而且由于同一时刻只有一行会被更新,所以只需要一套这样的组合逻辑电路,它可以被所有组(set)所共享。同时这套编码也非常适合于实现对路(CacheWay)的锁定。无论锁定/解除锁定时都不需要对状态字进行特殊修改,对最长时间未被使用行的选择也如同没有发生锁定时一样容易。图1是本实施例的一个4路组相联緩存,其中状态寄存器的状态字表示了当前组内4个緩存行的被访问时间的排序关系。如图所示在(l)发生时,状态字为Ollll,前2位01表示当前最长时间没有被访问过的是緩存行1,所以应该替换緩存行1。对于(1)的例子,发生在CPU访问0x0000地址,而该地址所能够存放的组0中没有这个地址的数据而且所有的緩存行都存放着其他数据。(2)表示在(1)发生之后,状态字发生变化,先前的01111对应于表1中排序的1320,当1中的数据被访问后,排序变化为3201对应表1中状态字11100。所以状态字变化为11100。(3)中的变化是由CPU访问到緩存行0中的数据引起的。先前的11100对应于排序3201,当0中的数据被访问后,排序变化为3210对应表1中状态字11101。所以状态字变化为11101。图2是本实施例的状态寄存器的状态改变逻辑电路实现示意图,可以用实现有限状态机的方法来实现。因为同一时刻只会有一个组被访问到,所以这个组合逻辑电路是可以被所有的组(set)所共用。组合逻辑的实现,必须^T艮据这个緩存设计的具体功能来决定。比如是否有緩存锁定功能等等。如上所述,本发明如果不考虑编码中的某几位直接表示最长时间没有访问过的緩存行号,只需把n!个状态与2N个码中的n!——对应即可。如果考虑编码中的某几位(任意)直接表示最长时间没有访问过的緩存行号,只需在对应时特别进行归类即可。比如某类状态都是第m行是最长时间没有被访问到的,那么在选择编码是就把某几位值为m的编码与之对应即可。由于一般的緩存组内的行数n都是2的幂次,可以证明,这样的分类方法总是可行的。编码和状态对应关系确定后,对应关系决定了LRU替换算法执行过程中编码改变的规律原则。综上所述仅为本发明的较佳实施例而已,并非用来限定本发明的实施范围。即凡依本发明申请专利范围的内容所作的等效变化与修饰,都应为本发明的技术范畴。权利要求1、一种采用LRU替换算法的缓存,其特征在于对缓存中每组的所有缓存行的被访问时间相互关系的状态进行编码,并将上述状态位编码存储于寄存器中以用于实现LRU替换算法。2、根据权利要求1所述的采用LRU替换算法的缓存,其特征在于该状态位编码中的某几位直接表示最长时间没有访问过的缓存行_弓一3、根据权利要求1所述的采用LRU替换算法的緩存,其特征在于该寄存器位数N与每组的緩存行n之间的数值关系是N是满足2N〉=n!的最小整数,或者说整数N满足2N>=n!>2N"。全文摘要本发明涉及一种采用LRU替换算法的缓存,对缓存中每组的所有缓存行的被访问时间相互关系的状态进行编码,并将上述状态位编码存储于寄存器中以用于实现LRU替换算法。它主要解决现有缓存实现LRU算法需要大量的寄存器的技术问题,它不但能节省硬件成本,而且也不会占用比较多的芯片资源。文档编号G06F12/12GK101286140SQ20071003941公开日2008年10月15日申请日期2007年4月12日优先权日2007年4月12日发明者吴子熙,朱志明申请人:智多微电子(上海)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1