最不常用 (LFU) 缓存跟踪

Least Frequently Used (LFU) cache tracing

我想知道我是否正确回答了这个问题:

The page references are in this sequence: *ABCBADACEBEFBEFBA With LFU page replacement, how many page faults would occur?

SLOT A B C B A D A C E B E F B E F B A
1 A x x x
2 B x x x x
3 C D C E x F E F

从我做的追踪来看。我得出的结论是有 9 个页面错误。我计算每次使用页面的频率,并在它们从插槽中移除(换出)时将其重置为 0。这是正确的方法吗?

SLOT A B C B A D A C E B E F B E F B A
1 A x x x
2 B x C B F B F B
3 C D E x x

我得到的解决方案是这样的,它给了我们 11 个页面错误。但是,我不明白为什么当B的频率为2而插槽3中的D的频率仅为1时,第二个C会被替换在插槽2上。

您应该回到 class 中给出的 LFU 定义。好像你解释成

evict the entry with the least number of hits since it was populated.

在这种情况下,您的答案(第一个 table)确实是正确的。

然而,预期答案(第二个table)中使用的LFU策略似乎是

evict the entry with the smallest ratio of freq(X) = number of hits / its age.

在这种情况下,在第 2 个 C,你有

freq(A) = 3/7 = 0.429
freq(B) = 2/6 = 0.333
freq(D) = 1/2 = 0.500

而频率最低的条目确实是 B。

我希望 LFU 实施第二个策略,因为一旦您的缓存中有不同年龄的条目,您就必须考虑到它们有更少或更多的时间来累积统计信息。如果条目永远不会被驱逐,您的方法只会在极限内给出正确的频率——这不是一个实际有趣的情况。