什么是目录方案?
目录方案选择性地仅向存储共享数据块有效副本的那些缓存发送一致性命令。每个数据块必须关联一个目录项。目录项包含一组指向持有该块有效副本的缓存的指针。脏位指定任何持有缓存是否有权更新相关的数据块。
在目录方案的识别中,三种主要方法如下:
- 全映射目录方案
在全映射目录方案中,每个目录项包含与系统中缓存数量一样多的指针。如果缓存Ci包含数据块的副本,则指针Pi指向Ci,否则Pi指向自身。如果指针和缓存之间存在一对一对应关系,则一个简单的标志Fi就足以替换指针。
在这个称为存在标志向量的实现结构中,如果Ci包含有效副本,则标志Fi设置为true,否则Fi设置为false。还有一个额外的标志称为脏标志,当且仅当设置了一个存在位时,该标志被设置,指示关联的缓存有权更新数据块。
- 受限目录方案
受限目录方案的目标是与全映射目录方案相比,大幅减少位开销。基于缓存的共享内存系统的特性表明,在绝大多数情况下,只有有限数量的缓存包含相同数据块的有效副本。
共享内存中目录项的结构与全映射方案非常相似。目录项中的指针数量 (k) 远小于共享内存系统中的处理器数量 (n),这些指针是动态分配给包含相关数据块副本的那些缓存的。
因此,简单的位不足以表示指针。在一个n处理器系统中,需要log2n位来定义一个存在指针,因此,为每个内存块存储k个指针。受限目录的位开销为$\frac{klog_{2}n}{块大小}$,而全映射方案为n/块大小。如果Klog2n<n,即k<$\frac{n}{log_{2}n}$,则受限目录方案的位开销小于全映射方案。
- 链式目录方案
链式目录方案是前两种方案之间的一个很好的折衷方案。它保留了中央目录帧的有限大小,甚至进一步将存在指针的数量限制为一个,并且避免了驱逐操作。
存在指针数量的动态扩展是通过在缓存之间分配额外的存在指针来实现的。每个缓存中的每个数据块都扩展了一个指针,该指针用于链接数据块的有效副本。该方案的特点是它需要与数据块的有效副本数量一样多的存在指针。共享内存的目录项中没有多余的存在指针。