进程调度算法实验报告.docx
- 文档编号:12654124
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:15
- 大小:112.25KB
进程调度算法实验报告.docx
《进程调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《进程调度算法实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
进程调度算法实验报告
进程调度算法实验报告
LT
if(minute<0){
minutes+=60;
hour--;
}
hours=hour-t2.hour;
returntime(hours,minutes);
}
friendbooloperator<(timet1,timet2)
{
if(t1.hour returntrue; } elseif(t1.hour==t2.hour){ if(t1.minute<=t2.minute){ returntrue; } } returnfalse; } friendostream&operator<<(ostream&out,consttime&t1){ returnout< "< } friendistream&operator>>(istream&in,time&t1){ inth,m; scanf("%d: %d",&h,&m); t1.hour=h; t1.minute=m; returnin; } public: inthour; intminute; }; 2.作业内容 typedefstructJOB{ charname[20];//Jobname timein_time; intrun_time; timest_time; timeend_time; intround_time;//周转时间 intwait_time; doublerounds_time;//带权周转 doublereson_radio;//响应比 }job; 六、流程图 七、源代码 #include #include #include #include usingnamespacestd; classtime{ public: time(intx=0,inty=0){ time: : hour=x; time: : minute=y; } time&operator=(consttime&t1) { this->hour=t1.hour; this->minute=t1.minute; return*this; } timeoperator+(timet2) { intminutes,hours; minutes=(minute+t2.minute)%60; hours=hour+t2.hour+(minute+t2.minute)/60; returntime(hours,minutes); } timeoperator-(timet2) { intminutes,hours; minutes=minute-t2.minute; if(minute<0){ minutes+=60; hour--; } hours=hour-t2.hour; returntime(hours,minutes); } friendbooloperator<(timet1,timet2) { if(t1.hour returntrue; } elseif(t1.hour==t2.hour){ if(t1.minute<=t2.minute){ returntrue; } } returnfalse; } friendostream&operator<<(ostream&out,consttime&t1){ returnout< "< } friendistream&operator>>(istream&in,time&t1){ inth,m; scanf("%d: %d",&h,&m); t1.hour=h; t1.minute=m; returnin; } public: inthour; intminute; }; typedefstructJOB{ charname[20];//Jobname timein_time; intrun_time; timest_time; timeend_time; intround_time;//周转时间 intwait_time; doublerounds_time;//带权周转 doublereson_radio;//响应比 }job; doublesum_time;//全部作业周转时间和 doublesums_time;//全部作业带权周转时间和 intn;//jobcounts //重载max timemaxn(timet1,timet2){ if(t1.hour>t2.hour){ returnt1; } elseif(t1.hour==t2.hour){ if(t1.minute>t2.hour){ returnt1; } } returnt2; } //eg: 120转化成2: 0 timem_exchange_h(intrun_time){ timerun; run.hour=run_time/60; run.minute=run_time%60; returnrun; } //eg: 2: 0转化成120 inth_exchange_m(timet1){ returnt1.hour*60+t1.minute; } //先来先服务; voidjob_input(job*x){ cout<<"作业\t进入时间\t估计运行时间(分钟)\t开始时间\t结束时间\t周转时间(分钟)\t带权周转时间"< for(inti=0;i cout< } cout<<"作业平均周转时间T="< cout<<"作业平均带权周转时间T="< } voidFCFS(job*x){ sum_time=0; sums_time=0; timerun=m_exchange_h(x[0].run_time); x[0].st_time=x[0].in_time; x[0].end_time=x[0].st_time+run; x[0].round_time=h_exchange_m(x[0].end_time-x[0].in_time); sum_time+=x[0].round_time; x[0].rounds_time=x[0].round_time*1.0/x[0].run_time; sums_time+=x[0].rounds_time; for(inti=1;i x[i].st_time=maxn(x[i].in_time,x[i-1].end_time); x[i].end_time=x[i].st_time+m_exchange_h(x[i].run_time); x[i].round_time=h_exchange_m(x[i].end_time-x[i].in_time); x[i].rounds_time=x[i].round_time*1.0/x[i].run_time; sum_time+=x[i].round_time; sums_time+=x[i].rounds_time; } cout<<"\n【先来先服务作业调度算法计算结果】\n"< job_input(x); } //短作业优先; voidSJF(job*x){ intflag[100000]; memset(flag,0,sizeof(flag)); sum_time=0; sums_time=0; timerun=m_exchange_h(x[0].run_time); x[0].st_time=x[0].in_time; x[0].end_time=x[0].st_time+run; x[0].round_time=h_exchange_m(x[0].end_time-x[0].in_time); sum_time+=x[0].round_time; x[0].rounds_time=x[0].round_time*1.0/x[0].run_time; sums_time+=x[0].rounds_time; inti=1;//已经运行的程序 inte=0;//上一个运行的程序 flag[0]=1; while(i inttemp=-1; inttime_min=99999999; for(intj=1;j if(x[j].in_time =1&&x[j].run_time //cout<<"小于: "< time_min=x[j].run_time; temp=j; } } if(temp! =-1){ x[temp].st_time=x[e].end_time; e=temp; } else{ e++; x[e].st_time=x[e].in_time; } x[e].end_time=x[e].st_time+m_exchange_h(x[e].run_time); x[e].round_time=h_exchange_m(x[e].end_time-x[e].in_time); x[e].rounds_time=x[e].round_time*1.0/x[e].run_time; sum_time+=x[e].round_time; sums_time+=x[e].rounds_time; flag[e]=1; i++; } cout<<"\n【短作业优先调度算法计算结果】\n"< job_input(x); } //最高响应比优先; voidHRN(job*x){ intflag[100000]; memset(flag,0,sizeof(flag)); sum_time=0; sums_time=0; timerun=m_exchange_h(x[0].run_time); x[0].st_time=x[0].in_time; x[0].end_time=x[0].st_time+run; x[0].round_time=h_exchange_m(x[0].end_time-x[0].in_time); sum_time+=x[0].round_time; x[0].rounds_time=x[0].round_time*1.0/x[0].run_time; sums_time+=x[0].rounds_time; inti=1;//已经运行的程序 inte=0;//上一个运行的程序 flag[0]=1; while(i inttemp=-1; doubleradio_max=0; for(intj=1;j if(x[j].in_time =1){ x[j].reson_radio=h_exchange_m(x[e].end_time-x[j].in_time)*1.0/x[j].run_time; if(x[j].reson_radio>radio_max){ temp=j; radio_max=x[j].reson_radio; } } } if(temp! =-1){ x[temp].st_time=x[e].end_time; e=temp; } else{ e++; x[e].st_time=x[e].in_time; } x[e].end_time=x[e].st_time+m_exchange_h(x[e].run_time); x[e].round_time=h_exchange_m(x[e].end_time-x[e].in_time); x[e].rounds_time=x[e].round_time*1.0/x[e].run_time; sum_time+=x[e].round_time; sums_time+=x[e].rounds_time; flag[e]=1; i++; } cout<<"\n【最高响应比调度算法计算结果】\n"< job_input(x); } intmain() { cout<<"作业总数: "; cin>>n; cout< job*jobs=newjob[n]; cout<<"作业信息输入(请按照进入时间先后顺序输入): "< for(inti=0;i cout< cout<<"正在读入第"< "< cout< cout<<"作业名称: "; cin>>jobs[i].name; cout<<"作业进入时间: "; cin>>jobs[i].in_time; cout<<"作业估计运行时间(分钟): "; cin>>jobs[i].run_time; } //先来先服务; FCFS(jobs); //短作业优先; SJF(jobs); //最高响应比优先; HRN(jobs); return0; } 八、运行结果 九、结果分析 三种算法根据输入得出的输出和书上的结果相符,证明算法实现正确。 但是略有不足的是没有实现多道程序下的作业调度,可以进一步补充。 十、本次实验体会 通过实验编写作业调度算法,对作业调度的三种算法有了更加深刻的了解。 在实现单道环境之余,复习了两道环境下的作业调度。 对作业调度有了更加全面的理解。 在实现代码的时候用到了类的重载,复习了C++面向对象知识。 同时实现算法的时候也发生了很多因为粗心导致的bug,在修改代码的过程中,提高了自己编写代码的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 算法 实验 报告