一 定义

这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,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. python getattr_python __getattr__ 巧妙应用
  2. 数据结构和算法一定要背算法的代码嘛_我们为什么要学习数据结构和算法?
  3. mysql启动错误1.69,MySQL无法启动例一
  4. c语言递归求塔移动次数,c语言递归调用汉诺塔
  5. vsphere6.0实验拓扑-虚拟机版
  6. 创建dqn的深度神经网络_深度Q网络(DQN)-III
  7. 慕课版软件质量保证与测试(第四章.课后作业)
  8. dell 电脑关闭触摸板的。
  9. Leetcode每日一题 面试题56 - I.数组中数字出现的次数
  10. 算法策略 | MACD跨周期短线交易策略开发(股指+商品双版)
  11. 02 凸优化理论-凸集
  12. linux c 获取文件大小
  13. 提取 Office 2016 工具栏图标
  14. 自定义Unity在iOS平台上的虚拟键盘
  15. 狗是好狗,正不正经就不知道了
  16. windows设置使mysql可以远程连接
  17. 相关系数与协方差间的转换
  18. 使用TreeMap实现ASCII排序
  19. C++各种经典小游戏
  20. 路由器基本配置、静态路由

热门文章

  1. linux 幽灵漏洞,CVE-2015-0235:Linux Glibc幽灵漏洞分析 V1.0
  2. python pymysql模块下载_Python Pymysql模块
  3. 最初的计算机主要用于科学计算判断对错,第一代电子计算机主要用于科学计算。...
  4. [原]数据科学教程:R语言与NoSQL
  5. JAVA毕业设计红色主题旅游网站计算机源码+lw文档+系统+调试部署+数据库
  6. 【基础知识】IIC(I2C)协议
  7. Elasticsearch - HTTP操作索引,文档,映射;高级搜索(五)
  8. 新房着急入住用什么除甲醛 新房除甲醛最有效方法排行榜
  9. matlab数字图像处理编码实现直方图均衡化
  10. 使用 canvas 居中裁剪图片