zoukankan      html  css  js  c++  java
  • 先来先服务(FCFS)调度算法

    #include <stdio.h>
    #define n 5
    struct JCB
    {
        int name;          //进程名
        int atime;         //进程到达时间
        int runtime;       //进程运行时间
        int ftime;         //进程完成时间
        int total;           //周转时间
        float welght;        //带权周转时间(周转系数)
        int arun;          //进程到达运行
     
    }f[n];
    
    
    //开始执行时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。
    void main()
    {
        int amount;
        int i,j,l,k,h;
    
        struct  JCB f[n];
    
        printf("请输入进程个数(2-24):\n");
        scanf("%d",&amount);
        for(i=0;i<amount;i++)
        {
            printf("请输入进程名,进程到达时间(0-30),进程运行时间(1-8):\n");
            scanf("%d",&f[i].name);
            scanf("%d",&f[i].atime);
            scanf("%d",&f[i].runtime);
    
        }
        printf("进程名\t进程到达时间\t进程运行时间\n");
        for(i=0;i<amount;i++)
        {
            printf("%d\t%d\t\t%d\t\n",f[i].name,f[i].atime,f[i].runtime);
        }
        printf("------先来先服务(FCFS)调度算法------\n");
    
    
        for(i=0;i<amount-1;i++) //按进程到达时间的先后排序
        {                               //如果两个进程同时到达,按在屏幕先输入的先运行
            for(j=i+1;j<amount;j++)
            { 
                if(f[j].atime < f[i].atime)
                {
                    l  =f[j].atime;            
                    h  =f[j].runtime;
                    k  =f[j].name;
    
                    f[j].atime      =f[i].atime;        
                    f[j].runtime    =f[i].runtime;
                    f[j].name       =f[i].name;
    
                    f[i].atime   =l;
                    f[i].runtime =h;
                    f[i].name    =k;
                }
            }
        }
        printf("按进程到达时间的先后排序\n\n");
    
        printf("进程名\t进程到达时间\t进程运行时间\n");
        for(i=0;i<amount;i++)
        {
            printf("%d\t%d\t\t%d\t\n",f[i].name,f[i].atime,f[i].runtime);
        }
    
        printf("进程名 进程到达 开始运行 进程运行 进程结束 周转时间 周转系数\n");
        f[0].arun=0;
        for(i=0;i<amount;i++)
        {
            if(f[i].arun<f[i].atime)
            {
                f[i].arun =f[i].atime;
            }
    
            f[i].ftime=f[i].arun+f[i].runtime;
            f[i].total=f[i].ftime-f[i].atime;
            f[i].welght=(float)f[i].total/(float)f[i].runtime;
            printf("%d\t%d\t  %d\t  %d\t   %d\t\t%d\t%f\n",f[i].name,f[i].atime,f[i].arun,f[i].runtime,f[i].ftime,f[i].total,f[i].welght);
            f[i+1].arun=f[i].arun+f[i].ftime;
        }

      printf("------短作业优先 (SJF) 调度算法------\n");

    
    

      for(i=1;i<amount;i++)
      {
        for(j=0;j<amount-i;j++)
        {
          if(f[j].runtime>f[j+1].runtime)
          {
            f[j].runtime+=f[j+1].runtime;
            f[j+1].runtime=f[j].runtime-f[j+1].runtime;
            f[j].runtime-=f[j+1].runtime;

    
    

            k =f[i].name;
            f[j].name =f[i+1].name;
            f[i+1].name =k;

    
    

          }
        }
      }

    
    

      for(i=0;i<amount;i++)
      {
        if(i==0)
          f[i].total=f[i].total;
        else
          f[i].total=f[i].runtime+f[i-1].ftime;
        f[i].ftime=f[i].atime+f[i].runtime;
        f[i].welght=(float)f[i].atime/(float)f[i].runtime;

    
    

        if(i==0)
          prinf("%d",f[i].name);
        else
        {
          prinf("%d",f[i].name);
          for(j=0;j<i;j++)
          {
            prinf("%d",f[j].name);
          }
          prinf("*******");
        }
      }
      printf("进程名 进程到达 开始运行 进程运行 进程结束 周转时间 周转系数\n");
      for(i=0;i<amount;i++)
      {
        printf("%d\t%d\t %d\t %d\t %d\t\t%d\t%f\n",f[i].name,f[i].atime,f[i].arun,f[i].runtime,f[i].ftime,f[i].total,f[i].welght);
      }

    }

     

  • 相关阅读:
    博客索引
    【转载】学习顺序:顶级会议 ----> 顶级期刊 ------> 基础教材(博客) / 论文复现
    【神游篇00】关于自己的日常学习记录
    【1】ML简介
    【2】Neural Network学习
    【1】NNDL简介
    【1】Deep Learning简介
    【1】PRML简介
    【1】BRML简介
    图集压缩,,命令行工具
  • 原文地址:https://www.cnblogs.com/yewenzhao/p/4462754.html
Copyright © 2011-2022 走看看