一 定义

这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO 算法并不能保证这些页面不被淘汰。这里,我们只需要设置一个先进先出队列就可以。最先进入内存的页面最早被转换出去。


二 代码


进程类如下:

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;public class Process implements Comparable<Process>{                        private String ProcessName;             //进程名private int ReachTime;                  //到达时间private int ProcessTime;                //处理时间private int FinishTime;                 //完成时间private int PeriodTime;                 //周转时间private int StartTime;                  //开始时间private double WeightedPeriodTime;      //带权周转时间private int Priority;                   //优先级public Process(String processname,int reachTime, int processTime) {super();ProcessName = processname;ReachTime = reachTime;ProcessTime = processTime;}public Process(String processName, int reachTime, int processTime, int priority) {super();ProcessName = processName;ReachTime = reachTime;ProcessTime = processTime;Priority = priority;}public int getPriority() {return Priority;}public String getProcessName() {return ProcessName;}public int getReachTime() {return ReachTime;}public int getProcessTime() {return ProcessTime;}public int getFinishTime() {return FinishTime;}public int getPeriodTime() {return PeriodTime;}public void setProcessTime(int processTime) {ProcessTime = processTime;}public void setFinishTime(int finishTime) {FinishTime = finishTime;}public void setPeriodTime(int periodTime) {PeriodTime = periodTime;}public int getStartTime() {return StartTime;}public void setStartTime(int startTime) {StartTime = startTime;}public double getWeightedPeriodTime() {return WeightedPeriodTime;}public void setWeightedPeriodTime(double weightedPeriodTime) {WeightedPeriodTime = weightedPeriodTime;}@Overridepublic int compareTo(Process o) {// TODO Auto-generated method stubif ( this.ReachTime > o.ReachTime)return 1;else if ( this.ReachTime < o.ReachTime)return -1;return 0;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ReachTime;return result;}public void Print(){System.out.print(this.ProcessName+" "+this.ReachTime+"  "+this.ProcessTime+"    "+" "+this.StartTime+"  "+this.FinishTime+" "+this.PeriodTime+" ");System.out.printf("%.4f",this.WeightedPeriodTime);System.out.println();}
}

FIFO算法代码如下:

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;public class FIFO{private TreeSet<Process> process = new TreeSet<Process>() ;public FIFO() {                                     //添加进程Scanner in = new Scanner(System.in);System.out.println("请输入要添加的进程数:");int Num = in.nextInt();System.out.println("开始初始化进程信息(进程名 到达时间 耗时):");for ( int i = 0 ; i < Num ; i++){String processname = in.next();int reachtime = in.nextInt();int processtime = in.nextInt();Process p = new Process(processname,reachtime, processtime); process.add(p);}in.close();}void CarryOut_FIFO(){                               //执行先来先服务调度算法Iterator<Process> it = this.process.iterator();Process p0 = it.next();p0.setStartTime(p0.getReachTime());p0.setFinishTime(p0.getProcessTime()+p0.getStartTime());p0.setPeriodTime(p0.getFinishTime()-p0.getReachTime());p0.setWeightedPeriodTime(p0.getPeriodTime() *1.0 /p0.getProcessTime());int starttime = this.process.first().getFinishTime();while ( it.hasNext()){Process p = it.next();p.setStartTime(starttime);p.setFinishTime(p.getProcessTime()+p.getStartTime());p.setPeriodTime(p.getFinishTime()-p.getReachTime());p.setWeightedPeriodTime(p.getPeriodTime() * 1.0 / p.getProcessTime());starttime = p.getFinishTime();}}public double Avg_ProcessTime(){                        //平均周转时间double avg = 0;Iterator<Process> it = this.process.iterator();while( it.hasNext()){Process p = it.next();avg += p.getPeriodTime();}avg /= this.process.size();return avg;}public double Avg_WeightedProcessTime(){                        //平均带权周转时间double avg = 0;Iterator<Process> it = this.process.iterator();while( it.hasNext()){Process p = it.next();avg += p.getWeightedPeriodTime();}avg /= this.process.size();return avg;}public void Print(){                                    //打印System.out.println("            调度示意图");System.out.println("进程  到达时间    耗时  开始时间    完成时间    周转时间    带权周转时间");Iterator<Process> it = process.iterator();while( it.hasNext()){Process p = it.next();p.Print();}System.out.printf("平均周转时间:%.4f",this.Avg_ProcessTime());System.out.println();System.out.printf("平均带权周转时间:%.4f",this.Avg_WeightedProcessTime());}public static void main(String[] args) {// TODO Auto-generated method stubFIFO fifo = new FIFO();fifo.CarryOut_FIFO();fifo.Print();}}

进程调度(一)——FIFO算法相关推荐

  1. fifo算法模拟_[源码和文档分享]基于C++的请求分页虚拟页面替换算法

    一.需求分析 实现OPT.FIFO.LRU.Clock等页面替换算法.接收用户输入参数,包括程序长度(页面数).页框个数及页面大小,输出结果采用不同颜色区分命中.替换及直接加入空闲块. OPT(最佳置 ...

  2. fifo算法_缓存算法FIFO、LFU、LRU

    阅读文本大概需要3分钟. 0x01:FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了先进先出的思想,比如作业调度(先来先服务),为 ...

  3. linux进程调度之 FIFO 和 RR 调度策略

    转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html  linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18:1 ...

  4. FIFO算法与LRU算法

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

  5. C#之FIFO算法实现页面置换算法

    实现原理:淘汰最先进入内存的ye页面,即选择页面在内存中停留时间最长的页面调出内存! 本程序使用到了两个数组:一个数组用于初始化存放内存外页面的序号,存放的页面序号是和网上大多数例子序号是一样的其实也 ...

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

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

  7. Java:实现先进先出缓存FIFO算法(附完整源码)

    Java:实现先进先出缓存FIFO算法 import java.util.HashMap; import java.util.Map.Entry; public class FIFOCache {pu ...

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

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

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

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

最新文章

  1. java程序无法启动_由于Java程序,Tomcat无法启动
  2. ARKit应用超300万次安装,排第一的是一款养成游戏
  3. c语言温度查表程序,温度计C语言程序.doc
  4. C# 检测文件是否被其他进程占用
  5. CVE-2010-2883 从漏洞分析到样本分析
  6. linux 查看进程id对应的路径,Linux中怎么通过PID号找到对应的进程名及所在目录方法...
  7. AIRec个性化推荐召回模型调参实战
  8. ubuntu16.04+anaconda3+python3.6安装OpenCV3.1.0
  9. JAVA实现N皇后问题(回溯法)
  10. 会议交流 | CAAI BDSC2021大会专题七:社会计算与开放知识图谱
  11. 如何理解面向对象建模语言UML?
  12. C#.NET编程----Spring.NET NHibernate整合(一)
  13. winform 等待窗口
  14. 关于“缓存着色(cache coloring, page coloring)”技术的相关资料介绍
  15. Activity设置透明主题
  16. 致远oa系统报价_致远oa价格(致远oa系统登录)
  17. 论文解读:Missing data imputation with adversarially-trained graph convolutional network
  18. android webview使用html5input id=input type=file/ 上传相册、拍照照片
  19. yum下载速度慢解决,提速飞起来
  20. 求解斐波那契数列(Fibonacci Numbers)算法居然有9种,你知道哪几种吗?

热门文章

  1. JSP字符转数字方法
  2. 龙珠超·布罗利【MGRT幻之】【720P】剧场版
  3. 操作数据库时报“无效的列索引”错误
  4. 关于领导力,人人都可成为领导者
  5. 王者荣耀AI论文首次曝光:AI王者 VS 真人王者,谁更胜一筹?
  6. 游戏蓝牙耳机哪个牌子好?2022游戏蓝牙耳机推荐
  7. UE4 射击游戏(游戏机制完善中)
  8. 块级元素和行内元素区别 以及行内块元素
  9. GSMA-eSIM-官网规范说明
  10. iOS _Xcode中模拟器页面切换慢动作