《操作系统 - 清华大学》6 -2:局部页面置换算法:先进先出页面置换算法 (FIFO)

文章目录

  • [1. 先进先出算法的工作原理](#1. 先进先出算法的工作原理)
  • [2. 先进先出算法特征](#2. 先进先出算法特征)
  • [3. 先进先出算法示例](#3. 先进先出算法示例)

1. 先进先出算法的工作原理

先进先出算法就是说选择在内存中驻留时间最长的页面,如果要淘汰一个页面的话,要选择这个页面淘汰,也就意味着其实在系统中维护了一个表,这个表记录了当前在内存中这些页的驻留时间,以时间排序,比如链表的头放当前驻留时间最长的页面,链表的尾巴放最短页面,当发生缺页中断时候,需要把驻留时间最长的页面置换出去,就相当于是把链表首这个页面给置换出去。那如果把新页加进来,这个页的位置应该添加在这个链表的尾部,这样就形成先进先出算法的大致过程。

这个算法实现起来很简单,维护一个 List 就 OK 了, 产生缺页中断的次数其实是比较多的 ,而且还有很特殊现象------Belady 的现象 ,这个现象会产生一种很奇怪的事情,比如一般来说当给一个运行的程序分为更多的物业的时候,按道理来说应该它缺页次数是变得少了,如果是采用 FIFO 算法的话,那可能出现给它物理页帧越多,反而产生缺页次数越大这种现象,这种称为Belady 现象。

2. 先进先出算法特征

3. 先进先出算法示例

FIFO 算法的特点是要把驻留时间最长的页替换出去,还是拿例子来说明问题,看看在刚才同样一个防问序列下面,如果采取 FIFO 算法,那么它的大致执行过程:

  1. 在0 时刻,物理页里面已经放了 a b c d 四个虚拟页

  2. 接下来访问 c a d b ,其实这个几个页都在物理业中存在了,没问题,不会产生缺页中断

  3. 第五个时刻访问 e 的时候,e 不在物业帧里面存着,需要把某一页替换出去,替换哪一页?

    需要注意前面假设在最开始时候,就是 0 时刻之前,按照顺序先 a 再 b,再 c, 再 d 顺序,把这4个虚拟页放到物理页中来,所以说驻留时间最长页是 a,所以根据 FIFO 算法特点,应该把最久页面给换出去,所以说替换的是 a。

  4. 再接下第六时候,访问是 b, b 本来就在这里面,所以它不会产生缺页中断

  5. 又访问 a ,但在第五时刻, a 已经被换出,所以说再访问 a 的时候,a 已经不带物理内存中了,那又要开始替换,需要把最久的那个页给换出去。在内存中驻留最久页 是 b,所以需要把 b 给换出去,把 a 给换进来,这产生第二次缺页中断。

  6. 再接下来,又要访问 b,b 刚被换出去,那为此又不得不产生下次中断和页面置换,那下次又换出哪个?根据前面假设,就是 c 在内存中驻留时间最长,所以把 c 换出去。

但接下来访问的是 c d,依此类推会不停地产生中断,在这种访问序列情况下,采用 FIFO 页面置换算法,其实产生 5次缺页中断,比刚才最优置换算法要多好几次,这也是 FIFO 的算法的特点。实现简单,但产生缺页次数比较多

相关推荐
jack-hui65 分钟前
docker配置gpu运行环境:linux离线安装nvidia-container,避免网络问题
linux·docker·容器
渡我白衣5 分钟前
Linux网络编程:UDP 的DictServer
linux·网络·网络协议·udp
小立爱学习32 分钟前
Linux 内存管理之 Rmap 反向映射
linux·c语言
Young_Zn_Cu35 分钟前
Windows安装虚拟机遇到内容解码失败
linux·windows·ubuntu
monkey_lqd1 小时前
arm ramdump调试
linux
ihui数学建模1 小时前
【Mac版】Linux 入门命令行快捷键+联想记忆
linux·运维·macos
花小璇学linux1 小时前
imx6ull-驱动开发篇2——字符设备驱动开发步骤
linux·驱动开发·imx6ull·嵌入式软件
*wj1 小时前
【linux驱动开发】编译linux驱动程序报错:ERROR: Kernel configuration is invalid.
linux·运维·驱动开发
郝学胜-神的一滴1 小时前
Spring Boot Actuator 保姆级教程
java·开发语言·spring boot·后端·程序人生
@珍惜一生@2 小时前
xerces-c-src_2_8_0 arm_linux编译
linux·c语言·arm开发