计算机组成原理之Cache-主存地址映射
一、直接映射
每个主存块只与一个缓存块相对应,映射关系式为: i = j mod C
或 i = j mod 2 C
其中,i为缓存块号,j为主存块号,C为缓冲块数。
映射过程:
主存地址高m位被分成了两部分:低c位指代Cache的字块地址,高t位指代主存字块标记。当缓存接到CPU送来的主存地址后,只需根据中间c位字段找到对应的Cache块,然后根据Cache块中的“标记”是否与主存地址的高t位相符来判断,若符合且有效位为1,表明Cache块已和主存的某块建立了对应关系,可根据b位地址从Cache中获取信息;若不符合或有效位为0,则从主存读入新的字块来代替旧的字块,同时修改Cache标记。
优点: 实现简单,只需要利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。
缺点: 每个主存块只能固定地对应某个缓存块,即使缓存内还空着的许多位置也不能占用,使缓存的存储空间得不到充分的利用。此外,如果程序恰好要重复访问对应同一缓存位置的不同主存块,就要不停地替换(抖动导致的连续冲突不命中),大大降低了命中率。
二、全相联映射
全相联映射允许主存中的任一字块映射到Cache中的任何一块的位置上
优点: 十分灵活、命中率高,减少了块冲突率
缺点: 所需逻辑电路多且复杂,成本高
三、组相联映射
组相联映射是对直接映射和全相联映射的一种折中。它将Cache分成Q组,每组有R块,并有以下关系:i = j mod Q
,i为缓存的组号,j为主存的块号。某一主存块按模Q将其映射到缓存的第i组内。假设现在c = 5,q = 4,r = c - q = 1,它表示的意思是:缓存共有2 5 = 32个块,一共分成了2 4 = 16个组,每个组包含2 1 = 2个块,主存中的某一字块可以按模16映射到Cache某组中的任一字块。
一方面,主存的第j块会映射到Cache的第i组内,两者之间存在一一对应的映射关系,这是一种直接映射;另一方面,主存的第j块可以映射到缓存中第i组内的任一块,这又是一种全相联的映射关系。