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

    实验二、作业调度实验

    专业:商业软件1班   姓名:周诗琦  学号:201406114108

    一、实验目的

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

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

    二、实验内容和要求

         

    (1)      对初始化的作业序列按照“到达时间”排序;

    (2)      遍历作业系列,计算每个作业的结束时间;

    分两种情况:

    一、第一个作业的结束时间=到达时间+所需运行时间;

    二、剩余作业的结束时间=上一个作业的结束时间+所需运行时间。

    (1)计算每个作业的周转时间、带权周转时间;

    (2)计算作业序列的平均周转时间、平均带权周转时间;

    (3)将调度结果显示。

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

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

    实现主要功能的程序段,重要的是程序的注释解释。

      1 #include<stdio.h>
      2 struct jcb
      3 { 
      4     char name[10];           /* 作业名 */  
      5     char status;              /* 作业状态 */  
      6     
      7     int arrtime;                  /* 到达时间 */  
      8     int startime;                 /* 开始运行时间 */  
      9     int reqtime;                  /* 要求服务时间 */ 
     10     int finitime;                 /* 完成时间 */ 
     11     
     12     float TAtime;                 /* 周转时间 */  
     13     float TAWtime;               /* 带权周转时间 */  
     14     
     15     float prio;               //优先权
     16 } jobarr[24],jobfin[24],job[24];    
     17 
     18 void Finishtime(int n,jcb job[]);//计算结束时间
     19 TAtime(int n,jcb job[],float averageTAtime);//计算周转时间、平均周转时间
     20 TAWtime(int n,jcb job[],float averageTAWtime);//计算带权周转时间、平均带权周转时间
     21 void OrderByarrtime(int n,jcb job[]);//先到先服务,按到达时间排序
     22 void putOutjob(jcb job[],int n);//打印内容
     23 
     24 void main()
     25 {
     26     
     27     //    int intarr,intfin,intjob;  /* 到达作业个数,完成作业个数,未到达作业个数 */
     28     float averageTAtime=0;
     29     float averageTAWtime=0;
     30     int n;
     31     int systime=0;  
     32     printf("作业个数:");
     33     scanf("%d",&n);
     34     printf("
    ");
     35     for(int i=0;i<n;i++)
     36     {
     37         printf("第%d个作业:
    ",i+1);
     38         printf("输入作业名称:");
     39         scanf("%s",job[i].name);
     40         printf("到达时间:");
     41         scanf("%d",&job[i].arrtime);
     42         printf("要求服务时间:");
     43         scanf("%d",&job[i].reqtime);
     44         printf("
    ");
     45     }
     46     OrderByarrtime(n,job);
     47     Finishtime(n,job);
     48     averageTAtime=TAtime(n,job,averageTAtime);
     49     averageTAWtime=TAWtime(n,job,averageTAWtime);
     50     putOutjob(job,n);
     51     printf("现在系统时间:%d
    ",systime);
     52     printf("平均周转时间=%f
    ",averageTAtime);
     53     printf("平均带权周转时间=%f
    ",averageTAWtime);
     54 
     55 }
     56 
     57 
     58 void putOutjob(jcb job[],int n)//打印内容
     59 {
     60     int i;
     61     printf("
    
    作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间
    ");
     62     for(i=0;i<n;i++)
     63     {
     64         printf("%s	%d	%d	%d	%d	%f	%f
    ",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
     65         printf("
    ");
     66 
     67     }
     68     printf("
    
    ");
     69 }
     70 
     71 void OrderByarrtime(int n,jcb job[])//先到先服务,按到达时间排序
     72 {
     73     int i,j;
     74     jcb tmp;
     75     for(i=0;i<n-1;i++)
     76         for(j=i+1;j<n;j++)
     77         {
     78             if(job[i].arrtime>job[j].arrtime)
     79             {
     80                 tmp=job[i];
     81                 job[i]=job[j];
     82                 job[j]=tmp;
     83             }
     84         }
     85 }
     86 
     87 
     88 void Finishtime(int n,jcb job[])//计算结束时间
     89 {
     90     int i;
     91     for(i=0;i<n;i++)
     92     {
     93         if(i==0)
     94         {
     95             //job[i].startime=job[i].arrtime;
     96             job[i].finitime=job[i].arrtime+job[i].reqtime;
     97             job[i].startime=job[i].finitime;
     98         }
     99         else
    100         {
    101             job[i].finitime=job[i-1].startime+job[i].reqtime;
    102             job[i].startime=job[i].finitime;
    103         }
    104     }
    105 }
    106 
    107 TAtime(int n,jcb job[],float averageTAtime)//计算周转时间、平均周转时间
    108 {
    109     int i;
    110     float sum=0;
    111     for(i=0;i<n;i++)
    112     {
    113         job[i].TAtime=job[i].finitime-job[i].arrtime;
    114         sum=sum+job[i].TAtime;
    115     }
    116     averageTAtime=sum/(double)n;
    117     return averageTAtime;
    118 }
    119 
    120 
    121 TAWtime(int n,jcb job[],float averageTAWtime)//计算带权周转时间、平均带权周转时间
    122 {
    123     int i;
    124     float sum=0;
    125     for(i=0;i<n;i++)
    126     {
    127         job[i].TAWtime=job[i].TAtime/job[i].reqtime;
    128         sum=sum+job[i].TAWtime;
    129     }
    130     averageTAWtime=sum/(double)n;
    131     return averageTAWtime;
    132 }

    2. 运行结果及分析

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

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

     

     

    四、实验总结

     在此次实验中收获良多,但是编程能力仍存在一些问题,自己去发现问题的能力比较弱,很多方面都还有待提高。

  • 相关阅读:
    jar包制作
    eclipse 编译出错(java.io.ObjectInputStream)的解决办法
    Onmouseover被调用多次
    【驱动】——模块参数
    【驱动】——驱动入门用例
    【linux】——FTP出现500 OOPS: cannot change directory的解决方法
    【驱动】——错误: 初始值设定项里有未知的字段‘ioctl’
    【C】——动态库中函数的作用范围
    【C】——如何生成静态库和动态库
    【C】——C语言字符串比较函数
  • 原文地址:https://www.cnblogs.com/sr1zsq/p/5394668.html
Copyright © 2011-2022 走看看