基于LRU算法计算高速缓存

时间:2014-10-08 07:50:41

标签: paging lru

假设我有4块高速缓冲存储器,使用LRU(最近最少使用) 关于以下对存储器块的访问顺序的替换算法:1 2 3 4 5 2 5 4 1 5 2 3:

1   2   3   4   5   2   5   4   1   5   2   3

1   1   1   1   5   5   5   5   5   5   5   5
    2   2   2   2   2   2   2   2   2   2   2
        3   3   3   3   3   3   1   1   1   1
            4   4   4   4   4   4   4   4   3

所以最后,缓存将包含这个内存块:“5 2 1 3”

但正确的结果是“1 5 2 3”

请告诉我这里我做错了什么!

修改:

我会说实话,我正在做练习,除了这里之外无法从任何地方获得帮助,可能是我误解了这个问题,所以这是原来的问题:

enter image description here

3 个答案:

答案 0 :(得分:4)

在简单的缓存中,顺序并不重要。 LRU算法非常简单,您无需运行整个模拟。只需查看序列中的最后4个数字:

... 1 5 2 3

答案 1 :(得分:3)

  

那么我对LRU的模拟是错误的吗?老实说,我仍然没有得到它!

第5列中的模拟出错,您将最新数据添加到最旧位置。

以下是更正:

            1   2   3   3   3   2   2   4   1  <-- Oldest accesses
        1   2   3   4   4   2   5   4   1   5
    1   2   3   4   5   2   5   4   1   5   2
1   2   3   4   5   2   5   4   1   5   2   3  <-- Newest accesses
  • 请注意,最新的行始终等于您的输入序列。
  • 其他元素一次老化一行,除非它们以新的访问方式被带到前面

答案 2 :(得分:2)

根据Abraham Silberschatz 操作系统概念第8版第9章图9.15。 CPU中缓存的顺序无关紧要。重要的是缓存未命中或页面错误率。

但是,在这个问题中,要求CPU中缓存的顺序不是缓存中的内容。因此,Raymond Hettinger的方式将为您提供正确的答案。

不幸的是,良好的CPU设计不会以这种方式工作。因为,每个缓存块必须用每个输入的新数据刷新。这打败了使用缓存的目的!