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

下载本文档

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

文档简介

1、实验概述:【实验目的及要求】理解并掌握处理机调度算法【实验原理】基于先来先服务调度和最短作业优先调度算法思想用C语言编程实现【实验环境】(使用的软件)Visual C+6.0实验内容:本实验模拟在单处理机情况下处理机调度,用C语言编程实现先来先服务和最短作业优先调度算法。【实验方案设计】FCFS流程图:SJF流程图:试验总设计流程图:输入选择数以选择调度算法报错继续输数先按提交时间排序按照提交时间排序1FCFS算法2SJF算法其他数进程等待时间进程开始运行时间进程提交时间(即进程处于就绪态时间) 输入作业个数、作业号、提交时间、运行时间进程周转时间进程结束时间进程提交时间 再按最短运行时间排序

2、计算各作业参数:开始时间,结束时间等待时间,周转时间 并输出 并输出计算各作业参数:开始时间,结束时间等待时间,周转时间 并输出【实验过程】(实验步骤、记录、数据、分析)测试用例1:屏幕显示:Please input the total number of jobs输入:4 <回车>屏幕显示:Please input job number, submit time and run time 输入:1 9.0 0.2<回车>2 8.5 0.5<回车>3 8.0 1.0<回车>4 9.1 0.1<回车>屏幕显示:What kind of

3、algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF.输入:3 <回车>屏幕显示:You have input a wrong number, please input again.输入:1<回车>屏幕输出结果: submit run starting final wait turnaround3 8.0 1.0 8.0 9.0 0.0 1.02 8.5 0.5 9.0 9.5 0.5 1.01 9.0 0.2 9.5 9.7 0.5 0.74 9.1 0.1 9.7 9.8 0

4、.6 0.7屏幕显示:The average turnaround time is 0.85What kind of algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF, or 0 to exit.测试数据二: submit run 1 6 0.52 5 0.93 6.3 0.1FCFS和SJF算法结果一样:submit run starting final wait turnaround2 5 0.9 5 5.9 0 0.91 6 0.5 6 6.5 0 0.53 6.3 0.1 6.5 6.6 0

5、.2 0.3The average turnaround time is 0.567测试数据三: submit run1 5 0.22 4.2 0.33 5.1 0.34 5.2 0.1FCFS:submit run starting final wait turnaround2 4.2 0.3 4.2 4.5 0 0.31 5 0.2 5 5.2 0 0.23 5.1 0.3 5.2 5.5 0.1 0.44 5.2 0.1 5.5 5.6 0.3 0.4The average turnaround time is 0.325SJF:submit run starting final wai

6、t turnaround2 4.2 0.3 4.2 4.5 0 0.31 5 0.2 5 5.2 0 0.24 5.2 0.1 5.2 5.3 0 0.13 5.1 0.3 5.3 5.6 0.2 0.5The average turnaround time is 0.275源程序:#include "stdio.h"#include"stdlib.h"#include"string.h"#define M 50struct sjfint jobnumber;float submittime;float runtime;float s

7、tarttime;float finishtime;float waittime;float turnaroundtime;temp;static struct sjf stM;void input(struct sjf *p,int N)int i;printf("Please input the job number,submit time and run time:nFor exmple:1 8.5 2.0n");for(i=0;i<N;i+) scanf("%d%f%f",&pi.jobnumber,&pi.submitti

8、me,&pi.runtime); void print(struct sjf *p,int N)int k;float h,g;printf("run order:");printf("%d",p0.jobnumber); for(k=1;k<N;k+) printf("->%d",pk.jobnumber); printf("nThe process's information:n"); printf("njobnumtsubmittruntstarttfinaltwaitt

9、turnaroundn"); for(k=0;k<N;k+) h+=pk.turnaroundtime; printf("%dt%-.1ft%-.1ft%-.1ft%-.1ft%-.1ft%-.1ftn",pk.jobnumber,pk.submittime,pk.runtime,pk.starttime,pk.finishtime,pk.waittime,pk.turnaroundtime); g=h/N; printf("nThe average turnaround time is %-.2fn",g); /*按提交时间从小到大排序

10、*/void sort1(struct sjf *p,int N) int i,j; for(i=0;i<N;i+) for(j=0;j<=i;j+) if(pi.submittime<pj.submittime) temp=pi; pi=pj; pj=temp; /*运行*/void deal(struct sjf *p,int N)int k;for(k=0;k<N;k+)if(k=0) pk.starttime=pk.submittime; pk.finishtime=pk.submittime+pk.runtime; else if(pk.submittime&

11、gt;pk-1.finishtime) pk.starttime=pk.submittime; pk.finishtime=pk.submittime+pk.runtime;else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.runtime; for(k=0;k<N;k+)pk.turnaroundtime=pk.finishtime-pk.submittime; pk.waittime=pk.starttime-pk.submittime; void sort2(struct sjf *p,int N)

12、int next,m,n,k,i;float min;sort1(p,N);for(m=0;m<N;m+) i=0;if(m=0)pm.finishtime=pm.submittime+pm.runtime; else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; for(n=m+1;n<N;n+) if(pn.submittime<=pm.finishtime)/*判断内存中每

13、次完成之后又多少到达的进程*/ i+; min=pm+1.runtime; next=m+1; for(k=m+1;k<m+i;k+)/*找出到达后的进程中运行时间最小的进程*/ if(pk+1.runtime<min) min=pk+1.runtime; next=k+1; temp=pm+1; pm+1=pnext; pnext=temp; deal(p,N); print(p,N); void main()int N,i;printf("Please input the total number of jobs:");scanf("%d"

14、;,&N);input(st,N);loop2:printf("What kind of algorithm do you want? Please input 1 to select FCFS, or 2 to select SJF or 0 to exit:");loop:scanf("%d",&i);if(i=0)exit(1);else if(i=1)sort1(st,N);deal(st,N);print(st,N);goto loop2;else if(i=2) sort2(st,N);goto loop2; else pri

15、ntf("You have input a wrong number, please input again:"); goto loop; 【结论】(结果)测试1:测试二:测试三:【小结】实验中产生的错误及原因分析:测试用例1的结果:错误1:错误解决方式:主要是子函数sort2()中出的错:i的作用域,程序修改:将原来:int next,m,n,k,i=0;float min;sort1(p,N);for(m=0;m<N;m+) 改为:int next,m,n,k,i;float min;sort1(p,N);for(m=0;m<N;m+) i=0;测试用例2的

16、结果:错误1:错误原因:未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:解决方法:将原来的:else pm.finishtime=pm-1.finishtime+pm.runtime; 修改为:else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; 测试用例3的结果:错误1:错误分析:同2 一样,未在子函数sort()中未考虑到“提交时间(submittime)大于上个进

17、程的结束时间”的情况:解决方法:将原来的:else pm.finishtime=pm-1.finishtime+pm.runtime; 修改为:else if(pm.submittime>pm-1.finishtime) pm.finishtime=pm.submittime+pm.runtime;else pm.finishtime=pm-1.finishtime+pm.runtime; 实验的体会及收获:通过这次试验,我对处理机的调度算法特别是FCFS和SJF有了更深的理解,而且锻炼了我的思维能力,使我能更全面地思考问题,以后还需要多做些这方面的练习。试验不足之处:试验未考虑同一时间

18、提交多个进程的情况,如:测试数据: submit run1 7 0.22 7.2 0.53 7 0.1结果应该是:FCFS:submit run start final wait turnaround1 7 0.2 7.0 7.5 0.0 0.53 7 0.1 7.5 7.6 0.5 0.62 7.2 0.5 7.6 7.8 0.4 0.6The average turnaround time is 0.57.SJF:Jobnum submit run starting final wait turnaround3 7 0.1 7.0 7.1 0.0 0.11 7 0.5 7.1 7.6 0.1 0.62 7.2 0.2 7.6 7.8 0.6 0.6The average turnaround time is 0.43.而程

温馨提示

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

评论

0/150

提交评论