• 操作系统 实验二 作业调度


    实验二、作业调度实验

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

    一、        实验目的

     

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

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

    二、        实验内容和要求

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

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

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

     

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

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

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

    定义结构体存储数据

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

    void caculate(int i,int y)

    {

        printf(" ");

        printf("作业%s先开始运行 ",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("作业名 提交时间 开始时间 运行时间 结束时间 等待时间 周转时间 带权周转时间 ");

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

            printf("%s %.2f %.2f %4.2f %6.2f %7.2f %7.2f %8.2f ",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 ",AvgCycleTime);

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

        printf("%.2f ",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("排序后: ");

        printf("  name arrtime reqtime ");

          

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

           {

                  printf("   %s %.2f %.2f ",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.      运行结果及分析

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

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

     

     

     

     

     

     

    四、        实验总结

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

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    中国科学院2021年硕转博考试分析试题参考解答
    蒲和平大学生数学竞赛教程答案5.1.3
    清华大学2021年数学推荐免试试题参考解答
    蒲和平大学生数学竞赛教程答案4.1.1
    兰州大学历年数学分析高等代数考研试题答案
    复旦大学2021年数学英才实验班选拔考试试题参考解答pdf
    北京大学2021年基础学科招生考试数学试题
    南开大学2021年数学伯苓班/复旦大学2021年数学英才实验班选拔考试试题
    实变函数与泛函分析第05次课:至1.5.2(请点阅读全文进课堂)
    中国科学技术大学2021年新生入学考试试题
  • 原文地址:https://www.cnblogs.com/xiaoyy/p/5412529.html
Copyright © 2020-2023  润新知