1、实验一先来先服务FCFS和短作业优先SJF进程调度算法实验一 先来先服务 FCFS 和短作业优先 SJF 进程调度算法 1、需求分析(1)输入的形式和输入值的范围 首先输入进程个数,然后输入进程到达的时间和服务时 间,输入完成,程序显示 FCFS和 SJF 算法的结果。(2)输出的形式 程序的输出根据用户输入的到达时间以及服务时间, 通过相应 的计算输出其各自的完成时间,周转时间,带全周转时间以及平 均值,程序会先输出 FCFS的结果,然后输入 SJF的结果。3) 程序所能达到的功能1)输入进程个数 n;每个进程的到达时间 T1, ,Tn 和服务时间 S1, ,nS。2)采用先来先服务 FCF
2、S 和短作业优先 SJF分别调度进程运行, 计算每个进程的周转时间和带权周转时间, 并且计算所有进程的平均 周转时间和带权平均周转时间;3)输出:输出计算出来的每个进程的周转时间、带权周转时间、 所有进程的平均周转时间以及带权平均周转时间。(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及 其输出结果正确输入的结果错误输入的结果2、概要设计抽象数据类型的定义:static int MaxNum=100;/ 进程的最大值int ArrivalTime100;/ 到达时间int ServiceTime100;/ 服务时间int FinishTime100;/ 完成时间int Whole
3、Time100;/ 周转时间double WeightWholeTime100;/ 带权周转时间double AverageWT_FCFS,AverageWT_SJF; / 平均周转时间double AverageWWT_FCFS,AverageWWT_SJF平;/ 均带权周转时间 int Num=0;int NowTime=0;/ 记录当前时间double SumWT=0,SumWWT=0;/SumW用T来计算总的周转时间, SumWW用T来计算总的帯权周转时间int i;int choice;/ 记录选择 主程序的流程以及各程序模块之间的层次 ( 调用)关系:定义和初始化程序的数据提示用户
4、输入各数据相应的值进行 FCFS 算法进行 SJF 算法输出运算的结果3、详细设计首先定义一个临时数组 ,把到达时间的数组赋值给它, 然后 对其进行排序, 同时将原来到达时间的数组的序号给数组。 从而 再用一个 for 循环,便可得到各个进程的完成时间,周转时间, 和加权周转时间 FinishTimenum1k=ServiceTimenum1k+FinishTimenum1k-1;WholeTimenum1k=ServiceTimenum1k+FinishTimenum1k- 1-temk;WeightWholeTimenum1k=( double)WholeTimenum1k/Servic
5、eTimenum1k;从而得到平均周转时间和平均带权周转时间(2)SJF 算法 该算法默认输入的进程按照到达时间先后输入先将第一个到达 的进程在它的服务时间里运行, 将此进程运行完成时已经到达的 进程进行排序,选择时间最短的那一个运行,然后依次类推,如 果一个服务运行完没有其他的服务到达, 则等到其他服务到达时 再运行,最后得到其完成时间, 这样也就能够求出其他的所求量 。4、调试分析(1) 调试过程中遇到的问题以及解决方法, 设计与实现的回顾 讨论和分析一开始没有对程序是否到达进行判断,导致了算法的错 误,后来调试中发现及时改正解决了这个问题。(2) 算法的性能分析 ( 包括基本操作和其它算
6、法的时间复杂度 和空间复杂度的分析 ) 及其改进设想FCFS算法比较有利于长作业,而不利于短作业; SJF 算 法能有效的降低作业的平均等待时间, 提高系统吞吐量, 但是该算法 对长作业不利,没有考虑作业的紧迫程度且该算法不一定能真正做到 短作业优先调度。改进:能够生成一个直观的过程的界面。(3)经验和体会 通过本次实验,深入理解了 FCFS和 SJF 算法的思想, 培养了自己的动手能力,通过实践加深了记忆。5、用户使用说明1)输入进程个数 n2)输入每个进程的到达时间3)输入每个进程的服务时间6、测试结果7、附录/ zy1_my.cpp : 定义控制台应用程序的入口点。/#include u
7、sing namespace std;int main()void FCFS(int *ArrivalTime,int *ServiceTime,int num); void SJF(int *ArrivalTime,int *ServiceTime,int num); cout 请输入进程的个数 num;int *ArrivalTime=new intnum;int *ServiceTime=new intnum;cout 请输入到达时间 endl; for(i=0;iArrivalTimei;cout 请输入服务时间 endl;for(i=0;iServiceTimei;coutFCFS
8、算法 ;FCFS(ArrivalTime,ServiceTime,num); coutendl;coutendl;coutSJF 算法 ;SJF(ArrivalTime,ServiceTime,num);return 0;void FCFS(int *ArrivalTime,int *ServiceTime,int num)int i=0;int j=0;int *FinishTime=new intnum;int *WholeTime=new intnum;double *WeightWholeTime=new doublenum; double AverageWholeTime=0;dou
9、ble AverageWeightWholeTime=0;int lastFinishTime=0;for(i=0;ilastFinishTime) FinishTimei=ArrivalTimei+ServiceTimei;elseFinishTimei=lastFinishTime+ServiceTimei; lastFinishTime=FinishTimei; WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=WholeTimei/(double)ServiceTimei;cout 完成时间如下: endl;for(i=0;inu
10、m;i+) coutFinishTimei ;coutendl;cout 周转时间如下: endl;int allWholeTime=0;for(i=0;inum;i+) allWholeTime=allWholeTime+WholeTimei; coutWholeTimei ;coutendl;AverageWholeTime=allWholeTime/(double)num;cout 平均周转时间如下: AverageWholeTimeendl;cout 带权周转时间如下: endl;double allWeightWholeTime=0;for(i=0;inum;i+) allWeigh
11、tWholeTime=allWeightWholeTime+WeightWholeTimei; coutWeightWholeTimei ;coutendl;AverageWeightWholeTime=allWeightWholeTime/num;cout 平均带权周转时间如下: AverageWeightWholeTimeendl; coutendl;void SJF(int *ArrivalTime,int *ServiceTime,int num)int i=0;int j=0;bool *done=new boolnum;int *copyArrivalTime=new intnum
12、;for(i=0;inum;i+)copyArrivalTimei=ArrivalTimei;int *copyServiceTime=new intnum;for(i=0;inum;i+)copyServiceTimei=ServiceTimei;for(i=0;inum;i+)donei=false;int *FinishTime=new intnum;int *copyFinishTime=new intnum;int *WholeTime=new intnum;double *WeightWholeTime=new doublenum;double AverageWholeTime=0
13、;double AverageWeightWholeTime=0;int lastFinishTime=0;int tempTime=0;int tempService=0;coutendl;for(i=0;inum;i+)if(i!=0)for(j=i;jnum;j+) if(copyServiceTimejcopyServiceTimei) if(copyArrivalTimejlastFinishTime) tempTime=copyArrivalTimei; tempService=copyServiceTimei; copyArrivalTimei=copyArrivalTimej;
14、 copyServiceTimei=copyServiceTimej; copyArrivalTimej=tempTime; copyServiceTimej=tempService;copyFinishTimei=lastFinishTime+copyServiceTimei; lastFinishTime=copyFinishTimei;coutendl;for(i=0;inum;i+)for(j=0;jnum;j+)if(ArrivalTimei=copyArrivalTimej)FinishTimei=copyFinishTimej;WholeTimei=FinishTimei-Arr
15、ivalTimei;WeightWholeTimei=WholeTimei/(double)ServiceTimei;cout 完成时间如下: endl;for(i=0;inum;i+)coutFinishTimei ;coutendl;cout 周转时间如下: endl;int allWholeTime=0;for(i=0;inum;i+)allWholeTime=allWholeTime+WholeTimei;coutWholeTimei ;coutendl;AverageWholeTime=allWholeTime/(double)num;cout 平均周转时间如下: AverageWholeTimeendl;cout 带权周转时间如下: endl;double allWeightWholeTime=0; for(i=0;inum;i+)allWeightWholeTime=allWeightWholeTime+WeightWholeTimei; coutWeightWholeTimei ;coutendl;AverageWeightWholeTime=allWeightWholeTime/num;cout 平均带权周转时间如下: AverageWeightWholeTimeendl; coutendl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1