《先来先服务FCFS和短作业优先SJF进程调度算法》由会员分享,可在线阅读,更多相关《先来先服务FCFS和短作业优先SJF进程调度算法(9页珍藏版)》请在金锄头文库上搜索。
1、【实验题目】:先来先服务FCFS和短作业优先SJF进程调度算法通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。【实验内容】问题描述:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在工,T时刻到达系统,它们需要的服1n务时间分别为S1,.,S。分别采用先来先服务FCFS和短作业优先SJF1n进程调度算法进行调度,计算每个进程的完成时间,周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。【实验要求】要求如下:1)进程个数n;每个进程的到达时间T1,.,T和服务时间1nS,S;选择算法1-
2、FCFS,2-SJF。1n2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间。程序代码:#include#include#defineNumber5voidmain()intn;intdaodaNumber,fuwuNumber,i;cout请依次输入各个进程的到达时间并以空格间隔:;for(i=0
3、;idaodai;coutvv“请依次输入各个进程的服务时间,并以空格间隔:“;for(i=0;ifuwui;coutn;while(n3)coutn;structstatedd/声明结构booldoneF,doneS;intdaoda,fuwu;floatwancheng,zhouzhuan,daiquan,wan,zhou,dai;stateddprocessNumber;声明结构变量,这里为数组inttimeflyF=O,timeflyS=O;定义两个类似于秒表的变量intj,k,l,nextproF,nextproS;/获取数据for(i=0;iNumber;i+)processi.d
4、oneF=false;processi.doneS=false;processi.wancheng=0;processi.zhouzhuan=0;processi.daiquan=0;processi.wan=0;processi.zhou=0;processi.dai=0;processi.daoda=daodai;processi.fuwu=fuwui;/获取最先到达的进程下标firstintfirst=0;l=first;for(i=1;idaodai)first=i;processfirst.doneF=true;processfirst.doneS=true;processfirst
5、.wancheng=processfirst.fuwu+processfirst.daoda;processfirst.wan=processfirst.fuwu+processfirst.daoda;timeflyF+=processfirst.daoda+processfirst.fuwu;timeflyS+=processfirst.daoda+processfirst.fuwu;/接下去到达的进程/fcfs/#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*
6、#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*for(j=1;jNumber;j+)nextproF=Number+1;fo
7、r(k=0;kNumber;k+)if(!processk.doneF)if(processk.daodaprocessk.daoda)nextproF=k;/获取到达时刻最先的进程/else/if2/if1/for/处理processnextproF.wancheng=processnextproF.fuwu+timeflyF;timeflyF+=processnextproF.fuwu;processnextproF.doneF=true;/circle2/Zii/IIJ#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*
8、#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*for(j=1;jNumber;j+)nextproS=Number+1;for(k=0;kNumber;k+)if(!processk.doneS)if(processk.daodaprocessk.fuwu)nextproS=k;/获取服务时间最小的进程/else/if2/if1/for/处理processnextproS.wan=processnextproS.fuwu+timeflyS;timeflyS+=processnextpr
9、oS.fuwu;processnextproS.doneS=true;/circle2/#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*#J*floatFz=0,Fdq=0,Sz=0,Sdq=0;/for(i=0;iNumber;i+)/processi.zhouzhu
10、an=processi.wancheng-processi.daoda;Fz+=processi.zhouzhuan;processi.daiquan=processi.zhouzhuan/processi.fuwu;Fdq+=processi.daiquan;/processi.zhou=processi.wan-processi.daoda;Sz+=processi.zhou;processi.dai=processi.zhou/processi.fuwu;Sdq+=processi.dai;/=输出/if(n=1|n=3)couttendl;coutFCFS:endl;for(i=0;i
11、Number;i+)if(i1)coutvv时刻vvlvv:进程vvi+lvv在运行vvendl;elsecoutvv时刻vvprocessi-l.wanchengvv:进程vvi+lvv在运行vvendl;coutvvsetw(10)vv进程IDvv;coutvvsetw(10)vv完成时间vv;coutvvsetw(10)vv周转时间vv;coutvvsetw(10)vv带权周转时间vvvvendl;for(i=0;ivNumber;i+)coutvvsetw(10)vvi+1vv;coutvvsetw(10)vvsetiosflags(ios:fixed)vvsetprecision(2
12、)vvprocessi.wanchengvv;coutvvsetw(10)vvsetiosflags(ios:fixed)vvsetprecision(2)vvprocessi.zhouzhuanvv;coutvvsetw(10)vvsetiosflags(ios:fixed)vvsetprecision(2)vvprocessi.daiquanvvvvendl;coutvv平均周转时间为:vvsetiosflags(ios:fixed)vvsetprecision(2)vvFz/Numbervvendl;coutvv平均带权周转时间为:vvsetiosflags(ios:fixed)vvse
13、tprecision(2)vvFdq/Numbervvendl;/if(n=2|n=3)couttendl;coutSJF:endl;for(i=0;iNumber;i+)if(i1)coutvv时刻vvlvv:进程vvi+lvv在运行vvendl;elsecoutvv时刻vvprocessi-1.wanvv:进程vvi+lvv在运行vvendl;coutvvsetw(10)vv进程IDvv;coutvvsetw(10)vv完成时间vv;coutvvsetw(10)vv周转时间vv;coutvvsetw(10)vv带权周转时间vvvvendl;for(i=0;ivNumber;i+)coutvvsetw(10)vvi+1vv;coutvvsetw(10)vvsetiosflags(ios:fixed)vvsetprecision(2)vvprocessi