您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 操作系统实验-处理机管理
1安徽大学计算机实验教学中心学号专业姓名实验日期10.26教师签字成绩实验报告【实验名称】处理机管理【实验目的】在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远大于处理机个数。为了使系统中的个进程能有条不紊的运行,必须选择某种调度策略,以选择一进程占用处理机。要求学生设计一个模拟单处理机调度的算法,以巩固和加深处理机调度的概念。2安徽大学计算机实验教学中心【实验内容】7.3.1先来先服务调度的算法开始进程到达进程入队处理机中进程是否完成或者队列为空是队头进程进入处理机否#includebits/stdc++.husingnamespacestd;constintmaxn=1010;structNode{stringname;intarrival_time;intstart_time;intrun_time;intfinish_time;intid;stringstatus;}prog[maxn];boolcmp(Nodea,Nodeb){returna.arrival_timeb.arrival_time;}boolcmp2(Nodea,Nodeb){returna.idb.id;}3安徽大学计算机实验教学中心intmain(){freopen(in.txt,r,stdin);ios::sync_with_stdio(false);intcnt=0,n,now=0;vectorNodeq;vectorNode::iteratorhead=q.begin(),tail=q.end();cinn;for(inti=0;in;++i){cinprog[i].nameprog[i].arrival_timeprog[i].run_time;prog[i].status=R;prog[i].id=i;}sort(prog,prog+n,cmp);while(true){coutnownowendl;//coutnowprog[cnt].arrival_timeendl;if(now==prog[cnt].arrival_time)q.push_back(prog[cnt++]);if(q.size()==0){if(cnt=n)break;now++;continue;}vectorNode::iteratorit;Nodex=q.front();if(now-x.start_time=x.run_time){prog[x.id].finish_time=now;prog[x.id].status=C;prog[x.id].start_time=x.start_time;it=q.begin();q.erase(it);//q[0].start_time=now;head=q.begin();head-start_time=now;}if(q.size()==0){coutqueueisempty~endl;}else{coutqueuesizeisq.size()endl;it=q.begin();4安徽大学计算机实验教学中心coutrunningprogress:endl;coutnameit-nameendl;coutrunningtimenow-it-start_timeendl;coutremainingtimeit-run_time-now+it-start_timeendl;if(q.size()!=1){coutqueueingprogress:endl;++it;for(;it!=q.end();++it)coutit-nameendl;}coutendl;}now++;}coutendl;intsum=0;sort(prog,prog+n,cmp2);for(inti=0;in;++i){coutprog[i].nameendl;coutprog[i].finish_time-prog[i].arrival_timeendlendl;sum+=prog[i].finish_time-prog[i].arrival_time;}coutaveragetimesum/nendl;return0;}In.txt中的数据为:5test115test233test3152test4614test51635安徽大学计算机实验教学中心6安徽大学计算机实验教学中心7.3.2设计一个按优先级调度的算法开始进程到达进程按优先级从高到低入队处理机中进程是否完成是队头进程进入处理机否队头进程是否比处理机中的优先级高是队头进程强占处理机否处理机运行队列中所有进程优先级加一#includebits/stdc++.husingnamespacestd;constintmaxn=1010;structNode{stringname;intrk;intarrival_time,start_time,run_time,finish_time;intid,progress;stringstatus;Node(){progress=0;}}prog[maxn];7安徽大学计算机实验教学中心boolcmp(Nodea,Nodeb)//按到达时间排序{returna.arrival_timeb.arrival_time;}boolcmp2(Nodea,Nodeb)//按编号排序{returna.idb.id;}boolcmp3(Nodea,Nodeb)//按优先级排序{if(a.rk==b.rk)returna.arrival_timeb.arrival_time;returna.rkb.rk;}intmain(){freopen(in.txt,r,stdin);ios::sync_with_stdio(false);intcnt=0,n,now=0;vectorNodeq;cinn;for(inti=0;in;++i){cinprog[i].nameprog[i].arrival_timeprog[i].run_timeprog[i].rk;prog[i].status=R;prog[i].id=i;}vectorNode::iteratorhead=q.begin(),tail=q.end();sort(prog,prog+n,cmp);while(true)//模拟每一次时间的变化{coutnownowendl;//coutnowprog[cnt].arrival_timeendl;if(now==prog[cnt].arrival_time)//放入内存q.push_back(prog[cnt++]);if(q.size()==0){if(cnt=n)break;now++;continue;}vectorNode::iteratorit;q[0].progress++;Nodex=q.front();8安徽大学计算机实验教学中心//如果运行时间达到要求则弹出,否则优先级减少if(x.progress=x.run_time){prog[x.id].finish_time=now;prog[x.id].status=C;prog[x.id].start_time=x.start_time;it=q.begin();q.erase(it);head=q.begin();head-start_time=now;}elseq[0].rk++;sort(q.begin(),q.end(),cmp3);//每次执行之后再按优先级排序if(q.size()==0){coutqueueisempty~endl;}else{coutqueuesizeisq.size()endl;it=q.begin();coutrunningprogress:endl;coutnameit-nameendl;coutrunningtimeit-progressendl;coutremainingtimeit-run_time-it-progressendl;coutrankisit-rkendl;if(q.size()!=1){coutqueueingprogress:endl;++it;for(;it!=q.end();++it)coutit-nameendl;}coutendl;}now++;}coutendl;intsum=0;sort(prog,prog+n,cmp2);for(inti=0;in;++i){coutprog[i].nameendl;coutprog[i].finish_time-prog[i].arrival_timeendlendl;sum+=prog[i].finish_time-prog[i].arrival_time;}coutaveragetimesum/nendl;return0;}9安徽大学计算机实验教学中心In.txt:5test1152test2335test31521test46147test5163110安徽大学计算机实验教学中心11安徽大学计算机实验教学中心7.3.3设计一个按时间片轮转调度的算法开始进程到达进程入队处理机中进程是否完成是队头进程进入处理机否计数器是否达到规定的数值是处理机进程被队头进程强占,该进程变到队尾否计数器加一#includebits/stdc++.husingnamespacestd;constintmaxn=1010;constintpice=3;structNode{stringname;intarrival_time,start_time,run_time,finish_time;intid,progress;stringstatus;Node(){progress=0;}}prog[maxn];boolcmp(Nodea,Nodeb){returna.arrival_timeb.arrival_time;}12安徽大学计算机实验教学中心boolcmp2(Nodea,Nodeb){returna.idb.id;}intmain(){freopen(in.txt,r,stdin);ios::sync_with_stdio(false);intcnt=0,n,now=0;vectorNodeq;vectorNode::iteratorhead=q.begin(),tail=q.end();cinn;for(inti=0;in;++i){cinprog[i].nameprog[i].arrival_timeprog[i].run_time;prog[i].status=R;prog[i].id=i;}sort(prog,prog+n,cmp);while(true){coutnownowendl;//coutnowprog[cnt].arrival_timeendl;if(now==prog[cnt].arrival_time)q.push_back(prog[cnt++]);if(q.size()==0){if(cnt=n)break;now++;continue;}q[0].progress++;vectorNode::iteratorit;Nodex=q.front();if(x.progress=x.run_time){prog[x.id].finish_time=now;prog[x.id].status=C;prog[x.id].start_tim
本文标题:操作系统实验-处理机管理
链接地址:https://www.777doc.com/doc-5964878 .html