置换策略FIFO算法的实现

先进先出(FIFO)

FIFO策略把分配给进程的页框看做是一个循环缓冲区,按循环方式移动页。
它所需要的只是一个指针,这个指针在该进程的页框中循环。
因此这是一种实现起来最简单的页面置换策略。除了它的简单性,这种选择方法所隐含的逻辑是置换驻留在内存中时间最长的页:一个在很久以前取入内存的页,到现在可能已经不会再用到了。这个推断常常是错误的,因为经常会出现一部分程序或数据在整个程序的生命周期中使用频率都很高的情况,如果使用FIFO算法,则这些页会反复地需要被换入换出。
下图的例子,FIFO策略导致了6次缺页中断
2 3 2 1 5 2 4 5 3 2 5 2 测试数据

代码实现及注释

2 3 2 1 5 2 4 5 3 2 5 2 测试数据

#include <deque>
#include <cstdio>
#include <algorithm>
#include<iostream>
using namespace std;const int maxn = 105;
int a[maxn];
int main()
{deque<int>  dq;//定义一个队列deque<int >::iterator pos;//定义一个迭代器int numyk, numqueye = 0;cout << "请输入物理页框块数:";cin >> numyk;//物理页框块数int n;cout << endl << "请输入页面走向个数:";cin >> n;//输入一共需要访问的页面的个数for (int i = 0; i < n; i++)//依次输入页面的页号{cin >> a[i];}for (int i = 0; i < n; i++)//依次遍历要访问的页面{cout << "第" << i << "个" << endl;int in;in = a[i];//获取当前页面的页号并赋值给inif (dq.size() < numyk)//存在空余页框{int flag = 0;//标记值初始化为0for (pos = dq.begin(); pos != dq.end(); pos++)//遍历队列 if ((*pos) == in)//队列中的某个元素页的页号和当前访问的页的页号一致{flag = 1;break;}if (!flag) //队列中不存在此页面元素{dq.push_back(in);//放入队列 }}else //不存在多余页框{int flag = 0;//标记值初始化为0for (pos = dq.begin(); pos != dq.end(); pos++)if ((*pos) == in){flag = 1;break;}//存在该元素if (!flag)//不存在此元素 则置换最先进入的项 {numqueye++;//缺页数+1dq.pop_front();//最先进入的出队列 dq.push_back(in);//进队列 }}}cout << "FIFO缺页次数为:" << numqueye << endl;cout << "FIFO缺页中断率为:" << (double)numqueye * 1.0 / n << endl;
}

运行截图


回车!

308-置换策略FIFO算法的实现相关推荐

  1. 306-置换策略OPT算法的实现

    置换策略OPT算法的实现 最佳(OPT) OPT策略选择置换下次访问当前时间最长的那些页 可以看出该算法能导致最少的缺页中断,但是由于它要求操作系统必须知道将来的事件.显然这是不可能实现的.但是它仍能 ...

  2. 计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random()、webkit中crypto等随机算法的实现

    计算机LCG/PCG/MWC/XorShift等PRNG算法,以及V8中Math.random().webkit中crypto等随机算法的实现 本文篇幅较长,如想直接看 js 的随机数实现可定位本文E ...

  3. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  4. 游戏中常用的寻路算法的分享(3):A*算法的实现

    概述 剥除代码,A* 算法非常简单.算法维护两个集合:OPEN 集和 CLOSED 集.OPEN 集包含待检测节点.初始状态,OPEN集仅包含一个元素:开始位置.CLOSED集包含已检测节点.初始状态 ...

  5. Bug2算法的实现(RobotBASIC环境中仿真)

    移动机器人智能的一个重要标志就是自主导航,而实现机器人自主导航有个基本要求--避障.之前简单介绍过Bug避障算法,但仅仅了解大致理论而不亲自动手实现一遍很难有深刻的印象,只能说似懂非懂.我不是天才,不 ...

  6. 算法分析与设计实验报告 ——二分搜索程序算法的实现

    算法分析与设计实验报告 --二分搜索程序算法的实现 实验目的及要求 1.理解分治算法的概念和基本要素: 2.理解递归的概念: 3.掌握设计有效算法的分治策略: 4.通过二分搜索技术学习分治策略设计技巧 ...

  7. 算法分析与设计实验报告——二分搜索算法的实现

    算法分析与设计实验报告--二分搜索算法的实现 目录: 算法分析与设计实验报告--二分搜索算法的实现 一. 实验目的 二.实验要求 三. 实验原理 四. 实验过程(步骤) 五. 运行结果 六.实验分析与 ...

  8. 基于MATLAB的图像压缩感知 算法的实现

    摘要 获取项目源文件,联系Q:1415736481,可指导毕设,课设 数据压缩技术是提高无线数据传输速度的有效措施之一.传统的数据压缩技术是基于奈奎斯特采样定律进行采样,并根据数据本身的特性降低其冗余 ...

  9. 关联规则挖掘Apriori算法的实现

    实验名称 关联规则挖掘Apriori算法的实现 实验目的 1.掌握频繁项目集的生成原理 2.掌握关联规则挖掘的原理 3.掌握在weka中进行关联规则挖掘的具体流程. 实验内容 1.根据给定的事务数据库 ...

最新文章

  1. html语义化面试题,前端面试题-HTML结构语义化
  2. linux根据端口查pid、根据pid查端口、根据pid查服务路径
  3. oracle进城有哪些,oracle主要进程详解
  4. windows href 可以设置header吗_windows电脑端有什么桌面办公便签可以设置农历时间提醒?...
  5. DPI释疑--What is mean of Dpi?
  6. JavaScript截断/切片/修剪掉字符串中的最后一个字符
  7. chip_seq数据分析专题
  8. android手机恢复出厂设置,手机强制恢复出厂设置方法
  9. EMNLP-21-Exploring Task Difficulty for Few-Shot Relation Extraction
  10. MySQL数据库学习笔记2
  11. mac 和 windows excel 格内换行
  12. like to do 和like doing的区别
  13. 计算机常用删除文件的5种方法,电脑清理C盘垃圾文件的几种方法
  14. 零基础学习python第二课笔记
  15. LUNA16图片提取
  16. 售价80万!高合汽车,流淌法拉第FF的血液?
  17. Netgear路由被曝漏洞 几乎所有型号涉及
  18. C语言编程规范 — 宏
  19. 如何给Centos系统的虚拟机更改主机名和用户名
  20. 使用java代码获取yml及properties文件中的内容,获取值

热门文章

  1. mysql utf-8转utf8mb4_mysql中utf8 ,utf8mb4区别转化方法
  2. 平台活动免费送,免费领取1个月优酷/爱奇艺/腾讯视频会员
  3. iPhone降价,国产手机或受伤
  4. unity中使用c#钩子
  5. Linux扩大swap分区
  6. HRBUST 1161 树状数组区间更新求和
  7. 8.Android学习之消息、通知、广播与闹钟(二)
  8. java获取项目根路径通用方法
  9. Android编译脚本(.mk文件)解析
  10. 【表白单页模板】纯HTML表白+唯美3D动态相册表白网站制作(html+css+js)