模拟处理机调度C++代码(附输出图示)(共6页).doc
-
资源ID:8149563
资源大小:111.50KB
全文页数:6页
- 资源格式: DOC
下载积分:20金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
模拟处理机调度C++代码(附输出图示)(共6页).doc
精选优质文档-倾情为你奉上#include<iostream>#include<iomanip>using 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 ServiceTime_SJFMax;/在SJF算法中使用到int Num=0;int NowTime=0;/记录当前时间double SumWT=0,SumWWT=0;/SumWT用来计算总的周转时间,SumWWT用来计算总的帯权周转时间int i;int choice;/记录选择/*/ 先到先服务算法/*void FCFS()/找最早到达的。cout<<endl<<"先到先服务算法(FCFS)"<<endl<<endl;for(i=0;i<Num;i+)if(ArrivalTimei>NowTime)/假如进程到达的时间比现在已经运行的时间NowTime大,说明在NowTime时刻进程未到达NowTime=ArrivalTimei;/把进程的到达时间赋给NowTimeNowTime+=ServiceTimei;/把进程的服务时间加到NowTime上FinishTimei=NowTime;/计算完成时间WholeTimei=FinishTimei-ArrivalTimei;/计算周转时间=完成时间-到达时间WeightWholeTimei=(double)WholeTimei/ServiceTimei;/计算带权周转时间=周转时间/服务时间SumWT+=WholeTimei;/计算总的周转时间SumWWT+=WeightWholeTimei;/计算总的帯权周转时间AverageWT_FCFS=SumWT/Num;/平均周转时间AverageWWT_FCFS=SumWWT/Num;/平均帯权周转时间for(i=0;i<Num;i+)/依次输出结果cout<<"时刻"<<FinishTimei-ServiceTimei<<": 进程"<<i+1<<"开始运行 "<<" 其完成时间:"<<FinishTimei<<" 周转时间:"<<WholeTimei<<setprecision(3)<<" 帯权周转时间:"<<WeightWholeTimei<<setprecision(3)<<endl;cout<<"平均周转时间:"<<AverageWT_FCFS<<endl;cout<<"平均帯权周转时间:"<<AverageWWT_FCFS<<endl;/*/ 短进程优先算法/*void SJF()/找已经到达的且服务时间最短的进程(假定输入的进程是按照到达时间先后输入的)cout<<endl<<"短进程优先算法(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;i<Num;i+)/进入循环,从第二个到达的进程开始k=1;min=0;if(allin=0)/找到已经到达的进程个数j=0;while(ArrivalTimej<=NowTime && j<Num)/已经到达的进程j+;if(j>=Num)allin=1;elsej=Num;j=j-1;/j是已经到达的进程数while(k<=j)/从已经到达的进程里找到服务时间最短的进程if(ServiceTime_SJFk=0)/进程的服务时间如果等于0,则跳过该进程k+;elseif(ServiceTime_SJFmin>ServiceTime_SJFk)/比较,找到服务时间最短的进程min=k;k+;ServiceTime_SJFmin=0;/找完后置零,便于下一次循环时使用NowTime+=ServiceTimemin;/累加当前时间FinishTimemin=NowTime;/完成时间for(i=0;i<Num;i+)/计算周转时间,带权周转时间,总的周转时间和总的带权周转时间WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=(double)WholeTimei/ServiceTimei;SumWT+=WholeTimei;SumWWT+=WeightWholeTimei;AverageWT_SJF=SumWT/Num;/平均周转时间AverageWWT_SJF=SumWWT/Num;/平均带权周转时间cout<<" 其完成时间:"<<FinishTime0<<" 周转时间:"<<WholeTime0<<setprecision(3)<<" 帯权周转时间:"<<WeightWholeTime0<<setprecision(3)<<endl;for(i=1;i<Num;i+)/输出结果cout<<"时刻"<<FinishTimei-ServiceTimei<<": 进程"<<i+1<<"开始运行 "<<" 其完成时间:"<<FinishTimei<<" 周转时间:"<<WholeTimei<<setprecision(3)<<" 帯权周转时间:"<<WeightWholeTimei<<setprecision(3)<<endl;cout<<"平均周转时间:"<<AverageWT_SJF<<endl;cout<<"平均帯权周转时间:"<<AverageWWT_SJF<<endl;/*/ 输入函数/*void input()cout<<endl<<" _ 欢迎进入 模拟处理器调度 _ "<<endl;cout<<endl<<"请输入进程个数:"cin>>Num;while(Num>100|Num<=0)cout<<"进程个数必须大于0且小于等于100!请重新输入进程个数:"cin>>Num;cout<<endl<<"进程的到达时间"<<endl;for(i=0;i<Num;i+)cout<<endl<<"请输入第"<<i+1<<"个进程的到达时间:"cin>>ArrivalTimei;cout<<endl<<"进程的服务时间"<<endl;for(i=0;i<Num;i+)int data=0;cout<<endl<<"请输入第"<<i+1<<"个进程的服务时间:"cin>>data;ServiceTimei=data;ServiceTime_SJFi=data;cout<<endl<<"调度算法的选择(二选一)"<<endl;cout<<endl<<"请选择要使用的算法(1-FCFS,2-SJF): "cin>>choice;/*/ 主函数/*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) cout<<endl<<"您的选择有误!请重新选择!"<<endl;cout<<endl<<"请选择要使用的算法(1-FCFS,2-SJF): "cin>>choice;if(choice=1)FCFS();/先来先服务调度算法break;else if(choice=2)SJF();/短作业优先调度算法break;cout<<endl<<"是否继续使用该程序,按'y'或'Y'键继续,按其他任意键退出:"cin>>flag;if(flag='y' | flag='Y')goto Loop;程序结果: (输出图示如下)专心-专注-专业