FCFS和SJF进程调度算法实验报告材料_第1页
FCFS和SJF进程调度算法实验报告材料_第2页
FCFS和SJF进程调度算法实验报告材料_第3页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XX大学操作系统实验报告某某:学号:班级:实验日期:实验名称:先来先服务FCFS和短作业优先SJF进程调度算法实验一先来先服务 FCFS和短作业优先 SJF进程调度算法1.实验目的 :通过这次实验,理解 FCFS和SJF进程调度算法的运行原理,进一步掌 握进程状态的转变、进程调度的策略与对系统性能的评价方法。:2. 需求分析(1)输入的形式和输入值的 X围;输入:进程个数 NX围:0<N<=100依次输入进程名进程到达时间 X围:0<time<=100进程服务时间X围:0<time<=100选择一种算法:1 FCFS,2 SJFX围:1或2或00退出(2)输

2、出的形式进程名字到达时间运行时间开始运行 时间完毕时间执行顺序周转时间带权周转时间时刻* :进程*开始运行*时刻* :进程*开始运行*。平均周转时间: 平均带权周转时间:(3)程序所能达到的功能输入进程的个数 N,以与每个进程的到达时间和运行时间。通过选择FCFS或是SJF进程调度算法进展调度,计算出每个进程的开始运行时间、完毕时间、执行顺序、周转时间、带权 周转时间,并最终求得平均周转时间和平均带权周转时间。(4)测试数据,包括正确的输入与其输出结果和含有错误的输入与其输出结果。:別退程研姑运齐盯刻*: 14低开始运行开始运苻时间第頃时间 执行顺序周转时何带权周转日劈i订谴程的名字H3J S

3、- 3.35 "e卯 to coATiniii*曲跻Gr 42.帀retii nny常J'MAX个进程開名:c wiiilli iH ICM M WMM-H KU MHMMMKM N M KXMXM蜒耀*个邊程的名字小 运砒丽i1fCPS;!SJP0 . 1'i講祐g正确一FCFS正确二SJF输入参数错误3、概要设计所有抽象数据类型的定义:static int MaxNum=100;int ArrivalTimeMaxNum;到达时间int ServiceTimeMaxNum;服务时间int Fi nishTimeMaxNum;完毕时间int WholeTimeMax

4、Num;周转时间double WeightWholeTimeMaxNum; 带权周转时间double AverageWT_FCFS,AverageWT_SJF; / 平均周转时间double AverageWWT_FCFS,AverageWWT_SJF;/平 均带权周转时间主程序的流程:变量初始化承受用户输入的 N, T1.Tn,S1.Sn;选择算法进展进程调度,计算进程的开始运行时间、完毕时间、执行顺序、周转时间、带权周转时间;计算所有进程的平均周转时间、平均带权周转时间;按照格式输出调度结果。各程序模块之间的层次(调用)关系Main函数通过对Pin put函数进展调用,对函数的成员变量进展

5、赋 值,再通过算法的选择对算法函数进展选择调用,求出题目要求的各个 数据结果,最后通过Poutput函数对结果进展格式输出。4、详细设计实现程序模块的具体算法。int FCFS()先来先服务算法int i;int temp_time=0;temp_time=Process0.ArrivalTime;for(i=0;i<N;i+)Processi.ServiceTime =temp_time;Processi.Fi nishTime =Processi.ServiceTime+Processi.WholeTime;Processi.r un _flag =1; temp_time=Proc

6、essi.Fi nishTime ;Processi.order=i+1;return 0; int SJF()短作业优先算法int temp_time=0;int i=0,j;int nu mber_schedul,temp_c oun ter;double run _time;run _time=Processi.WholeTime;j=1;while(j<N)&&(Processi.ArrivalTime=Processj.ArrivalTime ) if(Processj.WholeTime <Processi.WholeTime )run _time=Pr

7、ocessi.WholeTime ;i=j;j+;nu mber_schedul=i;Processnumber_schedul.ServiceTime=Processnumber_schedul.ArrivalTime ;Process nu mber_schedul.F ini shTime=Process nu mber_schedul.ServiceTime+Process nu mber_schedul.WholeTime ;Process nu mber_schedul.ru n_flag=1; temp_time=Process nu mber_schedul.Fi nishTi

8、me;Process nu mber_schedul.order=1;temp_c oun ter=1; while(temp_co un ter<N)for(j=0;j<N;j+) if(Processj.ArrivalTime<=temp_time )&&(!Processj.run _flag) 一 一run _time=Processj.WholeTime ;nu mber_schedul=j;break;for(j=0;j<N;j+)if(Processj.ArrivalTimev=temp_time )&&(!Processj

9、.run _flag) if(Processj.WholeTime<ru n_time)run _time=Processj.WholeTime ;nu mber_schedul=j; _Process nu mber_schedul.ServiceTime =temp_time;Process nu mber_schedul.F ini shTime =Process nu mber_schedul.ServiceTime+Process nu mber_schedul.WholeTime ;Process nu mber_schedul.r un _flag =1;temp_time

10、=Process nu mber_schedul.Fi nishTime ;temp_co un ter+;Process nu mber_schedul.order=temp_co un ter; 一 一return 0;5、调试分析1调试过程中遇到的问题以与解决方法,设计与实现的回顾讨论和分析在调试的过程中,所出现问题最集中的地方在于算法的设计和编译,FCFS算法相对简单一些,只要根据进程到达的时间按照顺序依次执行计算即可,而SJF算法由于要涉与每个进程的到达时间和服务时间,并且要进展比拟和排序,所 以在算法上有一定难度,开始时没有判断进程是否到达,导致短进程优先算法 结果错误,后来加上判

11、断语句后就解决了该问题。2算法的性能分析即使用户输入的进程到达时间没有先后顺序到达也能准确计算出结果。加循环判断各个进程的到达时间先后,组成一个有序的序列3经验体会通过本次实验,深入理解了先来先服务和短作业优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆6、用户使用说明程序的使用说明,列出每一步的操作步骤2其他数1fFCFS算法提交时1!SJF算法提交时报错继续输入1进展算1法运算进展算法运算1!按格式按格式输出结输出结果1果17、附录带注释的源程序,注释应清楚具体*头文件*#in clude<iostream> #defi ne MaxNum 100 struct

12、 Process_structint Number;/ 进程编号char NameMaxNum; 进程名字int ArrivalTime;/ 到达时间int StartTime;/ 开始时间int order;/ 运行次序int ServiceTime;/服务时间int Fi ni shTime;/完毕时间int WholeTime;/ 周转时间int run_flag;调度标志double WeightWholeTime;/ 带权周转时间double AverageWT_FCFS,AverageWT_SJF; / 平均周转时间 double AverageWWT_FCFS,AverageWW

13、T_SJF 平均带权周转时间 ProcessMaxNum;int N;/实际进程个数int FCFS();/ 先来先服务int SJF();/短作业优先int FCFS()/先来先服务算法int i;int temp_time=O;当前时间temp_time=Process0.ArrivalTime;for(i=0;i<N;i+)Processi.StartTime =temp_time;Processi.Fi nishTime=Processi.StartTime+Processi.ServiceTime;Processi.r un _flag =1;temp_time=Process

14、i.Fi nishTime ;Processi.order=i+1;return 0;int SJF()短作业优先算法int temp_time=0;int i=0,j;int number_schedul,temp_cou nter;/进程编号,当前已执行进程个数double run _time;run _time=Processi.ServiceTime;j=1;while(j<N)&&(Processi.ArrivalTime=Processj.ArrivalTime)/ 判断是否有两个进程是否同时到达if(Processj.ServiceTime <Proc

15、essi.ServiceTime )run _time=Processi.ServiceTime ;i=j;j+;/查找下一个被调度的进程/对找到的下一个被调度的进程求相应的参数nu mber_schedul=i;Process nu mber_schedul.StartTime=Process nu mber_schedul.ArrivalTimeProcess nu mber_schedul.Fi nishTime=Process nu mber_schedul.StartTime+Process nu mber_schedul.ServiceTime ;Process nu mber_s

16、chedul.ru n_flag=1;temp_time=Process nu mber_schedul.Fi nishTime;Process nu mber_schedul.order=1;temp_co un ter=1;while(temp_co un ter<N)for(j=0;j<N;j+)if(Processj.ArrivalTime<=temp_time )&&(!Processj.run _flag) 一 一run _time=Processj.ServiceTime ;nu mber_schedul=j;break;for(j=0;j<

17、;N;j+)if(Processj.ArrivalTimev=temp_time )&&(!Processj.run _flag) if(Processj.ServiceTime<ru n_time)run _time=Processj.ServiceTime ;nu mber_schedul=j; _Process nu mber_schedul.StartTime =temp_time;Process nu mber_schedul.F ini shTime=Process nu mber_schedul.StartTime+Process nu mber_sched

18、ul.ServiceTime ;Process nu mber_schedul.r un _flag =1;temp_time=Process nu mber_schedul.Fi nishTime ;temp_co un te 叶+;Process nu mber_schedul.order=temp_c oun ter; 一 一return 0;*主函数 *#in clude<iostream>#i nclude"FCFS_SJF.h" using n amespace std;int Pi nput();进程参数输入int Poutput();调度结果输出

19、void mai n()int optio n; Pin put();cout<<"1 FCFS"«e ndl;cout<<"2SJF"«e ndl;cout<<"0 退出"<<e ndl;coutvv"请选择算法:"cin> >opti on;switch(opti on)case 0:cout«"运行完毕"<<endl;break;case 1:coutvv"对进程用先来先服务调度

20、"<<endl;FCFS();Poutput();break;case 2:coutvv"对进程用短作业优先调度"<<endl;SJF();Poutput();break;int Pin put()进程参数输入int i;coutvv"请输入进程数目:"loop:c in>>N;if(Nv=0 | N>100)coutvv"进程个数不合要求,请重新输入:goto loop;for(i=0;ivN;i+)coutvv"* *vve ndl;H.coutvv"请输入第"

21、;vvi+1vv"个进程的名字cin> >Processi.Name; coutvv"到达时间:"on e:ci n> >Processi.ArrivalTime;if(Processi.ArrivalTimevO | Processi.ArrivalTime>100) coutvv"到达时间不合要求,请重新输入:"goto one;cout«"运行时间:"Two:ci n> >Processi.ServiceTime;if(Processi.ServiceTime<

22、0 | Processi.ServiceTime>100)coutvv"运行时间不合要求,请重新输入:"goto Two;Processi.StartTime =0;Processi.Fi nishTime=0;Processi.WeightWholeTime =0;Processi.order=0;Processi.r un _flag=0; _return 0;int Poutput() 进程参数输出int i;double turn_roun d_time=0,f1=0,w=0;coutvv"进程名字到达时间运行时间开始运行时间完毕时间执行顺序周转时间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论