📜  操作系统中的页面替换算法

📅  最后修改于: 2021-09-27 14:27:29             🧑  作者: Mango

在使用分页进行内存管理的操作系统中,需要一个页面替换算法来决定当新页面进入时需要替换哪个页面。

Page Fault –当正在运行的程序访问映射到虚拟地址空间但未加载到物理内存中的内存页面时,会发生页面错误。

由于实际物理内存远小于虚拟内存,因此会发生页面错误。在页面错误的情况下,操作系统可能必须用新需要的页面替换现有页面之一。不同的页面替换算法建议不同的方法来决定替换哪个页面。所有算法的目标都是减少页面错误的数量。

页面替换算法:

1. 先进先出 (FIFO) –
这是最简单的页面替换算法。在这个算法中,操作系统在一个队列中跟踪内存中的所有页面,最旧的页面在队列的前面。当一个页面需要被替换时,队列前面的页面被选中进行删除。
示例 1考虑具有 3 个页面框架的页面引用字符串1、3、0、3、5、6。查找页面错误的数量。

最初所有的槽都是空的,所以当 1、3、0 到来时,它们被分配到空槽——> 3 页错误。
当 3 出现时,它已经在内存中,所以 —> 0 Page Faults。
然后是 5,它在内存中不可用,因此它替换了最旧的页槽,即 1。-> 1 页错误。
6 来了,它在内存中也不可用,因此它替换了最旧的页槽,即 3 —> 1 页错误。
最后当 3 来时它不可用所以它替换 0 1 页错误

Belady 异常 Belady 异常证明,在使用先进先出 (FIFO) 页面替换算法的同时增加页面帧数时,可能会出现更多页面错误。例如,如果我们考虑引用字符串3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4 和 3 个插槽,我们总共有 9 个页面错误,但是如果我们将插槽增加到 4,我们得到 10 个页面错误。

2. 最佳页面替换 –
在这个算法中,页面被替换,这些页面在未来最长的持续时间内不会被使用。
示例 2:考虑页面引用 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2,有 4 个页框。查找缺页次数。

最初所有的槽都是空的,所以当 7 0 1 2 被分配给空槽时 —> 4 Page faults
0 已经存在,所以 —> 0 页面错误。
当 3 出现时,它将取代 7,因为它在未来最长的时间内没有使用。—> 1 Page fault。
0 已经存在,所以 —> 0 页面错误。 .
4 将取代 1 —> 1 Page Fault。

现在对于进一步的页面引用字符串-> 0 Page fault因为它们已经在内存中可用。
最佳页面替换是完美的,但在实践中是不可能的,因为操作系统无法知道未来的请求。最佳页面替换的用途是设置一个基准,以便可以针对它分析其他替换算法。

3. 最近最少使用 –
在这个算法页面中,最近最少使用的页面将被替换。
示例 3考虑具有 4 个页面框架的页面引用字符串7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2。查找页面错误数。

最初所有的槽都是空的,所以当 7 0 1 2 被分配给空槽时 —> 4 Page faults
0 已经是他们的了 —> 0 Page fault。
当 3 出现时,它将取代 7,因为它最近最少使用 —> 1 Page fault
0 已经在内存中,所以 —> 0 Page fault
4 将取代 1 —> 1 Page Fault
现在对于进一步的页面引用字符串-> 0 Page fault因为它们已经在内存中可用。

GATE CS 角问题

练习以下问题将帮助您测试您的知识。所有问题都在前几年的 GATE 或 GATE 模拟测试中提出。强烈建议您练习它们。

  1. 内存管理 |问题 1
  2. 内存管理 |问题 10
  3. GATE CS 2014 (Set-1),问题 65
  4. GATE CS 2012,问题 40
  5. GATE CS 2007,问题 56
  6. GATE CS 2007,问题 82
  7. GATE CS 2007,问题 83
  8. GATE CS 2014(第 3 组),问题 65
  9. GATE CS 2002 问题 23
  10. GATE CS 2001,问题 21
  11. GATE CS 2010,问题 24

参考 –
贝拉迪的异常