《先来先服务调度算法和短作业优先调度算法.docx》由会员分享,可在线阅读,更多相关《先来先服务调度算法和短作业优先调度算法.docx(5页珍藏版)》请在三一办公上搜索。
1、先来先服务调度算法和短作业优先调度算法先来先服务调度算法和短作业优先调度算法 #include struct fcfs /定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float servicetime; /服务时间 float starttime; /开始时间 float finishtime; /完成时间 float zztime; /周转时间 float dqzztime; /带权周转时间 ; struct sjf /定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float s
2、ervicetime; /服务时间 float starttime; /开始时间 float finishtime; /完成时间 float zztime; /周转时间 float dqzztime; /带权周转时间 ; fcfs a100; /定义先来先服务算法进程的最大数量 sjf b100; /定义短作业优先算法进程的最大数量 void Finput(fcfs *p,int N) /输入函数 int i; printf(intput the processs name & arrivetime & servicetime:nfor exmple: a 0 100n); for(i=0;i
3、=N-1;i+) printf(input the %dth processs information:n,i+1); scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.servicetime); /输出函数 void FPrint(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) int k; printf(nrun order:n); printf(%s,p0.name); for(k=1
4、;k%s,pk.name); printf(nnthe processs information:n); printf(nnametarrivetservicetstarttfinishtzztdqzznn); for(k=0;k=N-1;k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftnn,pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); void Fsort(fcfs *p,int N) /按到达时间排序,先到达排
5、在前面 for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime) fcfs temp; temp=pi; pi=pj; pj=temp; /运行结果 void Fdeal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) int k; for(k=0;k=N-1;k+) if(k=0) pk.starttime=pk.arrivet
6、ime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; /开始时间=前一个进程的完成时间 pk.finishtime=pk-1.finishtime+pk.servicetime; /结束时间=前一个进程的完成时间+现在进程的服务时间 for(k=0;k=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; /周转时间=完成时间-到达时间 pk.dqzztime=pk.zztime/pk.servicetime; /带权周转时间=周转时间/服务
7、时间 /先来先服务 void FCFS(fcfs *p,int N) float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Fsort(p,N); Fdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); FPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); void Sinput(sjf *p,int N) /输入
8、函数 int i; printf(intput the processs name & arrivetime & servicetime:nfor exmple: a 0 100nn); for(i=0;i=N-1;i+) printf(input the %dth processs information:n,i+1); scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.servicetime); /输出函数 void SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float
9、finishtime,float zztime,float dqzztime,int N) int k; printf(nrun order:n); printf(%s,p0.name); for(k=1;k%s,pk.name); printf(nnthe processs information:n); printf(nnametarrivetservicetstarttfinishtzztdqzzn); for(k=0;k=N-1;k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftnn,pk.name,pk.arrivetime,pk.s
10、ervicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); void Ssort(sjf *p,int N) /按短作业优先算法排序 for(int i=1;i=N-1;i+) for(int j=1;j=i;j+) if(pi.servicetimepj.servicetime) sjf temp; temp=pi; pi=pj; pj=temp; /运行结果 void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtim
11、e,float &zztime,float &dqzztime,int N) int k; for(k=0;k=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; /开始时间=前一个进程的完成时间 pk.finishtime=pk-1.finishtime+pk.servicetime; /结束时间=前一个进程的完成时间+现在进程的服务时间 for(k=0;k=N-1;k+) pk.zztime=pk.
12、finishtime-pk.arrivetime; /周转时间=完成时间-到达时间 pk.dqzztime=pk.zztime/pk.servicetime; /带权周转时间=周转时间/服务时间 void SJF(sjf *p,int N) float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; Ssort(p,N); Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); SPrint(p,arrivet
13、ime,servicetime,starttime,finishtime,zztime,dqzztime,N); void main /主函数 while(1) int n; printf(选择哪种算法?1、先来先服务算法 2、段作业优先算法n); scanf(%d,&n); if(n=1) /先来先服务算法 int N; printf(-先来先服务调度算法-n); printf(input the processs number:n); scanf(%d,&N); Finput(a,N); FCFS(a,N); if(n=2) /短作业优先算法 int M; printf(-短作业优先调度算法-n); printf(input the processs number:n); scanf(%d,&M); Sinput(b,M); SJF(b,M); char o; printf(继续工作吗?(Y/N):); scanf(%s,&o); if(o=Y) continue; if(o=N) break;