Linux虚拟内存和三种页面置换算法

虚拟内存、虚拟内存的页、物理内存的页框、页表

见博客【Linux】Linux的虚拟内存详解(MMU、页表结构)中的虚拟内存、虚拟内存的页、物理内存的页框、页表。


请页与交换

见博客【Linux】Linux的虚拟内存详解(MMU、页表结构)中的请页与交换。

考虑下面情况:在请页成功之后,内存中已没有空闲物理页框了。这时,系统必须启动所谓的 “交换”机制,即调用相应的内核操作函数,在物理页框中寻找一个当前不再使用或者近期可能不会用到的页面所占据的页框。找到后,就把其中的页移出,以装载新的页面。对移出页面根据两种情况来处理:如果该页未被修改过,则删除它;如果该页曾经被修改过,则系统必须将该页写回辅存。

上述的“交换”机制即下面要提到的页面置换算法,虽然有三种算法类型,但是Linux系统使用的是其中的最近最少使用(LRU)页面置换算法


三种页面置换算法

以下内容转自三种页面置换算法

1.为什么要有页面置换算法

程序运行过程中,有时要访问的页面不在内存中,而需要将其调入内存。但是内存已经无空闲空间存储页面,为保证程序正常运行,系统必须从内存中调出一页程序或数据送到磁盘对换区,此时需要一定的算法来决定到底需要调出那个页面。通常将这种算法称为“页面置换算法”。


2.页面置换算法的分类

2.1 最佳置换算法(OPT)

(1)实现原理:每次选择未来长时间不被访问的或者以后永不使用的页面进行淘汰。

(2)举例:假定系统为某进程分配了三块物理块,并有以下页面:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

  • 程序运行时,先将7,0,1三个页面装入内存。
  • 之后,当进程要访问页面2的时候,将会产生缺页中断。
  • 此时根据最佳置换算法,因为页面7要在第18次才能访问,页面0在第5次访问,页面1在第14次访问,页面7最久不被使用,所以将页面7淘汰;
  • 当进程0要访问时,因为它已存在在内存所以不必产生缺页中断; 当页面3要访问时,又引起缺页中断淘汰1;
  • 依次类推直到最后一个页面访问完。下图为采用最佳置换算法的置换图。由图可得,采用最佳置换算法发生了6次缺页中断。

在这里插入图片描述

(3)特点

  • 缺点:最佳置换算法是一种理想化算法,具有较好的性能,但是实际上无法实现(无法预知一个进程中的若干页面哪一个最长时间不被访问);
  • 优点:最佳置换算法可以保证获得最低的缺页率

2.2 先进先出页面置换算法(FIFO)

(1)实现原理:淘汰最先进入内存的页面,即选择在页面待的时间最长的页面淘汰。

(2)举例

依旧是上一个算法的例子

  • 程序运行时,先将7,0,1三个页面装入内存。
  • 之后,当进程要访问页面2的时候,将会产生缺页中断。此时根据先进先出置换算法,因为页面7是最先进入内存的,所以将页面7换出;
  • 当进程0要访问时,因为它已存在在内存所以不必产生缺页中断; 在进程要访问页面3的时候,因为页面0是最早进入内存的,所以将页面0换出;
  • 依次类推直到最后一个页面访问完。下图为采用先进先出置换算法的置换图。由图可得,采用最佳置换算法发生了12次缺页中断。先进先出的页面置换比最佳置换算法的页面置换正好多了一倍;

在这里插入图片描述

(3)特点

  • 优点:先进先出算法实现简单,是最直观的一个算法
  • 缺点:先进先出的性能最差,因为与通常页面的使用规则不符合,所以实际应用少

2.3 最近最少使用置换算法(LRU)

(1)实现原理:选择最近且最久未被使用的页面进行淘汰

(2)举例:

依旧是上一个算法的例子

  • 程序运行时,先将7,0,1三个页面装入内存。
  • 之后,当进程要访问页面2的时候,将会产生缺页中断。此时根据最近最久未使用置换算法,因为页面7是最近最久未被使用的的,所以将页面7淘汰;
  • 当进程0要访问时,因为它已存在在内存所以不必产生缺页中断;
  • 在进程要访问页面3的时候,因为页面1是最近最久未被使用的,所以将页面1淘汰;
  • 依次类推直到最后一个页面访问完。下图为采用最近最久未使用的置换算法的置换图。由图可得,采用最近最久未使用置换算法发生了9次缺页中断。

在这里插入图片描述

(3)特点

  • 优点:由于考虑程序访问的时间局部性,一般能有较好的性能;实际应用多
  • 缺点:实现需要较多的硬件支持,会增加硬件成本
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值