五、硬件如何处理延迟转换?
通常是通过增加额外的状态,但这些额外的状态并不需要与 cache line 一起实际存储,因为每次只有几行会发生转换。延迟转换的需求只是导致商用 cache coherence 协议比理论上简化的 MESI 协议复杂得多的一个问题。Hennessy 和 Patterson 的经典导论书籍《计算机体系结构》涵盖了许多此类问题。
六、什么样的操作序列会使 CPU 的 cache 全部恢复到 invalid 状态?
不存在这样的序列,至少在 CPU 指令集中没有特殊提供 flush cache 指令的情况下是不存在的。但大多数 CPU 确实有这样的指令。
七、为什么单核处理器也有 store buffer 呢?
因为 store buffer 的目的不仅仅是为了屏蔽多处理器 cache-coherence 协议中的 acknowledge 延迟,而通常是为了屏蔽主存延迟。由于主存比单核处理器上的 cache 慢得多,因此单核处理器上的 store buffer 可以帮助屏蔽主存的延迟。
八、store-buffer 条目是可变长度的?这在硬件上不是很难实现吗?
有两种方法可以让硬件轻松处理变长 store。
第一种,每个 store-buffer 条目可以是单字节宽。这样,一个 64 位的 store 会消耗 8 个 store-buffer 条目。这种方法简单灵活,但缺点是每个条目需要复制大量 store 的目的地址。
第二种,每个 store-buffer 条目可以是 cache line 大小的两倍,其中一半比特位包含 store 的值,另一半比特位指示哪些比特位已经完成 store。因此,假设 cache line 为 32 位,将 0x5a 这个字节 store 到给定 cache line 的低字节位后,第一部分为 0xXXXXXX5a,第二部分为 0x000000ff,其中标有 X 的值是任意值,因为它们会被忽略。这种方法允许将与给定 cache line 相对应的多个连续 store 合并到一个 store-buffer 条目中,但对于单个字节的随机 store 来说,空间效率很低。
当然,实际硬件设计者使用的方案要复杂和高效得多。
本文为系列文章,未完待续。。。