先决条件 – 页面替换算法
在操作系统中,进程数据以固定大小的块加载,每个块称为一个页面。处理器将这些页面加载到称为帧的固定大小的内存块中。通常,每个页面的大小始终等于框架大小。
当内存中找不到页面,需要从磁盘加载时,就会发生页面错误。如果发生页面错误并且所有内存帧都已分配,则需要在请求新页面时替换内存中的页面。这称为需求分页。要替换哪个页面的选择由页面替换算法指定。常用的页替换算法有FIFO、LRU、最优页替换算法等。
通常,随着进程虚拟内存的帧数增加,它的执行速度会随着页面错误发生的次数减少而变得更快。有时会发生相反的情况,即当更多的帧分配给一个进程时,会出现更多的页面错误。这个最出乎意料的结果被称为Belady 的异常。
Bélády’s anomaly是对给定内存访问模式增加页框数量导致页面错误数量增加的现象的名称。
这种现象在以下页面替换算法中很常见:
- 先进先出 (FIFO)
- 第二次机会算法
- 随机页面替换算法
贝拉迪异常的原因——
另外两种常用的页面替换算法是 Optimal 和 LRU,但是对于任何引用字符串,这些算法中永远不会出现 Belady’s Anamoly,因为它们属于一类基于堆栈的页面替换算法。
基于堆栈的算法是这样一种算法,它可以证明内存中N帧的页面集始终是内存中包含N + 1帧的页面集的子集。对于 LRU 替换,内存中的页面集将是n 个最近引用的页面。如果帧数增加,那么这n 个页面仍将是最近引用的页面,因此仍将在内存中。而在FIFO,如果一个名为B页数来到一个页面之前物理内存-更换B的的则优先级比更大,但这不是独立的页面帧,因此数量,FIFO不遵循堆栈页替换策略,因此遭受 Belady 异常。
示例:考虑下图以了解基于堆栈的页面替换算法的行为
该图说明了给定的页面集,即 3 帧内存中的 {0, 1, 2} 不是内存中页面的子集 – {0, 1, 4, 5} 具有 4 帧,并且它违反了基于堆栈的算法的特性。这种情况在FIFO算法中经常可以看到。
Belady 的 FIFO 异常 –
假设系统在内存中没有加载页面并使用 FIFO 页面替换算法。考虑以下参考字符串:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
案例 1:如果系统有 3 个帧,使用 FIFO 页面替换算法的给定参考字符串总共产生 9 个页面错误。下图说明了示例中发生的页面错误的模式。
情况 2:如果系统有 4 个帧,使用 FIFO 页面替换算法的给定参考字符串总共产生 10 个页面错误。下图说明了示例中发生的页面错误的模式。
从上面的例子可以看出,在使用 FIFO 页替换算法的同时增加帧数,页错误数从 9 个增加到 10 个。
注 –并非每个字符串引用模式都会导致 FIFO 中的 Belady 异常,但某些类型的字符串引用会在增加帧数时恶化 FIFO 性能。
为什么基于堆栈的算法不会遭受异常 –
所有基于堆栈的算法都不会遭受 Belady 异常,因为这些类型的算法为页面(用于替换)分配优先级,该优先级与页面帧的数量无关。此类策略的示例是 Optimal、LRU 和 LFU。此外,这些算法还具有良好的模拟特性,即可以通过单次通过参考字符串为任意数量的页框计算未命中(或命中)率。
在 LRU 算法中,每次引用页面时,它都会移到栈顶,因此,栈顶的n页是最近使用的n个页面。即使帧数增加到n+1 ,top堆栈将有n+1 个最近使用的页面。
类似的例子可以用来计算 LRU 算法中的缺页次数。假设一个系统在内存中没有加载页面并使用 LRU 页面替换算法。考虑以下参考字符串:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
案例 1:如果系统有 3 个帧,使用 LRU 页面替换算法的给定参考字符串总共产生 10 个页面错误。下图说明了示例中发生的页面错误的模式。
Case-2:如果系统有 4 帧,给定的参考字符串使用 LRU 页面替换算法,那么总共发生 8 个页面错误。该图显示了示例中页面错误的模式。
结论 –
各种因素会显着影响页面错误的数量,例如参考字符串长度和可用的空闲页框数量。由于缓存大小较小以及缓存内容的更改速度不快,也会发生异常。另外,即使在增加帧数后出现固定页错误数的情况也可以视为异常。通常,随机页面替换算法等算法也容易受到 Belady 异常的影响,因为它的行为可能类似于先进先出 (FIFO)页面替换算法。但是基于堆栈的算法通常不受所有此类情况的影响,因为当帧递增时,它们可以保证提供更好的页面命中率。
GATE CS 角问题 –
练习以下问题将帮助您测试您的知识。所有问题都在前几年的 GATE 或 GATE 模拟测试中提出。强烈建议您练习它们。
- GATE-CS-2001 |问题 21
- GATE-CS-2009 |问题 8
- ISRO CS 2011 |第 73 题
- GATE-CS-2016(套装2)|第 30 题
- ISRO CS 2016 |第 48 题
- GATE CS Mock 2018 |第 63 题