欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

操作系统实验 四种调度算法

  • 资源ID:180103665       资源大小:83.50KB        全文页数:11页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

操作系统实验 四种调度算法

调度算法实验计算机科学与技术学院计0810813022026 高宁实验目的:1. 掌握进程控制块的概念,理解基本的进程调度算法。实验内容:1. FCFS2. 短作业优先算法3. 优先级调度算法4最高响应比调度算法实验源程序:#include<iostream> #include<iomanip> #include<fstream> using namespace std;class JOB /定义作业数据结构体public:int number; /作业个数int reach_time; /作业到达时间int reach_hour; int reach_minite; int need_time; /作业运行时间int privilege; /优先级float excellent; int start_time; /开始时间int wait_time; /等待时间int visited; /已读取次数public:JOB()number=0;reach_time=0;reach_hour=0;reach_minite=0;need_time=0;privilege=0;excellent=0.0;start_time=0;wait_time=0;visited=0;JOB& Copy(JOB js)int i=0;while(jsi.number&&jsi.number>0)i+;JOB *js2=new JOBi;for(int j=0;j<i;j+)js2j.number=jsj.number;js2j.reach_time=jsj.reach_time;js2j.reach_hour=jsj.reach_hour;js2j.reach_minite=jsj.reach_minite;js2j.need_time=jsj.need_time;js2j.privilege=jsj.privilege;js2j.excellent=jsj.excellent;js2j.start_time=jsj.start_time;js2j.wait_time=jsj.wait_time;return *js2; /FIFO算法 void FIFO(JOB job,int quantity) JOB *jobs;jobs=(&jobs->Copy (job);int current_hour; int current_minute; int total_time=0; /输出作业流 cout<<endl; cout<<endl<<"FIFO调度算法:"<<endl; cout.setf(2); cout<<setw(10)<<"作业号:"<<setw(12)<<"到达时间:"<<setw(12)<<"开始时间:"<<setw(14)<<"周转时间(分):"<<endl; current_hour=jobs0.reach_hour; current_minute=jobs0.reach_minite; for(int i=0;i<quantity;i+) jobsi.start_time=current_hour*100+current_minute; jobsi.wait_time=(current_hour-jobsi.reach_hour)*60+(current_minute-jobsi.reach_minite)+jobsi .need_time; cout<<setw(10)<<jobsi.number<<setw(12)<<jobsi.reach_time<<setw(12)<<jobsi.start_time<<setw(14)<<jobsi.wait_time<<endl; current_hour=current_hour+(jobsi.need_time+current_minute)/60; current_minute=(jobsi.need_time+current_minute)%60; total_time+=jobsi.wait_time; cout<<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl; /运算时间短的作业优先算法 void Shorter(JOB job,int quantity) JOB *jobs;jobs=(&jobs->Copy (job);int i,j,p; int current_hour; int current_minute; int current_need_time; int total_time=0; /输出作业流 cout<<endl; cout<<endl<<"时间短作业优先算法:"<<endl; cout.setf(2); cout<<setw(10)<<"作业号:"<<setw(12)<<"到达时间:"<<setw(14)<<"所需时间(分):"<<setw(12)<<"开始时间:"<<setw(14)<<"周转时间(分):"<<endl; current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_need_time=30000; for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.need_time<current_need_time) p=j; current_need_time=jobsj.need_time; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need_time; cout<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach_time<<setw(14)<<jobsp.need_time<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_time+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; cout<<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl; /优先数调度算法 void Privilege(JOB job,int quantity) JOB *jobs;jobs=(&jobs->Copy (job);int i,j,p; int current_hour; int current_minute; int current_privilege; int total_time=0; /输出作业流 cout<<endl; cout<<endl<<"优先数调度算法:"<<endl; cout.setf(2); cout<<setw(10)<<"作业号:"<<setw(12)<<"到达时间:"<<setw(14)<<"优先级:(0>1):"<<setw(12)<<"开始时间:"<<setw(14)<<"周转时间(分):"<<endl; current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_privilege=30000; for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.privilege<current_privilege) p=j; current_privilege=jobsj.privilege; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need_time; cout<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach_time<<setw(14)<<jobsp.privilege<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_time+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; cout<<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl; /响应比最高者优先调度算法 void Excellent(JOB job,int quantity) JOB *jobs;jobs=(&jobs->Copy (job);int i,j,p; int current_hour; int current_minute; float current_excellent; int total_time=0; /输出作业流 cout<<endl; cout<<endl<<"响应比高者优先调度算法:"<<endl; cout.setf(2); cout<<setw(10)<<"作业号"<<setw(12)<<"到达时间"<<setw(12)<<"开始时间"<<setw(14)<<"周转时间(分)"<<endl; current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_excellent=-1; for(j=0;j<quantity;j+) if(jobsj.visited=0) jobsj.wait_time=(current_hour-jobsj.reach_hour)*60+(current_minute-jobsj.reach_minite); jobsj.excellent=(float)(jobsj.wait_time/jobsj.need_time); for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.excellent>current_excellent) p=j; current_excellent=jobsj.excellent; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need_time; cout<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach_time<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_time+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; cout<<endl<<"总周转时间:"<<total_time<<" 平均周转时间:"<<total_time/quantity<<endl; int main(void) cout<<"*调度模拟*nnn"<<endl;int quantity=0; /数量JOB jobsMAXJOB; cout<<"请输入作业数据文件名:n" FILE *fp; char fname20; cin>>fname; fp=fopen(fname,"r");/以只读方式打开文件if(!fp) cout<<"打开文件错误!)"<<endl; elsewhile(!feof(fp) fscanf(fp,"%d %d %d %d",&jobsquantity.number,&jobsquantity.reach_time,&jobsquantity.need_time,&jobsquantity.privilege);jobsquantity.reach_hour=jobsquantity.reach_time/100; jobsquantity.reach_minite=jobsquantity.reach_time%100; quantity+; /输出初始作业数据 cout<<"初始作业数据:"<<endl; cout.setf(2); cout<<setw(10)<<"作业号:"<<setw(12)<<"到达时间:"<<setw(14)<<"所需时间(分):"<<setw(14)<<"优先级:(0>1)"<<endl; for(int i=0;i<quantity;i+) cout<<setw(10)<<jobsi.number<<setw(12)<<jobsi.reach_time<<setw(14)<<jobsi.need_time<<setw(14)<<jobsi.privilege<<endl; lb:cout<<"请选择调度算法:n"cout<<"tt1-先进先出调度算法n"cout<<"tt2-短作业优先n"cout<<"tt3-优先级调度算法n"cout<<"tt4-响应比最高调度算法"<<endl;int flag=0;la:cin>>flag;switch (flag)case 1:FIFO(jobs,quantity); break;/先进先出调度算法case 2:Shorter(jobs,quantity);break;/短作业优先case 3:Privilege(jobs,quantity);break; /优先级调度算法case 4:Excellent(jobs,quantity);break; /响应比最高调度算法default:cout<<"请输入1-4之间的数"<<endl;goto lb;goto la;return 0;数据文件:data.txt1 700 40 12 723 32 23 821 25 34 823 21 45 900 15 66 912 10 47 930 51 5总结及程序简介:1 首先将数据存在data.txt文件中,在主函数中读入数据存入数组jobs中2定义类JOB包含属性:int number; /作业个数int reach_time; /作业到达时间int reach_hour; int reach_minite; int need_time; /作业运行时间int privilege; /优先级float excellent; int start_time; /开始时间int wait_time; /等待时间int visited; /已读取次数方法:构造函数JOB() 复制函数Copy()实现一个对象2 分别实现调度算法,然后在主函数中依次调用调试结果:

注意事项

本文(操作系统实验 四种调度算法)为本站会员(dfg****19)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!