【问题标题】:How does a virtually-indexed physically-tagged cache solve the problem of homonyms?虚拟索引物理标记缓存如何解决同音异义问题?
【发布时间】:2019-07-25 09:47:06
【问题描述】:

在谈到虚拟缓存时,同义词是指一个虚拟地址对应多个物理地址。

处理虚拟缓存中的同音异义问题的一种已知解决方案是使用物理标签进行缓存;即:用部分虚拟地址索引缓存,但将标记部分作为物理地址。我不明白这是怎么回事。

据我了解,处理器正在向缓存发送一个虚拟地址。如果处理器没有向缓存发送任何物理标签,它如何知道要检查哪个物理标签?例如,对于普通的物理缓存,如果您要查看缓存中是否存在 00001111,其中 0000 是标记位,1111 是索引位,您将按 1111 索引缓存,如果您得到命中,查看索引 1111 的标签是否为 0000。

但是,如果您的虚拟地址是 00001111,它对应于物理地址,例如 10101010,则处理器会将 00001111 发送到虚拟缓存。如果处理器发送的虚拟地址中不存在这些标签,缓存如何知道要检查哪些物理标签位(1010)?物理地址来自哪里?

简单来说,假设 VA 1 映射到 3 个物理地址:2、3 和 4。如果我的处理器使用虚拟地址 1 查询缓存,缓存如何知道它是否应该查找 2, 3和4?我要查找的物理地址不是很模糊吗?

【问题讨论】:

  • 您将不得不更详细地解释。您正在使用教科书作者放入书中的学术胡言乱语来迷惑学生。另外,目前尚不清楚这是一个编程问题而不是硬件设计问题。

标签: caching virtual-memory page-tables


【解决方案1】:

术语“虚拟索引”只是意味着索引不需要任何翻译。如果索引完全包含在虚拟到物理地址转换的 page_offset 部分中,就会发生这种情况。

假设您有 4kb 的页面。这意味着 12 LSB 地址不需要任何类型的转换。

现在假设你有一个 32kb 的缓存 (2^15),有 64b (2^6) 行和 8 的关联性。行数是 2^9,集合数是 2^6。因此,您的索引是 6 位。由于行是64b,所以行偏移是6b,部分(索引+偏移)是12b。您可以注意到它等于页面偏移大小并且需要no 翻译。这就是所谓的虚拟索引缓存。

因此,在虚拟索引缓存中,您可以并行执行地址的 MSB 的地址转换,并使用未转换地址的 LSB 从缓存中提取标签。一旦地址被翻译,你就可以将你的物理标签与翻译后的地址进行比较,没有任何同音异义的风险。

虚拟索引这个术语有误导性,因为它只适用于物理索引和虚拟索引相同的情况。

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 2017-12-10
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    相关资源
    最近更新 更多