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

相关推荐
C_心欲无痕2 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
冰西瓜6002 小时前
国科大2025操作系统高级教程期末回忆版
linux
HIT_Weston3 小时前
93、【Ubuntu】【Hugo】搭建私人博客:面包屑(一)
linux·运维·ubuntu
cuijiecheng20183 小时前
Linux下Beyond Compare过期
linux·运维·服务器
HIT_Weston4 小时前
92、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(六)
linux·运维·ubuntu
CodeAllen嵌入式4 小时前
Windows 11 本地安装 WSL 支持 Ubuntu 24.04 完整指南
linux·运维·ubuntu
码农小韩5 小时前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog6 小时前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did6 小时前
wsl安装完无法进入wsl
linux
石头5307 小时前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux