码迷,mamicode.com
首页 > 其他好文 > 详细

实验2

时间:2015-06-26 10:50:45      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:

一,实验目的 

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

2,进行程序设计的训练。

 

二,实验内容和要求

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

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

作业调度算法:

1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。

2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业。

3)  响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比)= 作业周转时间 / 作业运行时间=1+作业等待时间/作业运行时间

每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。

 

三、主要程序及其解释

 

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 void   main()
  5 {
  6     int    i=0,j=0,finishtime=0,rotatetime=0,n=0,k=0,l,m;
  7     float a,b;
  8     int starttime,temp,max=1;
  9     int reachtime[24],runtime[24];
 10     FILE   *fp;
 11     char  str[1000];
 12     fp=fopen("d:/diaodu.txt","rt");
 13     if(fp==NULL)
 14     {
 15         printf("cannot open file\n");
 16         return;
 17     }
 18     printf("到达时间\t所需运行时间\n");
 19     while (fgets(str,1000,fp))
 20     {
 21         sscanf(str,"%d,%d\n",reachtime+i,runtime+i);
 22         
 23         printf("%d\t\t%d\n",reachtime[i],runtime[i]);
 24         i++;
 25     }
 26     fclose(fp);
 27         for(j=0;j<i;j++) 
 28         {
 29             for (k=0;k<i-j;k++) 
 30             {
 31                 if (reachtime[k]>reachtime[k+1]) 
 32                  {
 33                     temp=runtime[k];    
 34                     runtime[k]=runtime[k+1]; 
 35                     runtime[k+1]=temp;
 36                     temp=reachtime[k];                    
 37                     reachtime[k]=reachtime[k+1]; 
 38                     reachtime[k+1]=temp;
 39                 }   
 40             }
 41         }
 42     printf("***********************\n");
 43     printf("1.fcfs\n2.SJF\n3.HRRN\n");
 44     printf("***********************\n");
 45     scanf("%d",&n);    
 46     starttime=reachtime[1];
 47     if(n==1)
 48     {              
 49         printf("You want to run fcfs:\n");
 50         printf("作业编号\t开始时间\t运行时间\t完成时间\t周转时间\t带权周转时间\n");
 51         for(j=1;j<=i;j++)
 52         {
 53             finishtime=starttime+runtime[j];
 54             rotatetime=starttime+runtime[j]-reachtime[j];
 55             printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%f\n",j,starttime,runtime[j],finishtime,rotatetime,(float)(starttime+runtime[j]-reachtime[j])/runtime[j]);
 56             a+=rotatetime;
 57             b+=(starttime+runtime[j]-reachtime[j])/runtime[j];
 58             starttime=starttime+runtime[j];
 59             if(starttime<reachtime[j+1]) 
 60                 starttime=reachtime[j+1];
 61         }
 62         printf("平均周转时间为:%f\n",a/i);
 63                 printf("平均带权周转时间为:%f\n",b/i);
 64 
 65     }
 66     if(n==2)
 67     {             
 68         printf("You want to run sjf\n");
 69         printf("作业编号\t开始时间\t运行时间\t完成时间\t周转时间\t带权周转时间\n");
 70         starttime=reachtime[1];
 71         for(j=1;j<=i;j++)
 72         {
 73                         finishtime=starttime+runtime[j];
 74             rotatetime=starttime+runtime[j]-reachtime[j];
 75             printf("%d\t%d\t\t%d\t\t%d\t\t%d\t\t%f\n",j,starttime,runtime[j],finishtime,rotatetime,(float)(starttime+runtime[j]-reachtime[j])/runtime[j]);
 76             a+=rotatetime;
 77             b+=(starttime+runtime[j]-reachtime[j])/runtime[j];
 78             for(k=j;k<=i;k++)
 79             {
 80                 if(starttime+runtime[j]>reachtime[k+1])
 81                     max=k;
 82 
 83             }
 84             for(l=j;l<max;l++) 
 85             {
 86                 for (m=0;m<max-l;m++) 
 87                 {
 88                     if (runtime[m]>runtime[m+1]) 
 89                     {
 90                         temp=runtime[m];    
 91                         runtime[m]=runtime[m+1]; 
 92                         runtime[m+1]=temp;
 93                         temp=reachtime[m];                    
 94                         reachtime[m]=reachtime[m+1]; 
 95                         reachtime[m+1]=temp;
 96                     }   
 97                 }
 98             }
 99             starttime=starttime+runtime[j];    
100             if(starttime<reachtime[j+1]) 
101                 starttime=reachtime[j+1];            
102         }
103             printf("平均周转时间为:%f",a/i);
104             printf("平均带权周转时间为:%f",b/i); 
105     }
106 
107     
108 }

 

技术分享

技术分享

技术分享

四,实验总结

纠结甚久,甚至不知道我需要做些什么,百度看书看代码,方法有很多不同的,但总有些代码自己不理解,不过百度里的代码倒是让我学会一种输入输出的方法,也不算无所得了。照着自己的理解,写出零零散散的代码,这里想用数组,那里用指针,很乱。

 

实验2

标签:

原文地址:http://www.cnblogs.com/lsh43/p/4601672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!