[watermark]对cache(缓冲存储器)的功能和意义就不说了,这里主要说说cache的映象规则和查找方法。
cache和主存均被划分为大小相同的块。信息都是以块为单位调入cache。相应地,cpu的访存地址被划分为2部分:块地址和块内位移:
如图 : [块地址|块内地址]
块地址用于查找该块在cache中的位置,块内位移用于确定所访问的数据在块中的位置。
映象规则
因为内存容量远远大于cache的容量。就象一个仅能容纳40人的阅览室要接纳全校400人一样,如何安排他们的座位,这就是映象规则所要 用的。
有3种映象规则:
1.全关联映象(full associative)
这是指主存中的任一块可以放置到cache中任一位置。如下图所示,就象一个阅览室你进去后可以随便坐一样的。
2.直接映象(direct mapped)
这是指主存中的每个块只能被放置到cache中唯一的一个位置。一般地,对于主存的第i块,它会映象到cache中的第j块,其中j=i mod(M) (M为cache的块的个数)设M=2的m次方,则j就是i的低m位,如图:主存块地址i: [...j],其中j的位数就等于m。 举个例子,cache一个有8个块(000-111 0-7),而主存有16个块(0000-1111 0-15),0-15分别mod7就可以得到他们的在cache中的地址,实际上我们把0000-1111左移一位就可以得到000-111就是他们在cache中的位置了,和取余的道理是一样的!
3.组相联映象(set associative)
组相联是指主存中的每个块可以被放到唯一的一个组的任意一个位置,其实这是前面2种方法的折中,假设cache被划分成g组,则主存的第i块的存放的组号为k=i mod(g),而第k组里可能有4个块,这里又可以跟全相连映象一样,随便坐了。同样跟直接映象一样,我们可以用块的后m位来表示其在cache中的组的位置(m为cache中组的个数的2进制位数)。[/watermark] |