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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

1、先来先服务FCFS和短作业优先SJF进程调度算法计算机操作系统实验报告班级:过控12-01姓名:邹锦程学号:541213470163实验一 先来先服务FCFS和短作业优先SJF进程调度算法一、 实验目的通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。二、 实验内容设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, ,Tn时刻到达系统,它们需要的服务时间分别为S1, ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的

2、平均周转时间和平均带权周转时间。三、 要求程序要求:1)进程个数n;每个进程的到达时间T1, ,Tn和服务时间S1, ,Sn;选择算法1-FCFS,2-SJF。2)要求采用先来先服务FCFS和短作业优先SJF分别调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等;4)输出:要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。实验要求1)上机前认真复习FCFS和SJF进程调度调度算法,熟悉进程调度的执行过程;2

3、)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)。四、 源程序#include#includetypedef struct PCB /定义进程控制块 char name10; /进程名 char state; /运行状态 int ArriveTime; /到达时间 int StartTime; /进程开始时间 int FinishTime; /进程结束时间 int ServiceTime; /服务时间 float WholeTime; /周转时间 float WeightWholeTime; /带权

4、周转时间 double AverageWT_FCFS; /平均周转时间 double AverageWWT_FCFS; /带权平均周转时间 struct PCB *next; /指向下个进程pcb;double x=0,y=0;int i;int time;int n;pcb *head=NULL,*p,*q;void run_FCFS(pcb *p1) /运行未完成的进程 time=p1-ArriveTimetime?p1-ArriveTime:time; p1-StartTime=time; printf(n 时刻:%d,当前开始运行作业%snn,time,p1-name); time+=

5、p1-ServiceTime; p1-state=T; p1-FinishTime=time; p1-WholeTime=p1-FinishTime-p1-ArriveTime; p1-WeightWholeTime=p1-WholeTime/p1-ServiceTime; x+=p1-WholeTime; y+=p1-WeightWholeTime; p1-AverageWT_FCFS=p1-WholeTime/n; p1-AverageWWT_FCFS=p1-WeightWholeTime/n; printf( 到达时间 开始时间 服务时间 完成时间 周转时间 带权周转时间n); prin

6、tf(%6d %10d %10d %8d %10.1f %10.2f n,p1-ArriveTime,p1-StartTime,p1-ServiceTime,p1-FinishTime,p1-WholeTime,p1-WeightWholeTime); printf(n平均周转时间 平均带权周转时间 n); printf( %10.2f %10.2fn ,p1-AverageWT_FCFS,p1-AverageWWT_FCFS); void FCFS()/找到当前未完成的进程 int i; p=head; for(i=0;istate=F) q=p; /标记当前未完成的进程 run_FCFS(

7、q); p=p-next; void getInfo() /获得进程信息并创建进程 int num; printf(n进程个数:); scanf(%d,&n); for(num=0;numname,&p-ArriveTime,&p-ServiceTime); if(head=NULL) head=p;q=p;time=p-ArriveTime; if(p-ArriveTime ArriveTime; q-next=p; p-StartTime=0; p-FinishTime=0; p-WholeTime=0; p-WeightWholeTime=0; p-next=NULL; p-state=

8、F; q=p; int main() printf(先来先服务FCFS算法模拟n); getInfo(); p=head; FCFS(); #include#include #include#define MaxNum 100 using namespace std; struct Process_struct int Number; /进程编号 char NameMaxNum; /进程名称 int ArrivalTime; /到达时间 int ServiceTime; /开始运行时间 int FinishTime; /运行结束时间 int WholeTime; /运行时间 int run_f

9、lag; /调度标志 int order; /运行次序 double WeightWholeTime; /周转时间 double AverageWT_FCFS,AverageWT_SJF; /平均周转时间 double AverageWWT_FCFS,AverageWWT_SJF; /平均带权周转时间 ProcessMaxNum; int N; /实际进程个数int SJF(); /短作业优先 int SJF() /短作业优先算法 int temp_time=0; /当期那时间 int i=0,j; int number_schedul,temp_counter; /进程编号,当前已执行进程个

10、数 float run_time; run_time=Processi.WholeTime; j=1; while(jN)&(Processi.ArrivalTime=Processj.ArrivalTime) /判断是否有两个进程同时到达 if(Processj.WholeTimeProcessi.WholeTime) run_time=Processi.WholeTime; i=j; j+; /查找下一个被调度的进程 /对找到的下一个被调度的进程求相应的参数 number_schedul=i; Processnumber_schedul.ServiceTime=Processnumber_

11、schedul.ArrivalTime; Processnumber_schedul.FinishTime=Processnumber_schedul.ServiceTime+Processnumber_schedul.WholeTime; Processnumber_schedul.run_flag=1; temp_time=Processnumber_schedul.FinishTime; Processnumber_schedul.order=1; temp_counter=1; while(temp_counterN) for(j=0;jN;j+) if(Processj.Arriva

12、lTime=temp_time)&(!Processj.run_flag) run_time=Processj.WholeTime; number_schedul=j; break; for(j=0;jN;j+) if(Processj.ArrivalTime=temp_time)&(!Processj.run_flag) if(Processj.WholeTimerun_time) run_time=Processj.WholeTime; number_schedul=j; /查找下一个被调度的进程 /对找到的下一个被调度的进程求相应的参数 Processnumber_schedul.Ser

13、viceTime=temp_time; Processnumber_schedul.FinishTime=Processnumber_schedul.ServiceTime+Processnumber_schedul.WholeTime; Processnumber_schedul.run_flag=1; temp_time=Processnumber_schedul.FinishTime; temp_counter+; Processnumber_schedul.order=temp_counter; return 0;int Pinput(); /进程参数输入 int Poutput();

14、 /调度结果输出 main() system(cls); int option; printf( *主菜单*n); printf( * 1 使用短作业优先 *n); printf( * 0 退出 *n); printf( *n); / system(color 1f); scanf(%d,&option); switch(option) case 0: printf(运行结束。n); break; case 1: printf(对进程用短作业优先调度。nn); Pinput(); SJF(); Poutput(); break; int Pinput() /进程参数输入 int i; prin

15、tf(请输入进程个数:n); scanf(%d,&N); for(i=0;iN;i+) printf(*n); printf(请输入一个进程:n,i+1); printf(请输入进程名称:n); scanf(%s,Processi.Name); printf(请输入到达时间:n); scanf(%d,&Processi.ArrivalTime); printf(请输入服务时间:n); scanf(%d,&Processi.WholeTime); Processi.ServiceTime=0; Processi.FinishTime=0; Processi.WeightWholeTime=0;

16、Processi.order=0; Processi.run_flag=0; system(cls); return 0; int Poutput() /调度结果输出 int i; float turn_round_time=0,f1,w=0; printf( 进程名称 到达T 运行T 开始运行T 结束T 执行顺序 周转T 带权周转Tn); for(i=0;iN;i+) Processi.WeightWholeTime=Processi.FinishTime-Processi.ArrivalTime; f1=Processi.WeightWholeTime/Processi.WholeTime

17、; turn_round_time+=Processi.WeightWholeTime; w+=f1; printf(时刻%d :,Processi.ServiceTime,Processi.Name); printf( %s %d %d %d %d %d %f %fn,Processi.Name,Processi.ArrivalTime,Processi.WholeTime,Processi.ServiceTime,Processi.FinishTime,Processi.order,Processi.WeightWholeTime,f1); printf(average_turn_round_timer=%fn,turn_round_time/N); printf(weight_average_turn_round_timer=%fn,w/N); return 0; 五、 结果六 感悟FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。SJF在实际情况中,占很大比例,为了能够使他们比长作业优先执行,而产生了短作业。

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

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