ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:250.88KB ,
资源ID:7198502      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7198502.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(1实验一先来先服务FCFS和短作业优先SJF进程调度算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、1实验一先来先服务FCFS和短作业优先SJF进程调度算法实验一 先来先服务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-FCF

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

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

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

6、verageWT_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);/读

7、文件 string s; for(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)Service

8、Timei; cout1 短作业优先SJF-2 关闭-0 cout1 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算法 else SJF(n); /进行短作业优先服务SJF算法 coutendl1 SJF-2 退出-0endlchoice; return;/-先来

9、先服务-void FCFS(int n) /第一个进程先服务 FinishTime0=ArrivalTime0+ServiceTime0; WholeTime0=FinishTime0-ArrivalTime0; WeightWholeTime0=double(WholeTime0)/double(ServiceTime0); for(int i=1;iArrivalTimei) FinishTimei=FinishTimei-1+ServiceTimei;/如果上一个进程的完成时间大于下一个进程的到达时间, /那么下一个进程的开始时间从上一个进程的完成时间开始 else FinishTime

10、i=ArrivalTimei+ServiceTimei;/否则,下一个进程的开始时间从它本身的到达时间开始 WholeTimei=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

11、); AverageWWT_FCFS=totalWWT/double(n); /输出各结果 cout-先来先服务FCFS-endl; cout完成时间分别为:; print(n,FinishTime); cout周转时间分别为:; print(n,WholeTime); cout带权周转时间分别为:; print(n,WeightWholeTime); cout平均周转时间:AverageWT_FCFSendl; cout平均带权周转时间:AverageWWT_FCFSendl; printproceed(n);/-短作业优先-void SJF(int n) int Short; /存放当前最

12、短作业的序号 int Finish=0; /存放当前完成时间 double totalWT=0,totalWWT=0; for(int a=0;an;a+) /初始化完成时间为0 FinishTimea=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(t

13、ag=1) /找到短作业 FinishTimeShort=Finish+ServiceTimeShort; if(tag=0) /未找到 for(int k=0;kn,FinishTimek=0;k+) /直接进入下一未完成进程 Short=k; break; FinishTimeShort=ArrivalTimeShort+ServiceTimeShort; Finish=FinishTimeShort; for(i=0;in;i+) /计算周转时间、带权周转时间 WholeTimei=FinishTimei-ArrivalTimei; WeightWholeTimei=double(Who

14、leTimei)/double(ServiceTimei); for(int j=0;jn;j+) /计算总的周转时间、总的带权周转时间 totalWT+=WholeTimej; totalWWT+=WeightWholeTimej; AverageWT_FCFS=totalWT/double(n); AverageWWT_FCFS=totalWWT/double(n); /输出各值 cout-短作业优先SJF-endl; cout完成时间:; print(n,FinishTime); cout周转时间:; print(n,WholeTime); cout带权周转时间:; print(n,We

15、ightWholeTime); cout平均周转时间:AverageWT_FCFSendl; cout平均带权周转时间:AverageWWT_FCFSendl; printproceed(n);void print(int n,int array) /打印int型数组 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;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1