zoukankan      html  css  js  c++  java
  • 操作系统 实验二 作业调度

    实验二、作业调度实验

    专业:商业软件工程   姓名:冯婉莹  学号: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.      运行结果及分析

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

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

     

     

     

     

     

     

    四、        实验总结

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

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    BFC是什么?如何形成BFC,有什么作用?
    z-index 有什么作用? 如何使用?
    有几种定位方式?分别是如何实现定位的?参考点是什么?使用场景是什么?
    Promise
    token
    文档碎片
    ECharts常用配置项
    for each()和map()的区别
    window.onload和$(docunment).ready的区别
    密码的两种常用加密方式
  • 原文地址:https://www.cnblogs.com/xiaoyy/p/5412529.html
Copyright © 2011-2022 走看看