版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.10/10作业调度实验名称作业调度算法二、实验目标在单道环境下编写作业调度的模拟程序,以加深对作业调度的理解。单道环境的特点使被调度的作业占有所有的资源。实现的算法有先来先服务,最短作业优先,最高响应比三种作业调度算法。三、实验环境要求:1.PC机。2.Windows;3.CodeBlocks四、实验基本原理1.本实验设计一个可指定作业个数的作业调度系统。可以输出先来先服务,最短作业优先,最高响应比三种作业调度算法的结果。2.先来先服务就是按照各个作业进入系统的自然次序进行调度。最短作业优先就是优先调度并且处理短作业。最高响应比优先就是根据在程序运行过程中的最高响应比对应的作业先进行调度处理。3.在设计程序过程中,将time相关的内容封装到类中,重载了加减乘除和输入输出以及比较运算符,方便12:00这种形式的数据的加减乘除运算和比较运算,五、数据结构设计1.时间类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<t2.hour>{ returntrue; } elseif<t1.hour==t2.hour>{ if<t1.minute<=t2.minute>{ returntrue; } } returnfalse; } friendostream&operator<<<ostream&out,consttime&t1>{ returnout<<t1.hour<<":"<<t1.minute*1.00; } 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<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>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<t2.hour>{ returntrue; } elseif<t1.hour==t2.hour>{ if<t1.minute<=t2.minute>{ returntrue; } } returnfalse; } friendostream&operator<<<ostream&out,consttime&t1>{ returnout<<t1.hour<<":"<<t1.minute*1.00; } 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//重载maxtimemaxn<timet1,timet2>{ if<t1.hour>t2.hour>{ returnt1; } elseif<t1.hour==t2.hour>{ if<t1.minute>t2.hour>{ returnt1; } } returnt2;}//eg:120转化成2:0timem_exchange_h<intrun_time>{ timerun; run.hour=run_time/60; run.minute=run_time%60; returnrun;}//eg:2:0转化成120inth_exchange_m<timet1>{ returnt1.hour*60+t1.minute;}//先来先服务;voidjob_input<job*x>{ cout<<"作业\t进入时间\t估计运行时间<分钟>\t开始时间\t结束时间\t周转时间〔分钟>\t带权周转时间"<<endl; for<inti=0;i<n;i++>{ cout<<x[i].name<<"\t"<<x[i].in_time<<"\t\t"<<x[i].run_time<<"\t\t\t"<<x[i].st_time<<"\t\t"<<x[i].end_time<<"\t\t"<<x[i].round_time<<"\t\t"<<x[i].rounds_time<<endl; } cout<<"作业平均周转时间T="<<sum_time/n<<endl; cout<<"作业平均带权周转时间T="<<sums_time/n<<endl;}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<n;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"<<endl; 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<n>{ inttemp=-1; inttime_min=99999999; for<intj=1;j<n;j++>{ if<x[j].in_time<x[e].end_time&&flag[j]!=1&&x[j].run_time<time_min>{ //cout<<"小于:"<<x[j].name<<endl; 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"<<endl; 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<n>{ inttemp=-1; doubleradio_max=0; for<intj=1;j<n;j++>{ if<x[j].in_time<x[e].end_time&&flag[j]!=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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 柳絮期皮肤科患者数据加密存储
- 瞳孔观察的方法和临床意义
- 肺水肿的护理实践指南
- 26年间质性肺炎疗效关联评估
- 医学26年:缺血缺氧性脑病诊疗 查房课件
- 2026年河南省洛阳市中考历史一模试卷(含答案)
- 职业安全与健康
- 医学26年:化疗相关性神经损害 查房课件
- 上海工程技术大学《Android 系统与开发》2025-2026学年第一学期期末试卷(A卷)
- 上海工商职业技术学院《安检设备原理与维修》2025-2026学年第一学期期末试卷(A卷)
- 2026年江西金融租赁股份有限公司社会招聘14人笔试备考题库及答案解析
- 2026上海药品审评核查中心招聘辅助人员17人考试备考试题及答案解析
- 2025南京溧水区招聘社保员2人(公共基础知识)测试题附答案解析
- 医院产前筛查中心设置评审验收工作汇报课件
- 送教上门情况记录表送教活动记录六篇.doc
- 科学计数法表示较小的数专项练习60题(有答案)ok
- 剪叉式升降台安全规程JB 5320—2000
- 深圳密度分区研究课件
- DLT7512019水轮发电机运行规程共15文档
- 《新世界 灵性的觉醒》摘录 2
- 《企业会计准则第14号——收入》应用指南2018
评论
0/150
提交评论