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

相关推荐
leoufung43 分钟前
vim 多个关键字高亮插件介绍
linux·编辑器·vim
Nerd Nirvana4 小时前
软考—系统架构设计(案例 | 论文)
linux·系统架构·软件工程·软考·计算机基础
勤奋的凯尔森同学5 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
打不了嗝 ᥬ᭄9 小时前
Linux的权限
linux
落幕9 小时前
C语言-进程
linux·运维·服务器
深度Linux9 小时前
C++程序员内功修炼——Linux C/C++编程技术汇总
linux·项目实战·c/c++
风静如云11 小时前
OpenBMC:BmcWeb定义service
linux
leoufung11 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
bugtraq202112 小时前
XiaoMi Mi5(gemini) 刷入Ubuntu Touch 16.04——安卓手机刷入Linux
linux·运维·ubuntu
CodeWithMe13 小时前
[ Vim ] 常用命令 and 配置
linux·编辑器·vim