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

下载本文档

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

文档简介

1、学号P71514032 专业计算机科学与技术 姓名实验日期 教师签字 成绩实验报告【实验名称】进程调度算法FCFS、FJF【实验目的】 在多道程序或多任务系统中,系统同时处于就绪态的进程有若干个。也就是说能运行的进程数远远大于处理机个数,为了使系统中的各进程能有条不紊的运行,必须选择某种调度策略,以选择一进程占用处理机,所以,要求使用某一种编程语言设计实现模拟单处理机调度的算法,以巩固和加深处理机调度的概念。本实验要求采用先来先服务的调度算法和短作业优先的调度算法编写和调试一个简单的进程调度程序。通过本实验可以加深理解进程调度、进程队列的概念。【实验原理】FCFS调度算法先来先服务(FCFS)

2、调度算法是一种最简单的调度算法。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。SJF调度算法 短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。【实验内容】问题分析输入:进程的名称、到达时间、服务时间输出:进程的完成时间、周转时间、带权周转时间其中对于任意进程有:周转时间=完成时间-到达时间带权周转时间=周转

3、时间/服务时间因此,两个算法的关键是求完成时间l 数据结构及函数说明使用的数据结构是数组,进程的名称、到达时间、服务时间、进程的完成时间、周转时间、带权周转时间分别对应于一个数组,这些数组长度相等.struct fcfs/定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float servicetime; /服务时间 float starttime;/开始时间 float finishtime;/完成时间 float zztime;/周转时间 float dqzztime;/带权周转时间;fcfs a100; /结构体数组函数说明void

4、Finput(fcfs *p,int N) ; /输入函数,初始化void Fsort(fcfs *p,int N) ; /按到达时间排序,先到达排在前面void Fsort2(fcfs *p,int N) ; /按进程大小排序,先到达排在前面void F_method(fcfs *p, int N) /先来先服务算法 void F_method2(fcfs *p,int N) /短作业优先程序 void SJF(fcfs *p,int N); / 短作业优先void FCFS(fcfs *p,int N); /先来先服务void SJF(fcfs *p,int N) /短作业优先void F

5、Print(fcfs *p,int N) /输出函数求完成时间算法1) FCFS算法流程图2) SJF算法流程图l 程序#include <stdio.h>struct fcfs/定义进程的结构体 char name10; /进程名 float arrivetime; /到达时间 float servicetime; /服务时间 float starttime;/开始时间 float finishtime;/完成时间 float zztime;/周转时间 float dqzztime;/带权周转时间;float arrivetime=0,servicetime=0,starttim

6、e=0,finishtime=0,zztime=0,dqzztime=0;fcfs a100;/定义先来先服务算法进程的最大数量void Finput(fcfs *p,int N) /输入函数 int i; printf("输入进程的名称、到达时间、服务时间:(例如: x 0 100)n"); for(i=0; i<=N-1; i+) printf("输入第%d进程的名称、到达时间、服务时间:n",i+1); scanf("%s%f%f",&,&pi.arrivetime,&pi.servi

7、cetime); /输出函数void FPrint(fcfs *p,int N)/输出函数 int k; printf("n执行顺序:n"); printf("%s",); for(k=1; k<N; k+) printf("-%s",); printf("n进程名t到达时间t服务时间t开始时间t结束时间t周转时间t带权周转时间nn"); for(k=0; k<=N-1; k+) printf("%st%-.2ftt%-.2ftt%-.2ftt%-.2ftt%-.2

8、ftt%-.2fttnn",,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); void Fsort(fcfs *p,int N) /按到达时间排序,先到达排在前面 for(int i=0; i<=N-1; i+) for(int j=0; j<=i; j+) if(pi.arrivetime<pj.arrivetime)/进行排序,如果先到达就排在前面 fcfs temp; temp=pi; pi=pj; pj=temp; /运行结果void

9、 F_method(fcfs *p, int N) int k; for(k=0; k<=N-1; k+) if(k=0) pk.starttime=pk.arrivetime;/如果是第一个进程,开始时间等于到达时间 pk.finishtime=pk.arrivetime+pk.servicetime;/结束时间等于到达时间加上服务时间 else pk.starttime=pk-1.finishtime; /开始时间=上一个一个进程的完成时间 pk.finishtime=pk.starttime+pk.servicetime;/结束时间=开始时间加上+现在进程的服务时间 for(k=0

10、; k<=N-1; k+) /求每个进程的信息 pk.zztime=pk.finishtime-pk.arrivetime; /周转时间=完成时间-到达时间 pk.dqzztime=pk.zztime/pk.servicetime; /带权周转时间=周转时间/服务时间 void F_method2(fcfs *p,int N) /短作业优先核心程序 int num; int arrive=65535; /寻找最早到达的进程 int min_serive=65535; /寻找最小服务时间进程 int i; fcfs b100; /新建一个,进行排序 int state100;/设置100个

11、标志位 for( i=0; i<N; i+) statei=0; for(i=0; i<N; i+) if(pi.arrivetime<arrive) arrive=pi.arrivetime; num=i; b0=pnum; statenum=1; b0.finishtime=b0.arrivetime+b0.servicetime; int j=0; for(int k=1; k<N; k+) min_serive=65535; for(i=0; i<N; i+) if(statei=1|pi.arrivetime>bj.finishtime)/如果遇到

12、已排序或者未到达的进程跳过 continue; else if(pi.servicetime<min_serive) min_serive=pi.servicetime; num=i; statenum=1; /找到合适的进程并赋值到B b+j=pnum; bj.starttime=bj-1.finishtime; bj.finishtime=bj-1.finishtime+bj.servicetime; for(j=0; j<=N-1; j+) /求每个进程的信息 bj.zztime= bj.finishtime- bj.arrivetime; /周转时间=完成时间-到达时间 b

13、j.dqzztime= bj.zztime/ bj.servicetime; /带权周转时间=周转时间/服务时间 for(j=0; j<N; j+) pj=bj;/先来先服务void FCFS(fcfs *p,int N) Fsort(p,N);/对每个进程排序 F_method(p,N); FPrint(p,N);void SJF(fcfs *p,int N) F_method2(p,N); FPrint(p,N);int main() /主函数 int N; printf("输入进程数:"); scanf("%d",&N); Finpu

14、t(a,N); printf("先来先服务n"); FCFS(a,N); printf("nnn"); printf("短作业优先n"); SJF(a,N); return 0;【小结或讨论】1.能实现的功能输入进程个数Num,每个进程到达时间ArrivalTimei,服务时间ServiceTimei。采用先来先服务FCFS或者短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计Num个进程的平均周转时间和平均带权周转时间。2、FCFS算法相对于SJF算法来说,比较简单,在FCFS算法中,主要用到的是队列,按照作业的到达时间来进行排序排序算法。3、SJF算法中就需要考虑到很多的因素,因为0时刻到达的作业肯定第一个执行,然后再考虑剩余的作业的服务时间以决定哪一个作业先执行,但是这是在确保所有剩余的作业都处于就绪状态的情况下。如若不然,还要考虑每一个作业执行完后,有哪些作业进入了排队状态。4、SJF算法中还要考虑到如若同一时刻进入了多个作业,还要将这若干个作业按照服务时间进行排序,再考虑执行情况。5、无论是FCFS还是SJF算法,关键都是求完成时间。FCFS算法执行进程的顺序是由到达时间的先后决定的,SJF算法的顺序是由服务时间决

温馨提示

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

评论

0/150

提交评论