在cache存储系统中,把cache和主存储器都划分成相同大小的块。
主存地址由块号B和块内地址W两部分组成,cache地址由块号b和块内地址w组成。
当CPU访问cache时,CPU送来主存地址,放到主存地址寄存器中,通过地址变换部件把主存地址中的块号B变换成cache的块号b,并放到cache地址寄存器中,同时将主存地址中的块内地址W直接作为cache的块内地址w装入cache地址寄存器中,如果变换成功(又叫cache命中),就用得到的cache地址去访问cache,从cache中取出数据送到CPU中;
如果变换不成功(cache不命中),则产生cache失效信息,并且用主存地址访问主存储器,从主存储器中读出一个字送往CPU,同时把包含该字在内的一整块数据都从主存储器读出来装入cache,这时,如果cache已经满了,则要采用某种cache替换策略把不常用的块先调出到主存储中相应的块中,以便腾出空间来存放新调入的块。
由于程序具有局部性特点,每次块失效时都把一块(由多个字组成)调入到cache中,能够提高cache的命中率。
Cache地址映射和变换方法
地址的映射和变换是密切相关的,采用什么样的地址映射方法就必然有与这种映射方法相对应的地址变换方法。
无论采用什么样的地址映射方式和地址变换方式,都要把主存和cache划分成同样大小的存储单位,每个存储单位成为“块”,在进行地址映射和变换时,都是以块为单位进行的。常用的映射方式和变换方式有以下3种:
•■ 全相联映射方式 主存中任意一块可以映射到cache中的任意一块上。
•■ 直接映射方式 主存中一块只能映射到cache中的一个特定块上,假定主存的块号为B,cache的块号为b,cache的总块数为Cb,则它们之间的映射关系可以用下面的公式表示:b = B mode Cb
•■ 组相连映射方式 在这种相联的地址映射和变换方式中,把主存和cache按同样大小划分成组(set),每个组都由相同块数组成。从主存的组到cache的组之间采用直接映射方式,在主存中的组与cache中的组之间建立好映射关系之后,在两个对应的组内部采用全相联的映射方式。
在ARM处理器中,主存与cache采用组相联地址映射和变换方式,如果cache的块大小为2L,则同一块中各地址的bit[31:L]是相同的。
如果cache中组的大小(每组中包含的块数)为2S, 则虚拟地址的bit[L+S-1:L]用于选择cache中的某个组, 而虚拟地址中其他位[31:L+S]包含了一些标志。
将cache每组中的块数称为组容量(set-associativity),当组容量等于cache中的总块数时,对应的映射方式为全相联映射方式;
当组容量等于1时,对应的映射方式为直接映射方式;
当组容量为其他值时,称为组相联映射方式。
在组相联映射方式中,cache的大小CACHE_SIZE(字节数)可以通过下面的公式来计算:
CACHE_SIZE = LINELEN*ASSOCIATIVITY*NSETS
其中,
•LINELEN为cache块(line)大小;
•ASSOCIATIVITY为组容量;
•NSETS为cache的组数。
全部0条评论
快来发表一下你的评论吧 !