


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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完成时间47121418FCFS周转时间461011149带权周转时间1225.53.52.8完成时间4918613SJF周转时间4816398带权周转时间12.673.21.52.252.1也可看下面截图的测试结果二:概要设计程序包括主函数、FCFS 算法函数、 SJF 算法函数、输出函数;主函数流程: 输入文件中的数据显示各进程数据选择算法调用相应算法的函数输出结果三:详细设计算法流程图:FCF
4、S 先来先服务算法流程图:Y开始按排好的顺序第一个进程先进行判断上一个进程的完成时间是否大于下一个进程的到达时间N下一个进程的开始时间从上个进程的完成时间开始下一个进程的开始时间从它本身的到达时间开始更新各数据循环累加, 求总的周转时间, 总的带权周转时间求平均周转时间,带权周转时间输出结果调用结束SJF 算法流程图:N直接进入下一未完成进程并且FinishTimeShort=ArrivalTimeShort +ServiceTimeShort开始初始化数据利用一个 for 循环判断是否找到短作业Finish=FinishTime Short计算周转时间、带权周转时间计算总的周转时间、总的带权
5、周转计算平均周转时间、平均带权周转时间YFinishTimeShort=Finish+ServiceTi meShort四:调试分析调用结束(1) :调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析;开始的时候没有判断进程是否到达, 导致短进程优先算法运行结果错误, 后来加上了判断语句后就解决了改问题。(2) :算法的性能分析及其改进设想;即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(加循环,判断各个进程的到达时间先后,组成一个有序的序列)(3) :经验和体会。通过本次实验, 深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记
6、忆。五:用户使用说明在同一目录下的.txt 文件中按输入要求输入相关数据,并且根据提示选择相应的算法。六:测试结果测试数据:输出结果:七:附录源程序:#include#include#include#include/格式化输出结果/读取文件/读取文件using namespace std;const int MaxNum=100;intArrivalTimeMaxNum;/到达时间intServiceTimeMaxNum;/服务时间intFinishTimeMaxNum;/完成时间intWholeTimeMaxNum;/周转时间double WeightWholeTimeMaxNum;/带权周
7、转时间double 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)
8、;/读文件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)ServiceTimei;cout1短
9、作业优先SJF-2关闭 -0cout1SJF-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 算法coutendl1SJF-2退出 -0endlchoice;return;/-先来先服务 -void FCFS(int n)/第一个进程
10、先服务FinishTime0=ArrivalTime0+ServiceTime0;WholeTime0=FinishTime0-ArrivalTime0;WeightWholeTime0=double(WholeTime0)/double(ServiceTime0);for(int i=1;iArrivalTimei)FinishTimei=FinishTimei-1+ServiceTimei;/如果上一个进程的完成时间大于下一个进程的到达时间,/那么下一个进程的开始时间从上一个进程的完成时间开始elseFinishTimei=ArrivalTimei+ServiceTimei;/否则,下一个
11、进程的开始时间从它本身的到达时间开始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);AverageWWT_FCFS=totalWWT/double(n);/输出
12、各结果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)intShort;/ 存放当前最短作业的序号int Finish=0;/存放当前完成时间double totalWT=0
13、,totalWWT=0;for(int a=0;an;a+)/初始化完成时间为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)/
14、 未找到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(WholeTimei)/double(ServiceTimei);for(int j=0;jn;j+)/计算总的周转时间、总的带权周转时间 totalW
15、T+=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,WeightWholeTime);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)/打印
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新人珠宝销售
- 真菌性角膜炎疑难病例讨论
- 洁净区更衣流程
- 仓管品培训资料
- 特色小镇工业厂房场地租赁合同范本
- 股东分红财产分配及使用合同
- 矿产资源采矿权质押借款合同模板
- 气象测绘保密协议及法律法规执行标准
- 餐厅厨师团队协作及业绩考核劳动合同
- 物流企业核心股权变更及关键条款保障协议
- 1:1000地形图测绘项目技术设计书
- 2023年天河区中小学生游泳比赛成绩册
- 气功修炼十奥妙
- 可定的疗效与安全性
- 电力电子技术第五版(王兆安)课件全
- QB∕T 2080-2018 高回弹软质聚氨酯泡沫塑料
- 工程机械设备保险附加第三者责任保险条款
- 医院感染知识培训记录范文(精选6篇)
- 日周月安全检查记录表
- 上海电动汽车充电设施建设管理暂行规定
- 100道结构力学弯矩图
评论
0/150
提交评论