(1)加深对做业调度算法的理解;算法
(2)进行程序设计的训练。数据结构
用高级语言编写一个或多个做业调度的模拟程序。oop
单道批处理系统的做业调度程序。做业一投入运行,它就占有计算机的一切资源直到做业完成为止,所以调度做业时没必要考虑它所须要的资源是否获得知足,它所运行的时间等因素。this
做业调度算法:spa
1)采用先来先服务(FCFS)调度算法,即按做业到达的前后次序进行调度。老是首先调度在系统中等待时间最长的做业。操作系统
2)短做业优先 (SJF) 调度算法,优先调度要求运行时间最短的做业。设计
3)响应比高者优先(HRRN)调度算法,为每一个做业设置一个优先权(响应比),调度以前先计算各做业的优先权,优先数高者优先调度。RP (响应比)= 做业周转时间 / 做业运行时间=1+做业等待时间/做业运行时间每一个做业由一个做业控制块JCB表示,JCB能够包含如下信息:做业名、提交(到达)时间、所需的运行时间、所需的资源、做业状态、链指针等等。做业的状态能够是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每一个做业的最初状态都是等待W。指针
1.容许用户指定做业的个数(2-24),默认值为5。code
2.容许用户选择输入每一个做业的到达时间和所需运行时间。blog
3.(**)从文件中读入以上数据。
4.(**)也容许用户选择经过伪随机数指定每一个做业的到达时间(0-30)和所需运行时间(1-8)。
(1)采用先来先服务(FCFS)调度算法
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int i,n; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N]; char name[N]; printf("\n Please enter the number of operations:"); scanf("%d",&n); for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ // 短做业优先 (SJF) 调度算法,优先调度要求运行时间最短的做业。 int main(int argc, char *argv[]) { int i,j,n,temp; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N]; char name[N],ctemp; printf("\n Please enter the number of operations:"); scanf("%d",&n); for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); } for(i=0;i<n;i++){ for(j=1;j<n-1-i;j++){ if(reqtime[j] > reqtime[j+1]){ temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } else if(reqtime[j]==reqtime[j+1]&&arrtime[j]>arrtime[j+1]){ temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } } } for(i=0;i<n;i++){ if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
运行结果:
#include <stdio.h> #include <stdlib.h> #define N 24 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ //HRRN为每一个做业设置一个优先权(响应比),调度以前先计算各做业的优先权 int main(int argc, char *argv[]) { int i,j,n,temp,num; int arrtime[N],reqtime[N],starttime[N],endtime[N],zztime[N]; float zzxs[N],hrrn[N],ftemp; char name[N],ctemp; printf("\n Please enter the number of operations:"); scanf("%d",&n); num=1; for(i=0;i<n;i++){ printf("\n name:"); scanf("%s",&name[i]); printf("\n arrtime:"); scanf("%d",&arrtime[i]); printf("\n reqtime:"); scanf("%d",&reqtime[i]); } for(i=0;i<n;i++){ if(i==0){ starttime[i]=arrtime[i]; } endtime[i]=starttime[i]+reqtime[i]; zztime[i]=endtime[i]-arrtime[i]; zzxs[i]=zztime[i]*1.0/reqtime[i]; starttime[i+1]=endtime[i]; for(j=num;j<n;j++){ hrrn[j]=(endtime[i]-arrtime[j])/reqtime[j]*1.0+1; //printf("%f ",&hrrn[i]); } for(j=num;j<n;j++){ if(hrrn[j]<hrrn[j+1]){ ftemp=hrrn[j+1]; hrrn[j+1]=hrrn[j]; hrrn[j]=ftemp; temp = reqtime[j+1]; reqtime[j+1] = reqtime[j]; reqtime[j] = temp; ctemp=name[j+1]; name[j+1]=name[j]; name[j]=ctemp; temp=arrtime[j+1]; arrtime[j+1]=arrtime[j]; arrtime[j]=temp; } } num++; } printf("\n\tname arrtime reqtime startime endtime zztime zzxs "); for(i=0;i<n;i++){ printf("\n\t%c\t%d\t%d\t %d\t %d\t %d\t %.2f",name[i],arrtime[i],reqtime[i],starttime[i],endtime[i],zztime[i],zzxs[i]); } return 0; }
实验总结:
此次实验作得比较仓促,最后两节课才开始编写程序。因此,此次程序也没用到数据结构来写。总的来讲,要对操做系统这门课程更加上心,没事在宿舍多编写程序。