假设我有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”
请告诉我这里我做错了什么!
修改:
我会说实话,我正在做练习,除了这里之外无法从任何地方获得帮助,可能是我误解了这个问题,所以这是原来的问题:
答案 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设计不会以这种方式工作。因为,每个缓存块必须用每个输入的新数据刷新。这打败了使用缓存的目的!