caching - TLB 索引到底是干什么用的?
问题描述
所以我对TLB索引到底是什么感到困惑。假设我们有这个 TLB:
对于虚拟地址 0x021a,我们最终会得到:
VPN:0x8 TLB 索引:0x0 TLB 标签:0x2
这将导致错过。我不明白。我们没有得到标签 0x2 的命中吗?导致 PPN 为 0x20?我也无法真正看到索引在这里发挥作用的地方。我认为它可能会给我们一个集合中的块,但显然,这不是真的。
那么为什么会错过,索引在这里到底会做什么呢?
解决方案
我们没有得到标签 0x2 的命中吗?
不可以。TLB 中带有标签 02 的两个条目用于完全不同的虚拟页码 (VPN)。即使它们共享相同的标签,它们也不适用于 VPN 8。Set 1 中的一个用于 VPN 9,而 Set 3 中的一个用于 VPN 0b(恰好是无效的)。在查找 VPN 8 时,只会搜索 Set 0,因为已知 VPN 8 只能在 Set 0 中。
仅仅因为 TLB 条目共享相同的标签并不意味着它们用于相同的 VPN。由于 TLB 不是完全关联的,各个 TLB 条目不必包含整个 VPN,因为 VPN 的一部分由存储条目的集合隐含。只有使用完全关联的 TLB,才有必要将整个 VPN 存储到每个 TLB 条目中。
因此,VPN 被拆分为 TLB Tag 和 TLB Index。在您的练习中,TLB 索引由 VPN 的两个最低有效位组成,TLB 标记由其余位组成。每个 TLB 条目中仅存储 TLB 标记,不存储 TLB 索引,因为它由 TLB 条目所在的集合暗示。
推荐阅读
- java - 当我运行此代码时,它给了我一个白屏,这个白屏的原因是 try 块中的第一行
- linux - 如何从 popen 和 fgets 获得无缓冲的输出
- python - 在 Airflow 中使用 Spark
- javascript - 未选中时,默认情况下复选框“打开”?
- java - 创建自定义字段注释以检查 Java 中的 Null 值
- flutter - Flutter:连接小部件包装器提供程序错误
- google-sheets - G-Sheets 计数单元格并在 0 上显示空单元格
- c# - 两个对象的EF Core保存错误取决于第二个等于一个
- oracle - 如何将整行作为记录传递给oracle触发器中的函数
- linux - InfluxDB 拒绝连接