Cache–主存的地址映射
由主存地址映象到cache地址称为地址映射
cache的基本结构:
Cache的工作过程:
CPU发出一个地址,同时发给主存和cache的地址映射机构,CPU会从主存中取出字还是从cache中取出字,主存将块号送入主存cache地址变换机构,如果命中,就将主存地址转化为cache地址,从cache存储体中找到对应的字,然后通过数据总线送到CPU,完成一次读写过程;如果没有命中,这个字就不能从cache中取,而应该从主存中取出字送给CPU,与此同时,如果cache中有空间,可以装进,就将这个字所在的块拿到cache中。如果空间不够,不能装进cache,cache替换机构就将cache中不常用的块拿出,将该字的块替换进cache中。
主存与cache的映射过程:
当缓存接收到CPU送来的主存地址后,只需要根据cache字块地址字段(c位)找到cache字块,然后判断cache字块地址与主存地址的主存块标记是否相符,若符合且有效位为“1”,表示cache块已经和主存的某个块建立对应关系(cache命中);若不符合或有效位为“0”,就从主存中读入新的字块代替旧的字块,同时将信息送往CPU,并修改cache标记,将有效位置1。
1.全相联映射(灵活性大的映象关系)
主存中的任一块映象到缓存中的任一块,将主存中一个块的地址(块号)与块的内容(字)一起存与cache的行中,其中块地址存与cache行的标记部分。cache的数据块大小称为行,主存的数据块大小称为块。cache与主存之间的数据交换以块为单位,CPU与cache之间的数据交换以字为单位。
优点:灵活,命中率高
缺点:主存字块标记为全部块标记,访问cache时,主存的字块标记要和cache的全部标记位进行比较,所需的逻辑电路很多,成本较高,实际的cache还要采用各种措施来减少地址的比较次数。
例题:某内存64块,cache有4块,一个块为4个字节,按字节编址,采用全相联映射方式,写出cache和主存地址格式。
全相联映射方式中主存的主存块标记是全部块标记,,根据主存和cache的对应关系,一个块为4个字节,能得出主存和cache的块内地址的位数都是2位,根据cache的块数是4,得出cache块的位数是2。因为主存的块数为64块,得出主存块标记的位数是6位。
2.直接映射(固定的方式)
主存中的任意块映射到缓存中的唯一块,每个主存块只与一个缓存块相对应。
i为缓存块号,j为主存块号,C为缓存块数,映射关系式:i = j mod C
特点:不灵活,每个主存块只能与固定对应某个缓存块,即使还空着许多位置也不能使用。
主存地址的格式:
例题:某内存64块,cache有4块,一个块为4个字节,按字节编址,采用直接映射方式,写出cache和主存地址格式。
我们一个个的分析,先分析cache
cache:4块=16字节=2的4次方字节,cache的总位数是4。
主存:64块=64*4字节=2的8次方字节,主存的总位数是8
由题意得:一个块4个字节,就是2的2次方,可以得出cache的块内地址为2位,又因为cache的总位数是4,所以得出cache块有(4-2)位
主存块标记的位数就相当于主存的总位数减去cache的总位数,就是4位,最后就求出cache和主存的地址格式
3.组相联映射(上述两种映象的折中)
组间直接映射,组内全相联映射
主存块j按模Q(组数)映射到缓存的第i组中任一块,cache分为Q组,每组R块
对应关系有:i = j mod Q
i为缓存的组号,j为主存的块号
组内n块,组相联映射定义为n路组相联
例题:主存容量512K×16位,cache容量4096×16位,块长为4个16位的字,按字地址访存写出二路组相联映射下主存的地址格式。
cache地址的位数:4096=2的12次方,12位
主存地址的位数:512K=2的19次方,19位
由块长可得块内地址位:2位
二路组相联,cache的组数:2的10次方/2=2的9次方。所以主存的区内组号是9位
主存字块标记的位数:19-2-9=8
4.段相联映射
段相联映射是直接映射和全相联映射相结合的方式,将主存和cache都分成若干段,并且使他们每段所包含的块数都相等,段之间采用全相联映射,段内块之间采用直接映射。
当段数与cache块数相等时(即每段只包含一块),为全相联映射
当段数为1时,为直接映射