FIFO算法

文章目录

  • FIFO算法
  • 概念
  • 一、解析
  • 二、代码实现

概念

FIFO(First Input First Output),即先进先出队列。可以类比 我们在饭堂排队打饭,先排到队伍的最后,等待前面的人一个个打完饭再轮到下一个。这就是一种先进先出机制,先排队的人先行打饭离开。


一、解析

先进先出(FIFO)页面置换算法
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程调入内存,按先后顺序排成一个队列,并设置一个指针,称为替换指针,使他总能指向最老的页面。但该算法与进程与实际运行的规律不相适应,效率最差。

二、代码实现

用一个结构体pb去存储引用的页面,m是代表物理模块的大小
然后在while循环里根据总的页面需求数,通过累加索性index进行逐一检查并替换
利用p进行取余来替换去对应的先进先出的原则。

#include <stdio.h>
#define PAGES 12  /*页面引用页数*/
#define M 3      /*当前分配给改作业的物理块数*/
//#define M 4
/*页面引用串*/
int  page[PAGES] =  {4,3,2,1,4,3,5,4,3,2,1,5};
int  rel[M][PAGES];    /*存储结果数组*/
/*内存物理块结构体*/
typedef  struct {int  pnum;      /*该块中所存的页面号*/int  tm ;        /*从最近一次调入所经历的时间*/
}PBlock;
/*初始化物理块数组*/
void  init(PBlock *pb)
{int  i,j;//pb = (PBlock*)malloc(sizeof(PBlock)*M);for (i=0;i<M;i++){pb[i].pnum = -1;pb[i]. tm  = -1;for (j=0;j<PAGES;j++){rel[i][j] = -1;}}
}
/*打印结果数组*/
void  printRelArr( int  rel[M][PAGES])
{int  i,j;for (i=0;i<M;i++){for (j=0;j<PAGES;j++){if (rel[i][j]==-1)printf ( "_ " );elseprintf ( "%d " ,rel[i][j]);}printf ( "\n" );}
}
/*打印一维数组*/
void  printArr1( int  *arr, int  n)
{int  i;for (i=0;i<n;i++){printf ( "%d " ,arr[i]);}printf ( "\n" );
}
/*查看页面号为num的页面是否在内存块中,存在返回1*/
int  in_mem( int  num,PBlock *pb, int  m)
{int  i;int  b = 0;for (i=0;i<m;i++){if (pb[i].pnum == num){b = 1;break ;}}return  b;
}
int fifo(PBlock* pb, int m)
{int lps = 0;   /*缺页次数*/double lpp;   /*缺页率*/int p = 0;    /*替换指针*/int index = 0;  /*页面号索引*/while (index < PAGES) {if (!in_mem(page[index], pb, M)) {    //如果该页面不在物理块中pb[p].pnum = page[index];        /*将该页面放入物理块中*/p = (p + 1) % M;                     /*替换指针移动*/lps++;                           /*却也次数加 1*/for (int i = 0; i < M; i++) {rel[i][index] = pb[i].pnum;}}index++;}printf("FIFO算法所得缺页次数为 %d\n", lps);lpp = (double)lps / PAGES;printf("FIFO算法缺页率为 %0.4lf \n", lpp);printf("页面号序列为:\n");printArr1(page, PAGES);printf("结果数列为:\n");printRelArr(rel);return 0;
}
int  main()
{//printArr(rel);PBlock pb[M];init(pb);fifo(pb,M);init(pb);return  0;
}

操作系统——FIFO算法解析与代码实现相关推荐

  1. 2021-06-04 操作系统FIFO算法C语言实现

    操作系统FIFO算法C语言实现 前言 本机为微软Surface pro4,为64位,所用操作系统为Windos 10.本机虚拟机版本为Oracle VM VirtualBox 6.1.8,所用操作系统 ...

  2. 霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb

    霍尔Foc算法解析,代码 中颖单片机,3213 提供代码.电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考

  3. 操作系统FIFO算法(先进先出算法)

    操作系统FIFO算法(先进先出算法) 简介:本文章是作者学习操作系统期间所创作的FIFO算法. import java.util.*; /** 这是一个分页算法FIFO* */public class ...

  4. 霍尔Foc算法解析,代码 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考

    霍尔Foc算法解析,代码 中颖单片机,3213 提供代码.电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考- 工程中坐标变换是库,算法是开源的,请知悉 ID:611006 ...

  5. 霍尔Foc算法解析,代码 中颖单片机,3213 提供代码、电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考

    霍尔Foc算法解析,代码 中颖单片机,3213 提供代码.电路图和pcb 算法对开关霍尔的处理颇有独到之处,是做hallfoc的良好参考-- 工程中坐标变换是库,算法是开源的,请知悉 :2910063 ...

  6. 八种常见回归算法解析及代码

    目录 一.线性回归 1.最小二乘法 -导数/偏导为0求参数 最小二乘法求解参数​优缺点 2.迭代求解参数​-梯度下降.坐标轴下降.最小角回归 2.1使用梯度下降-对回归系数中w的每个元素分别求偏导并乘 ...

  7. PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)

    PLC如何采集测量编码器的位置数据,不清楚的可以参看我写的另一篇博文: 三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速计数为例来讲解 ...

  8. FIFO算法与LRU算法

    #include<iostream.h> #include<stdio.h> #include<iomanip.h> const int Max = 10;     ...

  9. 操作系统:FIFO算法详解及代码演示

    FIFO算法 FIFO算法是最简单的页面置换算法.FIFO算法为每个页面记录了调到内存的时间.当必须置换页面的时候,选择最旧的页面. 通俗来说,每次进入主存的时候 如果主存中不存在这个页面,那么最先进 ...

最新文章

  1. OC底层原理之Runtime
  2. OpenGL中的颜色再次讨论
  3. MySQL性能优化笔记整理
  4. Winsock开发网络通信程序的经典入门
  5. Windows CE File System [2/2]
  6. iOS 配置pch文件
  7. C/C++ 读取16进制文件
  8. 贝壳金控赵文乐:基于 Spring Cloud 的服务治理实践
  9. 核函数与径向基函数 (Radial Basis Function 简称 RBF)详解
  10. Spring MVC学习总结(4)——SpringMVC权限管理
  11. numpy与matplotlib的学习报告
  12. 路透:在美投资遇阻 中国科技资金转向以色列
  13. C语言——素数的详解
  14. C语言正交表测试用例,测试用例设计之正交表法和配对测试法
  15. FFmpeg 2 - ffplay、ffprobe、ffmpeg 命令使用
  16. 分享: Vue微信浏览器ios音乐自动播放
  17. 为师弟师妹们连载(二)
  18. android 后台自动拍照,Android实现后台服务拍照功能
  19. 根据性别自动切换用户图标——DAY4
  20. EventLoopGroupEventLoop

热门文章

  1. 如何用ADMINISTRATOR登陆
  2. 视频教程-最新完整VUE前端教程从入门到精通,纯干货企业级项目实战-Vue
  3. Python基础语法、python基础数据类型、python解释器、python注释符、python-range()和sum()
  4. Typorn退出全屏
  5. 形态学特征提取matlab,一种基于形态学的目标特征提取方法与流程
  6. win7计算机无法识别分辨率,win7系统的分辨率不能调整的三大原因及解决方法
  7. MQTT服务器搭建与试用,桌面工具连接MQTT服务器
  8. VScode配置PHP环境
  9. 【第66期】游戏开发:垃圾策划的江湖恩仇录
  10. 蓝海项目全民探店,小魔推现面向全国招募城市合伙人