操作系统实验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("\n");
 35     for(int i=0;i<n;i++)
 36     {
 37         printf("第%d个作业:\n",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("\n");
 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\n",systime);
 52     printf("平均周转时间=%f\n",averageTAtime);
 53     printf("平均带权周转时间=%f\n",averageTAWtime);
 54 
 55 }
 56 
 57 
 58 void putOutjob(jcb job[],int n)//打印内容
 59 {
 60     int i;
 61     printf("\n\n作业名-到达时间-服务时间-开始时间-结束时间-周转时间-带权周转时间\n");
 62     for(i=0;i<n;i++)
 63     {
 64         printf("%s\t%d\t%d\t%d\t%d\t%f\t%f\n",job[i].name,job[i].arrtime,job[i].reqtime,job[i].startime,job[i].finitime,job[i].TAtime,job[i].TAWtime);
 65         printf("\n");
 66 
 67     }
 68     printf("\n\n");
 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. 运行结果及分析

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

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

 

 

四、实验总结

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

posted @ 2016-04-15 13:40  08周诗琦  阅读(271)  评论(0编辑  收藏  举报