赞
踩
算法思想:先来先服务调度算法是一种最简单的调度算法,字面意思就是第一先进到内存的进程就优先处理,其他进程则需要等待第一个进程处理完后在按先后顺序进行排序。
注意事项:
(1)第一个进程到达的时间,是否是立刻到达的,如果是的话可以看成在0这时刻到达。所以处理机可以直接处理,第一个进程的开始时间就是0;否则的话,第一个进行不是立刻到达,那么它的开始处理时间就是它的抵达时间。
(2)其他进程是否在第一个进程处理结束之前抵达,如果是的话其他进程的开始处理时间就是第一个线程的结束时间
(3)上述都会在代码中体现出来,因为老师要求注释要多一点所以我就写的挺多注释的,方便下次阅读。
(4)还在读书,所以有不对的地方希望能指正一下。
(5)如果对你有帮助可以点个赞收藏一下。
下面的话直接贴代码和运行结果出来,建议不要直接复制粘贴,最好的话还是自己动手敲这样方便理解。
package OSystem.ProcessManagement.FCFS; import OSystem.StorageManagement.Entity.job; public class FCFSAlgorithm { // 平均周转时间 public static double avgTotalTime; // 平均带权周转时间 public static double avgPowerTime; public static void main(String[] args) { job[] jobData = new job[5]; //定义5个作业 jobData[0] = new job(0,3,"A"); jobData[1] = new job(2,6,"B"); jobData[2] = new job(4,4,"C"); jobData[3] = new job(6,5,"D"); jobData[4] = new job(8,2,"E"); System.out.println("\t\t\t****************先来先服务优先算法*****************"); //排序 sort(jobData); // 调用先来先服务算法 FCFS(jobData); //打印信息 print(jobData); } public static void FCFS(job...jobData){ int sort = 1; for (int i = 0;i<jobData.length;i++){ /** * 如果作业的到达时间 大于上一个作业的完成时间,即上一个作业服务完成后 下一个作业还没有进入内存,处理机进入空闲状态, * 当下一个作业进入内存后,因为处理机空闲,作业可以马上执行,所有下一个作业的开始服务时间 = 作业到达时间 * if (i != 0) ; 第一个作业不需要进行判断 * jobData[i].arriveTime > jobData[i-1].finishTime); 判断下一个作业的到达时间 是否在 上一个作业的服务时间内 **/ if (jobData[0].arriveTime !=0){ //如果第一个到达时间 不等于0 则第一个作业的开始时间等于到达时间 jobData[i].startTime = jobData[0].arriveTime; } if (i != 0) { if (jobData[i].arriveTime > jobData[i - 1].finishTime) { //如果下一个作业的到达时间 大于 上一个作业的完成时间 则 该作业的开始时间等于 它的到达时间 jobData[i].startTime = jobData[i].arriveTime; }else { jobData[i].startTime = jobData[i - 1].finishTime; } } //作业的完成时间 = 等于作业开始时间 + 当前作业服务时间 jobData[i].finishTime = jobData[i].startTime + jobData[i].serviceTime; // // 下一个作业开始时间 = 上一个作业的完成时间 // startTime = jobData[i].finishTime; //周转时间 = 完成时间 - 到达时间 jobData[i].turnTime = jobData[i].finishTime - jobData[i].arriveTime; //带权周转时间 = 作业周转时间 / 服务时间 jobData[i].powerTime = (double)jobData[i].turnTime / (double)jobData[i].serviceTime; jobData[i].sort = sort++; } } //打印信息方法 public static void print(job...jobData) { for (int i = 0; i < jobData.length; i++) { System.out.println(jobData[i].jobName+"\t到达时间:" + jobData[i].arriveTime + "\t开始时间:" + jobData[i].startTime+"\t服务时间:" + jobData[i].serviceTime +"\t完成时间:" + jobData[i].finishTime+"\t周转时间:" +jobData[i].turnTime+ "\t带权周转时间:"+String.format("%.2f",jobData[i].powerTime)); avgTotalTime += jobData[i].turnTime; // 求总周转时间,此时avgTotalTime中存储的值为总周转时间 avgPowerTime += jobData[i].powerTime; // 求总带权周转时间,此时avgPowerTime中存储的值为总带权周转时间 } avgTotalTime /= jobData.length; // 平均周转时间 avgPowerTime /= jobData.length; // 平均带权周转时间 System.out.println("平均周转时间:" +String.format("%.2f",avgTotalTime)); System.out.println("平均带权周转时间:" +String.format("%.2f",avgPowerTime) ); } //从后备作业选出若干作业,然后进行排序 public static void sort(job...jobData){ job item; for (int i = 0;i<jobData.length;i++){ for (int j = i+1;j<jobData.length;j++){ if (jobData[j].arriveTime<jobData[i].arriveTime){ item = jobData[j]; jobData[j] = jobData[i]; jobData[i] = item; } } } } }
这个是第一个进程到达时间是0的测试结果
这个是第一个进程到达时间不是0的测试结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。