收藏 分销(赏)

1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc

上传人:丰**** 文档编号:3066404 上传时间:2024-06-14 格式:DOC 页数:10 大小:107.04KB
下载 相关 举报
1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc_第1页
第1页 / 共10页
1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc_第2页
第2页 / 共10页
1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc_第3页
第3页 / 共10页
1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc_第4页
第4页 / 共10页
1实验一先来先服务FCFS和短作业优先SJF进程调度算法.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、实验一 先来先服务FCFS和短作业优先SJF进程调度算法 一:需求分析 程序设计的任务:设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个x进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。(1) 输入的形式和输入值的范围 为免去测试时候需要逐步输入数据的麻烦,输入时采用输入文件流方

2、式将数据放在.txt文件中,第一行为进程个数,第二行为进程到达时间(各个进程的到达时间之间用空格隔开),第三行为进程的服务时间(每个服务时间之间用空格隔开)。(2) 输出的形式 模拟整个调度过程,输出每个时刻的进程运行状态,同时输出了每个进程的完成时间,并且按要求输出了计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(3) 程序所能达到的功能 能够模拟出进程的先来先服务FCFS算法和短作业优先SJF算法的调度过程,输入进程个数n;每个进程的到达时间T1, ,Tn和服务时间S1, ,Sn;选择算法1-FCFS,2-SJF,3-退出,用户做出选择即可输出对应

3、的算法调度过程或者退出程序。(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果 测试数据及其输出结果: 作业 算法进程名ABCDE平均到达时间01234服务时间43524 FCFS完成时间47121418周转时间461011149带权周转时间1225.53.52.8SJF完成时间4918613周转时间4816398带权周转时间12.673.21.52.252.1也可看下面截图的测试结果 二:概要设计程序包括主函数、FCFS算法函数、SJF算法函数、输出函数;主函数流程:输入文件中的数据显示各进程数据选择算法调用相应算法的函数输出结果三:详细设计算法流程图:FCFS先来先服

4、务算法流程图:开始按排好的顺序第一个进程先进行判断上一个进程的完成时间是否大于下一个进程的到达时间NY下一个进程的开始时间从上个进程的完成时间开始下一个进程的开始时间从它本身的到达时间开始更新各数据循环累加,求总的周转时间,总的带权周转时间求平均周转时间,带权周转时间输出结果调用结束SJF算法流程图:开始初始化数据利用一个for循环判断是否找到短作业YN直接进入下一未完成进程并且FinishTimeShort=ArrivalTimeShort+ServiceTimeShortFinishTimeShort=Finish+ServiceTimeShortFinish=FinishTimeShor

5、t计算周转时间、带权周转时间计算总的周转时间、总的带权周转时间计算平均周转时间、平均带权周转时间调用结束四:调试分析(1) :调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析;开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。(2):算法的性能分析及其改进设想;即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(加循环,判断各个进程的到达时间先后,组成一个有序的序列)(3):经验和体会。 通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。五:用户使用说明在同一目录下

6、的.txt文件中按输入要求输入相关数据,并且根据提示选择相应的算法。六:测试结果测试数据:输出结果:七:附录源程序:#include#include/格式化输出结果#include/读取文件#include/读取文件using namespace std;const int MaxNum=100; int ArrivalTimeMaxNum; /到达时间int ServiceTimeMaxNum; /服务时间int FinishTimeMaxNum; /完成时间int WholeTimeMaxNum;/周转时间double WeightWholeTimeMaxNum;/带权周转时间double

7、 AverageWT_FCFS,AverageWT_SJF;/平均周转时间double AverageWWT_FCFS,AverageWWT_SJF;/平均带权周转时间void FCFS(int n);/先来先服务void SJF(int n);/短作业优先void print(int n,int 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;f

8、or(i=0;in;break;case 1:for(j=0;jArrivalTimej;break;case 2:for(j=0;jServiceTimej;break;/显示各进程数据coutsetfill( )setw(7)进程名setw(1);char ch=A;for(i=0;in;i+)coutsetw(3)char(ch+i);coutendl到达时间;for(i=0;in;i+)coutsetw(3)ArrivalTimei;coutendl服务时间;for(i=0;in;i+)coutsetw(3)ServiceTimei;cout1 短作业优先SJF-2 关闭-0cout1

9、 SJF-2 退出-0endlchoice;while(choice!=0)/直到输入值为0跳出循环,结束程序while(choice!=1 & choice !=2 & choice!=0 )coutPlease enter 0, 1 or 2!choice;if(choice=0)return;if(choice=1)FCFS(n);/进行先来先服务FCFS算法elseSJF(n);/进行短作业优先服务SJF算法coutendl1 SJF-2 退出-0endlchoice;return;/-先来先服务-void FCFS(int n)/第一个进程先服务FinishTime0=Arrival

10、Time0+ServiceTime0;WholeTime0=FinishTime0-ArrivalTime0;WeightWholeTime0=double(WholeTime0)/double(ServiceTime0);for(int i=1;iArrivalTimei)FinishTimei=FinishTimei-1+ServiceTimei;/如果上一个进程的完成时间大于下一个进程的到达时间,/那么下一个进程的开始时间从上一个进程的完成时间开始elseFinishTimei=ArrivalTimei+ServiceTimei;/否则,下一个进程的开始时间从它本身的到达时间开始Whol

11、eTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=double(WholeTimei)/double(ServiceTimei);double totalWT=0,totalWWT=0;for(int j=0;jn;j+)/循环累加,求总的周转时间,总的带权周转时间totalWT+=WholeTimej;totalWWT+=WeightWholeTimej;AverageWT_FCFS=totalWT/double(n);AverageWWT_FCFS=totalWWT/double(n);/输出各结果cout-先来先服务FCFS-endl;co

12、ut完成时间分别为:;print(n,FinishTime);cout周转时间分别为:;print(n,WholeTime);cout带权周转时间分别为:;print(n,WeightWholeTime);cout平均周转时间:AverageWT_FCFSendl;cout平均带权周转时间:AverageWWT_FCFSendl;printproceed(n);/-短作业优先-void SJF(int n)intShort;/存放当前最短作业的序号int Finish=0;/存放当前完成时间double totalWT=0,totalWWT=0;for(int a=0;an;a+)/初始化完成

13、时间为0FinishTimea=0;int i;/循环计数累加变量for(i=0;in;i+)int tag=0;/用于标记当前完成时间内,是否找到短作业 int Max=10000;for(int j=0;jn;j+)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+)/

14、直接进入下一未完成进程Short=k;break;FinishTimeShort=ArrivalTimeShort+ServiceTimeShort;Finish=FinishTimeShort;for(i=0;in;i+)/计算周转时间、带权周转时间WholeTimei=FinishTimei-ArrivalTimei;WeightWholeTimei=double(WholeTimei)/double(ServiceTimei);for(int j=0;jn;j+)/计算总的周转时间、总的带权周转时间totalWT+=WholeTimej;totalWWT+=WeightWholeTime

15、j;AverageWT_FCFS=totalWT/double(n);AverageWWT_FCFS=totalWWT/double(n);/输出各值cout-短作业优先SJF-endl;cout完成时间:;print(n,FinishTime);cout周转时间:;print(n,WholeTime);cout带权周转时间:;print(n,WeightWholeTime);cout平均周转时间:AverageWT_FCFSendl;cout平均带权周转时间:AverageWWT_FCFSendl;printproceed(n);void print(int n,int array)/打印i

16、nt型数组for(int i=0;in;i+)coutarrayi ;coutendl;void print(int n,double array)/打印double型数组for(int i=0;in;i+)coutarrayi ;coutendl;void printproceed(int n)/打印各时刻各进程的运行情况char ch=A;for(int i=0;in;i+)int StartTime=FinishTimei-ServiceTimei;cout时刻StartTime:进程char(ch+i)开始运行endl;cout时刻FinishTimei:进程char(ch+i)停止运行endl;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服