1、34服务时间5 FCFS完成时间7121418周转时间610119带权周转时间5.53.52.8SJF138162.673.21.52.252.1也可看下面截图的测试结果 二:概要设计程序包括主函数、FCFS算法函数、SJF算法函数、输出函数;主函数流程:输入文件中的数据显示各进程数据选择算法调用相应算法的函数输出结果三:详细设计算法流程图:FCFS先来先服务算法流程图:SJF算法流程图:四:调试分析(1):调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析;开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。(2):算法的性能分析及其
2、改进设想;即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(加循环,判断各个进程的到达时间先后,组成一个有序的序列)(3):经验和体会。通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。五:用户使用说明在同一目录下的.txt文件中按输入要求输入相关数据,并且根据提示选择相应的算法。六:测试结果测试数据:输出结果:七:附录源程序:#includeiomanip /格式化输出结果sstream /读取文件fstreamusing namespace std; const int MaxNum=100; int ArrivalTi
3、meMaxNum; /到达时间 int ServiceTimeMaxNum; /服务时间 int FinishTimeMaxNum; /完成时间 int WholeTimeMaxNum; /周转时间 double WeightWholeTimeMaxNum; /带权周转时间 double AverageWT_FCFS,AverageWT_SJF; /平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF; /平均带权周转时间 void FCFS(int n); /先来先服务 void SJF(int n); /短作业优先 void print(int n,in
4、t array); void print(int n,double array); void printproceed(int n); /输出FCFS进程运行状态void main() int n,i,j; /n:进程数;i、j:循环计数变量 ifstream in(text.txt);/读文件 string s; for(i=0;in; break; case 1: for(j=0;jArrivalTimej; case 2:ServiceTimej; /显示各进程数据 coutsetfill( )setw(7)进程名setw(1); char ch=A coutsetw(3)char(ch
5、+i);endl1 短作业优先SJF-2 关闭-请选择算法: FCFS-1 SJF-2 退出-0选择: int choice; cinchoice; while(choice!=0) /直到输入值为0跳出循环,结束程序 while(choice!=1 & choice !=2 & choice!=0 ) cout if(choice=0) return; if(choice=1) FCFS(n); /进行先来先服务FCFS算法 else SJF(n); /进行短作业优先服务SJF算法请选择: cin return;/-先来先服务-void FCFS(int n) /第一个进程先服务 Finis
6、hTime0=ArrivalTime0+ServiceTime0; WholeTime0=FinishTime0-ArrivalTime0; WeightWholeTime0=double(WholeTime0)/double(ServiceTime0); for(int i=1; if(FinishTimei-1ArrivalTimei) FinishTimei=FinishTimei-1+ServiceTimei;/如果上一个进程的完成时间大于下一个进程的到达时间, /那么下一个进程的开始时间从上一个进程的完成时间开始 FinishTimei=ArrivalTimei+ServiceTim
7、ei;/否则,下一个进程的开始时间从它本身的到达时间开始 WholeTimei=FinishTimei-ArrivalTimei; WeightWholeTimei=double(WholeTimei)/double(ServiceTimei); double totalWT=0,totalWWT=0; for(int j=0; /循环累加,求总的周转时间,总的带权周转时间 totalWT+=WholeTimej; totalWWT+=WeightWholeTimej; AverageWT_FCFS=totalWT/double(n); AverageWWT_FCFS=totalWWT/dou
8、ble(n); /输出各结果-先来先服务FCFS-完成时间分别为: print(n,FinishTime);周转时间分别为: print(n,WholeTime);带权周转时间分别为: print(n,WeightWholeTime);平均周转时间:AverageWT_FCFS平均带权周转时间:AverageWWT_FCFS printproceed(n);/-短作业优先-void SJF(int n) int Short; /存放当前最短作业的序号 int Finish=0; /存放当前完成时间 for(int a=0;aa+) /初始化完成时间为0 FinishTimea=0; int i
9、; /循环计数累加变量 int tag=0; /用于标记当前完成时间内,是否找到短作业 int Max=10000; for(int j=0; if(FinishTimej=0 & ArrivalTimej=Finish & ServiceTimej=Max) Max=ServiceTimej; Short=j; tag=1; if(tag=1) /找到短作业 FinishTimeShort=Finish+ServiceTimeShort; if(tag=0) /未找到 for(int k=0;kn,FinishTimek=0;k+) /直接进入下一未完成进程 Short=k; break;
10、FinishTimeShort=ArrivalTimeShort+ServiceTimeShort; Finish=FinishTimeShort; /计算周转时间、带权周转时间 /计算总的周转时间、总的带权周转时间 /输出各值-短作业优先SJF-完成时间:周转时间:带权周转时间:void print(int n,int array) /打印int型数组 for(int i=0;arrayi void print(int n,double array) /打印double型数组void printproceed(int n) /打印各时刻各进程的运行情况 int StartTime=FinishTimei-ServiceTimei;时刻StartTime:进程char(ch+i)开始运行FinishTimei停止运行
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1