TLB 索引到底是做什么用的?

What exactly is the TLB index for?

所以我对 TLB 索引的确切含义感到困惑。假设我们有这个 TLB:

对于虚拟地址 0x021a,我们将得到:

VPN:0x8 TLB索引:0x0 TLB 标签:0x2

这会导致失误。我不明白。难道我们没有命中标签 0x2 吗?导致0x20的PPN?我也看不出索引在这里发挥作用。我认为它可能会给我们一个集合中的块,但显然,事实并非如此。

那么为什么它是未命中的,索引在这里究竟做了什么?

Don't we get a hit for the tag 0x2?

没有。 TLB 中带有标记 02 的两个条目用于完全不同的虚拟页码 (VPN)。即使它们共享相同的标签,它们也不适用于 VPN 8。第 1 组中的一个用于 VPN 9,而第 3 组中的一个用于 VPN 0b(恰好无效)。查找VPN 8时,只会查找Set 0,因为已知VPN 8只能在Set 0中。

仅仅因为 TLB 条目共享相同的标签并不意味着它们用于相同的 VPN。由于 TLB 不是 fully associative,因此各个 TLB 条目不必包含整个 VPN,因为存储条目的集合暗示了 VPN 的一部分。只有完全关联的 TLB 才有必要将整个 VPN 存储到每个 TLB 条目中。

因此,VPN分为TLB Tag和TLB Index。在您的练习中,TLB Index 由 VPN 的两个 least significant bits 组成,而 TLB Tag 由其余位组成。只有 TLB 标签存储在每个 TLB 条目中,不存储 TLB 索引,因为它由 TLB 条目所在的集合暗示。