《操作系统 - 清华大学》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 的算法的特点。实现简单,但产生缺页次数比较多

相关推荐
地衣君35 分钟前
Ubuntu 配置使用 zsh + 插件配置 + oh-my-zsh 美化过程
linux·运维·ubuntu
2401_8582861137 分钟前
OS11.【Linux】vim文本编辑器
linux·运维·服务器·编辑器·vim
朱包林1 小时前
day27-shell编程(自动化)
linux·运维·服务器·网络·shell脚本
kaede1 小时前
Linux实现线程同步的方式有哪些?
linux·运维·云计算
德先生&赛先生1 小时前
Linux编程:2、进程基础知识
linux
子正1 小时前
一键编译包含多个独立模块和应用的工程(linux cmake)
linux·运维·cmake
小阳睡不醒1 小时前
小白成长之路-Linux Shell脚本练习
linux·运维·服务器
dessler2 小时前
代理服务器-LVS的DR模式
linux·运维·云计算
梦星辰.3 小时前
VSCode CUDA C++进行Linux远程开发
linux·c++·vscode
远方16093 小时前
0x-2-Oracle Linux 9上安装JDK配置环境变量
java·linux·oracle