Operating system Can';我不懂迟到';s异常

Operating system Can';我不懂迟到';s异常,operating-system,virtual-memory,page-fault,Operating System,Virtual Memory,Page Fault,因此,Belady的异常现象表明,当使用FIFO页面替换策略时,当添加更多页面空间时,我们将有更多的页面错误 我的直觉告诉我们,当我们增加更多的页面空间时,我们应该减少或最多减少相同数量的页面错误 如果我们将FIFO队列视为管道,则添加更多页面空间就像使管道变大: ____ O____O size 4 ________ O________O size 8 那么,为什么会出现更多的页面错误呢?我的直觉是,使用较长的管道时,开始出现页面错误的时间会稍长一些(因此,使用无限长的管道时,不会

因此,Belady的异常现象表明,当使用FIFO页面替换策略时,当添加更多页面空间时,我们将有更多的页面错误

我的直觉告诉我们,当我们增加更多的页面空间时,我们应该减少或最多减少相同数量的页面错误

如果我们将FIFO队列视为管道,则添加更多页面空间就像使管道变大:

 ____
O____O  size 4

 ________
O________O  size 8
那么,为什么会出现更多的页面错误呢?我的直觉是,使用较长的管道时,开始出现页面错误的时间会稍长一些(因此,使用无限长的管道时,不会出现页面错误),然后页面错误的数量会与使用较小的管道时一样多,频率也一样


我的推理有什么问题?

当使用FIFO时,增加页面数量会增加某些访问模式中的错误率,这是因为当您有更多页面时,最近请求的页面可能会在FIFO队列的底部停留更长时间

考虑维基百科示例中第三次请求“3”:

页面错误用“f”标记

1:

2:

在第一个示例中(页面较少),有9个页面错误

在第二个示例中(有更多页面),有10个页面错误

使用FIFO时,增加缓存的大小会更改项目的删除顺序。在某些情况下,会增加故障率

Belady的异常并没有说明故障率相对于缓存大小的一般趋势。因此,在一般情况下,您的推理(关于将缓存视为管道)是正确的

总之:
Belady的异常现象指出,有可能利用这样一个事实,即较大的缓存大小会导致缓存中的项目在FIFO队列中的提升时间晚于较小的缓存大小,从而导致较大的缓存大小在特定(可能是罕见的)情况下具有较高的故障率访问模式。

只有当当前引用的页面是最后从主存中删除的页面时,Belady的异常才会在FIFO方案中发生。只有在这种情况下,即使增加了更多的页面空间,也会出现更多的页面错误

这句话是错误的,因为它过于笼统:

Belady的异常现象表明,当使用FIFO页面替换策略时,当添加更多页面空间时,我们会有更多的页面错误

这是一个更正的版本:

Belady的异常现象表明,当使用FIFO页面替换策略时,当添加更多页面空间时,某些内存访问模式实际上会导致更多页面错误


换句话说。。。是否观察到异常取决于实际的内存访问模式。

Belady的异常发生在页面替换算法中,不遵循堆栈算法。即帧较少时的页面应该是帧较多时页面的子集。在增加页面帧时,以前存在的页面框架必须存在。这有时会发生在FIFO中,甚至是随机页面替换,但不是LRU或optimal。

简而言之,关于Belady的异常,我们可以说“添加更多框架会导致更多页面错误”。

即使在阅读维基百科文章并接受答案后,我也无法理解Belady的异常。写下痕迹后,我有点明白了。在这里,我想分享我的理解

理解迟到异常的关键

  • 与LRU不同,FIFO只是将最古老的元素推出,而不考虑 频率因此,在FIFO中停留更长时间意味着沦为受害者 驱逐
在这里,我将3页和4页FIFO队列称为FIFO3和FIFO4

为了理解维基百科的例子,我把它分为两部分。当FIFO3赶上FIFO4和FIFO3超过FIFO4时

FIFO3如何在9日赶上FIFO4

看看两个FIFO中的3。在FIFO3中,3在第4天被驱逐,并在第5天返回。所以它在8号仍然在那里,缓存命中发生了。 在FIFO4中,3在第5次命中,但这次缓存命中使3停留更长时间,并在第7次被驱逐,正好在第8次命中下一个3之前

2与3相同。第二个2(第6个)在FIFO3上未命中,在FIFO4上命中,但第三个2(第9个)在FIFO3上命中,在FIFO4上未命中。 这样想可能会有帮助。在FIFO3上,3在5日更新,所以停留时间更长,直到8日。在FIFO4上,3是旧的,在下一个3到来之前的第7天被驱逐

FIFO3如何超越FIFO4

因为FIFO4在8、9号有2次缓存未命中,所以在FIFO4中,4在11号被按下并逐出。 FIFO3仍然保留12日的4,因为在9日的8日有缓存命中,所以4没有被按下。 我想这就是为什么维基百科的算术题说“小钱明智,大钱愚蠢”

结论

FIFO是一种简单而朴素的算法,它不考虑频率。
通过将LRU(最近使用最少的)应用到Wikipedia的示例中,您可能会得到更好的理解。在LRU中,4比3好。

不确定您在这里寻找的是什么——WP页面有一个实际的例子:您阅读了吗?这被称为反常现象,因为它与大多数人的直觉背道而驰在这种特殊情况下,拥有更多的页面帧会导致算法将页面保留更长时间,从而减少以后使用的频率,并且它们不会以足够快的速度从FIFO中退出,从而为实际需要的页面腾出空间。但我不知道你能从中得到什么普遍的直觉。这就是可能发生的情况。“在这种情况下,有更多的页面帧会导致算法将页面保留的时间更长,而在以后使用的频率会更低。”我无法理解这会有什么不同。为什么不只是把它们放在记忆中(当你有一根更小的管子时会发生什么情况)就更好呢:在这种情况下,当然会更好,但FIFO无法预测未来。你在维基百科上看过这个例子了吗?但是当第二次访问3的时候,第二次它在缓存中,而我
Page Requests   3    2    1    0    3    2    4    3    2    1    0    4
Newest Page     3f   2f   1f   0f   3f   2f   4f   4    4    1f   0f   0
                     3    2    1    0    3    2    2    2    4    1    1
Oldest Page               3    2    1    0    3    3    3    2    4    4
Page Requests   3    2    1    0    3    2    4    3    2    1    0    4
Newest Page     3f   2f   1f   0f   0    0    4f   3f   2f   1f   0f   4f
                     3    2    1    1    1    0    4    3    2    1    0
                          3    2    2    2    1    0    4    3    2    1
Oldest Page                    3    3    3    2    1    0    4    3    2