操作系统FIFO算法C语言实现

前言
本机为微软Surface pro4,为64位,所用操作系统为Windos 10。本机虚拟机版本为Oracle VM VirtualBox 6.1.8,所用操作系统是使用Ubuntu18.04,。Ubuntu的虚拟硬盘设置为200G,显存为128MB,内存为4GCPU2个,所用镜像源为清华大学软件镜像源。所使用linux内核为linux-5.11.8

注意事项
(1)本FIFO算法的实现思路是借鉴网上的相关资源,并非原创。
(2)本篇博客代码实现FIFO算法的命中率和置换显示。

FIFO算法介绍
FIFO算法:它的思想是先进先出(FIFO,队列),这是最简单、最公平的一种思想,即 如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小。.空间满的时候,最先进入的数据会被最早置换(淘汰)掉 。

Linux下C语言实现FIFO算法的代码
1、使用文件编辑器在主目录下创建一个名为OS2的文件夹。

2、打开Geany程序,然后点击新建按钮,创建一个新文件。
(注:创建完成界面如下)

3、在新建的文件中书写程序。(注:程序如下)

#include<stdio.h>
#include<stdlib.h>
#define N 320
int num[N];  //存放随机数
int page[N]; //存放页地址流
int mc[33]; //memory capacity内存容量 ,并初始化为0 void randomnumber()//random number随机数 程序第一步,产生320个指令序列
{   int pc;int flag=0;     scanf("%d",&pc);     printf("\n在0-319之间产生的320个随机数如下:\n");     for(int i=0;i<320;i++)  {        num[i]=pc;   if(flag%2==0) pc=++pc%320;  //flag=0||2 50%的指令是顺序执行的       if(flag==1) pc=rand()% (pc-1);   //flag=1 25%的指令是均匀分布在前地址部分   if(flag==3) pc=pc+1+(rand()%(320-(pc+1)));  //flag=3 25%的指令是均匀分布在后地址部分       flag=++flag%4;   printf("%3d   ",num[i]);         if((i+1)%10==0) printf("\n");  //每行输出10个数 }
} void pageaddress()    //pageaddress页地址 程序第二步,将指令序列变换为页地址流,产生了32个指令页
{     for(int i=0;i<320;i++)  {     printf("%3d   ",page[i]=num[i]/10);        if((i+1)%10==0) printf("\n");  //每行输出10个数 }
}//FIFO算法实现
int FIFO(int capacity)
{int j,x,y,m;int sum=0; //mc中分配的个数 int exist=0; //命中次数 int flag; //标志是否命中 flag=0没命中 flag=1命中 int ep=1; //elimination position淘汰位置  mc[1]=page[0];printf(" %2d加入  \t",page[0]);for(m=1;m<=capacity;m++)   //输出当前内存块的存储情况 printf("%2d  ",mc[m]);printf("\n");sum+=1; for(j=1;j<320;j++){ flag=0; for(y=1;y<=sum;y++)   //判断这个页地址流是否命中 if(mc[y]==page[j]) {exist++;flag=1;printf(" %2d命中  \t",page[j]);for(m=1;m<=capacity;m++)   //输出当前内存块的存储情况 printf("%2d  ",mc[m]);printf("\n");break;} //没命中 if(flag==0)    {if(sum<capacity)  //还有空块 {for(x=1;x<=capacity;x++) //查找内存块中第一个空块 if(mc[x]==-1) {mc[x]=page[j];sum++;printf(" %2d加入  \t",page[j]);for(m=1;m<=capacity;m++)    //输出当前内存块的存储情况 printf("%2d  ",mc[m]);printf("\n");break;}}else if(sum>=capacity){int t=mc[ep];mc[ep]=page[j];printf(" %2d置换%2d\t",page[j],t);for(m=1;m<=capacity;m++)   //输出当前内存块的存储情况 printf("%2d  ",mc[m]);printf("\n");ep+=1;if(ep==capacity+1) ep=1; } }} printf("\nexist=%d\n命中率=%lf",exist,exist/320.0);
}
int main()
{int capacity; //内存块数 printf("请输入第一条指令号(0~319):");randomnumber();printf("\n指令序列对应的页地址流:\n");   pageaddress();     printf("\n\n\n\t\t先进先出算法(FIFO):\n\n");printf("请输入内存块数(4-32):");scanf("%d",&capacity);for(int i=1;i<=32;i++)  //给数组赋初值 mc[i]=-1;FIFO(capacity);   return 0;
}

4、将程序文件命名fifo.c为保存到OS2文件下。(注:如图所示)

FIFO算法实现效果如下
1、按如下图示中标明顺序点击按钮执行即可(注:效果图如下)

2021-06-04 操作系统FIFO算法C语言实现相关推荐

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

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

  2. fifo算法c语言程序代码,c语言实现fifo算法及代码

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  3. 操作系统——FIFO算法解析与代码实现

    FIFO算法 文章目录 FIFO算法 概念 一.解析 二.代码实现 概念 FIFO(First Input First Output),即先进先出队列.可以类比 我们在饭堂排队打饭,先排到队伍的最后, ...

  4. 操作系统学习之用C语言模拟FIFO算法

    前言 FIFO算法比较简单,没什么好说的,就是先进先出.不过我添加了3状态,不过也只有堵塞,没有将阻塞进程唤醒的过程. Buddy算法:操作系统学习之用C语言模拟伙伴(Buddy)算法 FIFO算法: ...

  5. 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告

    操作系统实验报告 一.实验名称 :页面置换算法 二.实验目的: 在实验过程中应用操作系统的理论知识. 三.实验内容: 采用C/C++编程模拟实现:FIFO算法.LRU算法.LFU算法.NRU算法四个页 ...

  6. 古典密码算法实验c语言,2021信息安全 实验一 古典密码算法C语言.docx

    2021信息安全 实验一 古典密码算法C语言.docx 信息安全信息安全 实验一实验一 古典密码算法古典密码算法 C C 语言语言 信息安全实验报告 课程名称 _ 专业计算机科学与技术 _2010_级 ...

  7. 【操作系统】关于LRU算法,FIFO算法,OPT算法页面调度算法及例子

    题目:一进程刚获得三个主存块的使用权,若该进程访问页面的次序是{1,3,2,1,2,1,5,1,2,3},采用LRU算法时,缺页数是______次. LRU算法 简介:算法根据数据的历史访问记录来进行 ...

  8. 计算机操作系统——页面置换FIFO算法(C#)

    页面置换FIFO算法(C#) 页面置换FIFO算法 什么是FIFO算法 什么是缺页率 FIFO流程图 代码部分 所属类 Program.cs setting.cs Way.cs 算法结果截图 页面置换 ...

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

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

最新文章

  1. sar sensor传感器的作用_传感器攻防战-惯导IMU
  2. NTU课程笔记 mas714复习:例题
  3. HDU 5676 ztr loves lucky numbers
  4. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  5. VueJS定义组件规则
  6. 苹果第二代自研M系列芯片MacBook Pro有望在未来几周上市
  7. 二进制中 1 的个数
  8. 【Hibernate框架开发之七】Annotation各种关系CRUD增删改查集合映射继承映射
  9. Cp与Cpk了解与计算
  10. 如何使用Excel表格精准分析PT100温度阻值关系?
  11. Multigen VEGA簡介
  12. linux 6 dns,RHEL6下搭建DNS服务器
  13. 6-1 判断顺序表是否有序(Java语言描述 ) (15 分)
  14. Jenkins服务器迁移
  15. 防火墙阻止tftp_Juniper netscreen防火墙TFTP升级过程
  16. PMP每日一练 | 考试不迷路-10.25(包含敏捷+多选)
  17. Lenovo笔记本电脑触摸板无反应-解决方法
  18. 马未都:人的一生,都是有命数的
  19. 阿里云视频点播-->>>阿里云媒资上传工具类及配置
  20. Arduino开发实践蜂鸣器(附源码+效果图)

热门文章

  1. hive 日期转时间戳函数之unix_timestamp,时间戳转日期函数之from_unixtime
  2. Win11系统自带的卸载功能怎么使用?
  3. linux需要关注的日志文件,如何更好地使用Linux日志
  4. 终于解决了fedora 16下chromium浏览器Shockwave Flash崩溃的问题
  5. 提升App用户活跃度的5个小技巧
  6. 移动端echarts点击全屏按钮横屏全屏展示
  7. java获取项目绝对路径_如何获取项目绝对路径?
  8. MAMP 更改MySQL数据库密码
  9. 基于Qt的三分屏播放客户端实现
  10. 操作系统: 经典例题——和尚打水