当前位置:   article > 正文

进程调度----------->先来先服务调度算法_先来先服务基本思想

先来先服务基本思想

进程调度----------->先来先服务调度算法

算法思想:先来先服务调度算法是一种最简单的调度算法,字面意思就是第一先进到内存的进程就优先处理,其他进程则需要等待第一个进程处理完后在按先后顺序进行排序。

注意事项:
(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;
                }
            }
        }
    }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91

这个是第一个进程到达时间是0的测试结果
在这里插入图片描述

这个是第一个进程到达时间不是0的测试结果
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/582389
推荐阅读
相关标签
  

闽ICP备14008679号