《模拟处理机调度C++代码(附输出图示)(共6页).doc》由会员分享,可在线阅读,更多相关《模拟处理机调度C++代码(附输出图示)(共6页).doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上#include#includeusing namespace std;static const int Max=100;int ArrivalTimeMax;/到达时间int ServiceTimeMax;/服务时间int FinishTimeMax;/完成时间int WholeTimeMax;/周转时间double WeightWholeTimeMax;/帯权周庄时间double AverageWT_FCFS,AverageWT_SJF; /平均周转时间double AverageWWT_FCFS,AverageWWT_SJF;/平均帯权周转时间int Servi
2、ceTime_SJFMax;/在SJF算法中使用到int Num=0;int NowTime=0;/记录当前时间double SumWT=0,SumWWT=0;/SumWT用来计算总的周转时间,SumWWT用来计算总的帯权周转时间int i;int choice;/记录选择/*/ 先到先服务算法/*void FCFS()/找最早到达的。coutendl先到先服务算法(FCFS)endlendl;for(i=0;iNowTime)/假如进程到达的时间比现在已经运行的时间NowTime大,说明在NowTime时刻进程未到达NowTime=ArrivalTimei;/把进程的到达时间赋给NowTim
3、eNowTime+=ServiceTimei;/把进程的服务时间加到NowTime上FinishTimei=NowTime;/计算完成时间WholeTimei=FinishTimei-ArrivalTimei;/计算周转时间=完成时间-到达时间WeightWholeTimei=(double)WholeTimei/ServiceTimei;/计算带权周转时间=周转时间/服务时间SumWT+=WholeTimei;/计算总的周转时间SumWWT+=WeightWholeTimei;/计算总的帯权周转时间AverageWT_FCFS=SumWT/Num;/平均周转时间AverageWWT_FCFS
4、=SumWWT/Num;/平均帯权周转时间for(i=0;iNum;i+)/依次输出结果cout时刻FinishTimei-ServiceTimei: 进程i+1开始运行 其完成时间:FinishTimei 周转时间:WholeTimeisetprecision(3) 帯权周转时间:WeightWholeTimeisetprecision(3)endl;cout平均周转时间:AverageWT_FCFSendl;cout平均帯权周转时间:AverageWWT_FCFSendl;/*/ 短进程优先算法/*void SJF()/找已经到达的且服务时间最短的进程(假定输入的进程是按照到达时间先后输入
5、的)coutendl短进程优先算法(SJF)endl;int min=0;NowTime=ArrivalTime0+ServiceTime0;/计算第一次的NowTImeFinishTime0=NowTime;/计算第一个进程的完成时间ServiceTime_SJF0=1000;/赋初值。cout时刻FinishTime0-ServiceTime0: 进程1开始运行。;int allin=0,j,k;for(i=1;iNum;i+)/进入循环,从第二个到达的进程开始k=1;min=0;if(allin=0)/找到已经到达的进程个数j=0;while(ArrivalTimej=NowTime &
6、 j=Num)allin=1;elsej=Num;j=j-1;/j是已经到达的进程数while(kServiceTime_SJFk)/比较,找到服务时间最短的进程min=k;k+;ServiceTime_SJFmin=0;/找完后置零,便于下一次循环时使用NowTime+=ServiceTimemin;/累加当前时间FinishTimemin=NowTime;/完成时间for(i=0;iNum;i+)/计算周转时间,带权周转时间,总的周转时间和总的带权周转时间WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=(double)WholeTi
7、mei/ServiceTimei;SumWT+=WholeTimei;SumWWT+=WeightWholeTimei;AverageWT_SJF=SumWT/Num;/平均周转时间AverageWWT_SJF=SumWWT/Num;/平均带权周转时间cout 其完成时间:FinishTime0 周转时间:WholeTime0setprecision(3) 帯权周转时间:WeightWholeTime0setprecision(3)endl;for(i=1;iNum;i+)/输出结果cout时刻FinishTimei-ServiceTimei: 进程i+1开始运行 其完成时间:FinishTi
8、mei 周转时间:WholeTimeisetprecision(3) 帯权周转时间:WeightWholeTimeisetprecision(3)endl;cout平均周转时间:AverageWT_SJFendl;cout平均帯权周转时间:AverageWWT_SJFendl;/*/ 输入函数/*void input()coutendl _ 欢迎进入 模拟处理器调度 _ endl;coutendlNum;while(Num100|Num=0)coutNum;coutendl进程的到达时间endl;for(i=0;iNum;i+)coutendl请输入第i+1ArrivalTimei;coute
9、ndl进程的服务时间endl;for(i=0;iNum;i+)int data=0;coutendl请输入第i+1data;ServiceTimei=data;ServiceTime_SJFi=data;coutendl调度算法的选择(二选一)endl;coutendlchoice;/*/ 主函数/*void main()char flag=y;Loop:NowTime=0;SumWT=0;SumWWT=0;/参数初始化 input();/输入if(choice=1)FCFS();/调用FCFS算法else if(choice=2)SJF();/调用SJF算法else/输入有误,则重新选择while(1) coutendl您的选择有误!请重新选择!endl;coutendlchoice;if(choice=1)FCFS();/先来先服务调度算法break;else if(choice=2)SJF();/短作业优先调度算法break;coutendlflag;if(flag=y | flag=Y)goto Loop;程序结果: (输出图示如下)专心-专注-专业
限制150内