操作系统 实验二 作业调度

时间:2022-07-15 21:54:36

实验二、作业调度实验

专业:商业软件工程   姓名:冯婉莹  学号:201406114112

一、        实验目的

 

(1)加深对作业调度算法的理解;

(2)进行程序设计的训练。

 

 

二、        实验内容和要求

 用高级语言编写一个或多个作业调度的模拟程序。

单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。

 

 

三、        实验方法、步骤及结果测试

 

  1. 1.      源程序名:压缩包文件(rarzip)中源程序名作业调度2.c

可执行程序名:作业调度2.exe

  1. 2.      原理分析及流程图

定义结构体存储数据

 

  1. 3.      主要程序段及其解释:

void caculate(int i,int y)

{

    printf("\n");

    printf("作业%s先开始运行\n\n",JCB[0].name);

    float AvgCycleTime,AvgValueCycleTime,k=0,m=0;//AvgCycleTime为平均周转时间,AvgValueCycleTime为平均带权周转时间

      for(i=1;i<=y;i++)

    {    

        JCB[0].startime=JCB[0].arrtime;

        JCB[i].finitime=JCB[i].startime+JCB[i].reqtime;//结束时间   

        JCB[i+1].startime=JCB[i].finitime;

        JCB[i].waitTime=JCB[i].startime-JCB[i].arrtime;//等待时间

        JCB[i].TAtime=JCB[i].finitime-JCB[i].arrtime;//周转时间

        JCB[i].TAWtime=JCB[i].TAtime/JCB[i].reqtime;//带权周转时间

        k+=JCB[i].TAtime;

        m+=JCB[i].TAWtime;

    }

       AvgCycleTime=k/y;//平均旋转时间

       AvgValueCycleTime=m/y;//平均带权旋转时间

    printf("作业名 提交时间 开始时间 运行时间 结束时间 等待时间 周转时间 带权周转时间\n");

    for(i=1;i<=y;i++)

        printf("%s\t%.2f\t%.2f\t%4.2f\t%6.2f\t%7.2f\t%7.2f\t%8.2f\n\n",JCB[i].name,JCB[i].arrtime,JCB[i].startime,JCB[i].reqtime,JCB[i].finitime,JCB[i].waitTime,JCB[i].TAtime,JCB[i].TAWtime);

       printf("平均周转时间为:");

    printf("%.2f\n\n",AvgCycleTime);

    printf("平均带权周转时间为:");

    printf("%.2f\n\n",AvgValueCycleTime);

}

void FCFS(int y)//先来先服务算法

{   

    float p;

    int i,j;

    char h[100];

    for(i=1;i<=y;i++)

    {

          for(j=i+1;j<=y;j++)

          {

             if(JCB[i].arrtime >JCB[j].arrtime)

             {

                 strcpy(h,JCB[i].name);

                             strcpy(JCB[i].name,JCB[j].name);

                             strcpy(JCB[j].name,h);

 

                             p=JCB[i].arrtime;

                             JCB[i].arrtime=JCB[j].arrtime;

                             JCB[j].arrtime=p;

 

                             p=JCB[i].reqtime;

                            JCB[i].reqtime=JCB[j].reqtime;

                            JCB[j].reqtime=p;

 

                            p=JCB[i].startime;

                            JCB[i].startime=JCB[j].startime;

                            JCB[j].startime=p;

 

                            p=JCB[i].finitime;

                            JCB[i].finitime=JCB[j].finitime;

                            JCB[j].finitime=p;

             }

          }

    }

       printf("排序后:\n");

    printf("  name\tarrtime\treqtime\n");

      

       for(i=1;i<=y;i++)

       {

              printf("   %s\t%.2f\t%.2f\n",JCB[i].name,JCB[i].arrtime,JCB[i].reqtime);

       }

    caculate(i,y);

}

 

void SJPF(int y)   //短作业优先

{

   float p;

       int i,j;

    char h[100];

    for(i=1;i<=y;i++)

       {

                for(j=i+1;j<=y;j++)

                {

             if(JCB[i].reqtime>JCB[j].reqtime)

                      {

                            strcpy(h,JCB[i].name);

                             strcpy(JCB[i].name,JCB[j].name);

                             strcpy(JCB[j].name,h);

 

                             p=JCB[i].arrtime;

                             JCB[i].arrtime=JCB[j].arrtime;

                             JCB[j].arrtime=p;

 

                             p=JCB[i].reqtime;

                            JCB[i].reqtime=JCB[j].reqtime;

                            JCB[j].reqtime=p;

 

                            p=JCB[i].startime;

                            JCB[i].startime=JCB[j].startime;

                            JCB[j].startime=p;

 

                            p=JCB[i].finitime;

                            JCB[i].finitime=JCB[j].finitime;

                            JCB[j].finitime=p;

                      }

                }

       }

       caculate(i,y);

}

 

  1. 4.      运行结果及分析

一般必须配运行结果截图,结果是否符合预期及其分析。

   (截图需根据实际,截取有代表性的测试例子)

 操作系统 实验二 作业调度

 

 操作系统 实验二 作业调度

 

 

 

 

 

 

四、        实验总结

 

从大体框架看觉得很简单,但做起来很多细节要注意。