操作系统实验-先来先服务调度算法和短作业优先_第1页
操作系统实验-先来先服务调度算法和短作业优先_第2页
操作系统实验-先来先服务调度算法和短作业优先_第3页
操作系统实验-先来先服务调度算法和短作业优先_第4页
操作系统实验-先来先服务调度算法和短作业优先_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

实验报告 FJF【实验名称】进程调度算法FJF【实验目的】在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数概。调。

】法

务采用,后。法

业程度1/10

行。【实验内容】问题分析输入:进程的名称、到达时间、服务时输出:进程的完成时间、周转时间、带权周转时

其中对于任意进程有

周转时完成时到达时

带权周转时周转时服务时

因此,两个算法的关键是求完成时数据结构及函数说明时体]

e

e

e

e

e

。组明面面////

求完成时间算法2/10

11FCFS初始化结构体数列,当前时间0排序当前进=进程当前时=程结束时+1进程到达时间间等于当前时间间等于开始时+运行时间扫描完毕22SJF当前时=间+1算法流程图3/10

初始化结构体数前时间为0为0进程当前时间>达时间为0=当前时间结束时间=当前时间+运行书剑当前进程标志为个进程当前进程=进程当前时间=间+1为14/10

程序#include<stdio.h>structfcfs

/定义进程的结构体{进程名floatarrivetimecharname[10进程名floatarrivetime。//到达时间

服务时间

float。//服务时间

floatstarttime。///开始时间

。/完成时间。/完成时间

floazztime周转时间

//带权周转时间floatdqzztime//带权周转时间。

floatarrivetime=0,servicetime=0,starttime=0,f。fcfsa[100]。fcfsa[100]。

/定义先来先服务算法进程的最大数量输入函数voidFinput(fcfs*p,intN)//输入函数{{inti。。i<=N-1。i++)服务时间。i<=N-1。i++)服务时间 输出函数。输入进程的名称到达时间服务时间(例如0。

for(i=0{输入第%进程的名称到达时间}}/输出函数voidFPrint(fcfs*p,intN)//{intk执行顺序 。。。k<N。k++)for(k=1。k<N。k++){。}带权周转时间带权周转时间 。100。进程名 到达时间 服务时间 开始时间 间 周转时间 带权周转时间5/10

。k<=N-1。k++)for(k=0。k<=N-1。k++){。p[k].finishtime,p[k].zztime,p[k].dqzztim。}}按到达时间排序,先到达排在前面voidFsort(fcfs*p,intN)//按到达时间排序,先到达排在前面{{for(inti=0。i++)for(intj=0。i++)for(intj=0。j<=i。j<=iif(p[i].arrivetime<p[j].ar果先到达就排在前面{fcfstemptemp=p[i]p[i]=p[j]p[j]=temp}运行结果voidF_method(fcfs*p,intN){运行结果voidF_method(fcfs*p,intN){intk。。

for(k=0。k<=N-1。k<=N-1{if(k==0){//开始时间等于到达时间

p[k].finishtime=p[k].arriv/结束时间等于到达时间加上服务时间}else{。//开始时间。//开始时间一个一个进程的完成时间

p[k].finishtime=p[k].start/结束时间开始时间加上现在进程的服务时间}}。k<=N-1。k++)//求每个进程的信息。k<=N-1。k++)//求每个进程的信息{。//。//6/10

时间完成时间到达时

。//。//周转时间周转时间服务时间}}程序{。

int。

intarrive=65535arrive=65535的进程。//。//程intiintifcfb[100进行排序。//置。//置100个标志位for(i=0。i<Nfor(i=0。i<N。

for(i=0。

for(i=0。i<N。i<Nif(p[i].arrivetime<arrive)。。num=i}b[0]=p[num]。。

state[num]=1。

。b[0].finishtime=b[0].arrivetime+b[。ininj=0for(intk=1。k<N。k<N。

for(i=。i++){if(state[i]==1||p[i].arriveti果遇到已排序或者未到达的进程跳过continueelseif(p[i].servicetime<

{

。min_serive=p[i].servic。num=i}}state[num]=1。/找到合适的进程并赋值到B

。b[++j]=p[num]。7/10

b[j].starttime=b[j-1].finishtime。

。b[j].finishtime=b[j-1].finishtb[j].starttime=b[j-1].finishtime。}。j<=N-1。j++)//。//。。j<=N-1。j++)//。//。//。j++)p[j]=b[j]。j<N对每个进程排序

F_method(p,N)。//for(j=0求每个进程的信息{b[j].zztime=b[j].finishtime-转时间完成时间到达时间b[j].dqzztime=b[j].zztime/b[权周转时间周转时间服务时间}for(j=0。}/先来先服务voidFCFS(fcfs*p,intN){Fsort(p,N)。。

FPrint(p,N)。}voidSJF(fcfs*p,intN){。FPrint(p,N)。FPrint(p,N)。}主函数intmain()//主函数{。。输入进程数 。。

先来先服务 。。FCFS(a,N)。。。

短作业优先短作业优先 。。

return0。

return0。}8/10

【小结或讨论】1能实现的功能输入进程个数Num务时务时间ServiceTime[i]每个进程到达时间ArrivalTime[i]每个进程到达时间ArrivalTime[i]采用先来先服务FCFS或者短作业优先SJF法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计N进程的平均周转时间和平均带权周转时间、FC法相对于S法来说,比较简单,在FC法中,主要用到的是队列,按照作业的到达时间来进行排序排序算法、S法中就需要考虑到很多的因素,因为时刻到达的作业肯定第一个执行然后再考虑剩余的作业的服务时间以决定哪一个作业先执行但是这是在确保所有剩余的作业都处于就绪状态的情况下如若不然还要考虑每一个作业执行完后,有哪些作业进入了排队状态9/10

、SJ算法中还要考虑到如若同一时刻进入了多个作业,还要将这若干个作业按照服务时间进行排序,再考虑执行情况还是SJF算法,关键都是求完成时间FCFS还是SJF算法,关键都是求完成时间FCFS算法的顺序是由服务时间决定的的顺序是由到达

温馨提示

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

评论

0/150

提交评论