0

我给了一个任务,我需要用 Java 模拟一个关联缓存。我们得到一组字节地址,我们需要找出每个地址是命中还是未命中。缓存由 32 个块组成,每个块为 8 个字节

所以方案如下:

  • 从地址计算组地址(组地址是地址除以缓存中每个块的大小。例如地址 950 的组地址将是 950/8)
  • 使用整个组地址作为标签
  • 扫描整个缓存,看看标签是否已经在缓存中
  • 如果找到标签,记录一次命中
  • 如果未找到标签,则记录一次未命中,并将标签存储在第一个可用块中
  • 如果没有可用空间,则从缓存中删除最近最少使用 (LRU) 块
  • 更新缓存以存储新标签(如果有未命中)并记住此块是最近使用的最多的块。
  • 将有效位设置为真,将标签存储在块中,记住最初使用的地址。

我遇到的问题是最近最少使用的位。我们被要求实现 LRU 的方式是保持块从最近使用到最近最少使用的顺序,当我们需要替换一个块时,我们从末尾删除旧块并将新块添加到开头。然后,当我们获得命中时,我们将命中移动到缓存的开头。

4

1 回答 1

0

您可以使用链表来实现这一点。当然,您需要想办法快速查找列表...

于 2012-05-01T00:36:06.453 回答