1、FCFS和SJF调度算法1以下参考的别人的:FCFS和SJF调度算法思想和实现算法算法思想:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。源程序:#include #include staticconstint N=100;intarrivalTimeN;/到达时间intserviceTimeN;/服务时间intfinishTi
2、meN;/完成时间intWholeTimeN;/周转时间double WeightWholeTimeN;/带权周转时间double averageWT,averageWWT;/平均周转时间intserviceTime_SJFN;int n=0;intnowTime=0;/记录当前时间inti;void FCFS() coutn=FCFS调度算法=n; for(i=0;inowTime) nowTime=arrivalTimei; nowTime+=serviceTimei; finishTimei=nowTime; for(inti=0;in;i+) WholeTimei=finishTime
3、i-arrivalTimei; for(inti=0;in;i+) WeightWholeTimei=(double)WholeTimei/(double)serviceTimei; for(inti=0;in;i+) averageWT+=(double)WholeTimei/n; averageWWT+=(double)WeightWholeTimei/n; void SJF()coutn=SJF调度算法=n; int min=0; nowTime=arrivalTime0+serviceTime0; finishTime0=nowTime; serviceTime_SJF0=100; i
4、ntallin=0,j,k; for(i=1;in;i+) k=1; min=0; if(allin=0) j=0; while(arrivalTimej=nowTime& jn) allin=1; else j=n; j=j-1; while(kserviceTime_SJFk) min=k; k+; serviceTime_SJFmin=0; nowTime+=serviceTimemin; finishTimemin=nowTime; for(inti=0;in;i+) WholeTimei=finishTimei-arrivalTimei; for(inti=0;in;i+) Weig
5、htWholeTimei=(double)WholeTimei/(double)serviceTimei; averageWT=0;averageWWT=0; for(inti=0;in;i+) averageWT+=(double)WholeTimei/n; averageWWT+=(double)WeightWholeTimei/n; void sortOn()/进程按照到达或者服务时间进行排序 int temp; for(inti=0;in;i+) for(int k=0;kn-i-1;k+) if(arrivalTimek+1arrivalTimek) temp=arrivalTime
6、k+1; arrivalTimek+1=arrivalTimek; arrivalTimek=temp; temp=serviceTimek+1; serviceTimek+1=serviceTimek; serviceTimek=temp; void input() coutn; cout100|n=0) cout进程个数必须大于0且小于等于100!请重新输入进程个数endl; cout请输入这N个进程的到达时间:nn; for(inti=0;iM; arrivalTimei=M; coutendl;cout请输入这N个进程的对应的服务时间:nn; for(inti=0;iM; servic
7、eTimei=M; serviceTime_SJFi=M; coutendl; cout您输入的这N个进程的信息如下:nn; sortOn();/进程按照到达时间进行排序 cout进程名tt; for(inti=0;in;i+) char c=i+65; coutct; coutn到达时间t; for(inti=0;in;i+) coutarrivalTimeit;coutn服务时间t; for(inti=0;in;i+) coutserviceTimeit; coutendlendl;void output()cout进程名tt;for(inti=0;in;i+) char c=i+65;
8、coutct; cout平均n到达时间t; for(inti=0;in;i+) coutarrivalTimeit;coutn服务时间t; for(inti=0;in;i+) coutserviceTimeit; coutn完成时间t; for(inti=0;in;i+) coutfinishTimeit; coutn周转时间t; for(inti=0;in;i+) coutWholeTimeit; coutaverageWTsetprecision(3)n带权周转时间t;for(inti=0;in;i+) coutWeightWholeTimeit;coutaverageWWTsetprecision(3)endl; void main() coutc; getchar();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1