单道批处理系统设计一个作业调度模拟程序_第1页
单道批处理系统设计一个作业调度模拟程序_第2页
单道批处理系统设计一个作业调度模拟程序_第3页
单道批处理系统设计一个作业调度模拟程序_第4页
单道批处理系统设计一个作业调度模拟程序_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、操 作 系 统课程设计说明书题目:为单道批处理系统设计一个作业调度模拟程序 院 系: 计算机科学与工程学院 专业班级: 计算机 学 号: 学生姓名: 指导教师: 计算机科学与工程学院 计算机科学与技术系 学 号学生姓名专业班级计算机09-3班设计题目为单道批处理系统设计一个作业调度模拟程序设计技术参数使用Microsoft Visual C+ 6.0编辑器编写,利用c语言开发的基于单道批处理系统的一个作业调度模拟程序,完成该课程设计需要掌握先来先效劳FCFS,最短作业优先SJF、响应比高者优先HRN的调度算法。设计要求作业调度算法分别采用先来先效劳FCFS,最短作业优先SJF、响应比高者优先H

2、RN的调度算法。对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比拟各种算法的优缺点。工作量1 源代码程序不少于400行2 附有各种图示4张3 课程设计任务书不少于3500字工作计划1.10月23日-10月28日:查询相关资料,初步确定课程设计的语言,进一步明确其所要实现的功能2.10月29日-11月10日:根据所学知识及搜集的相关信息进行概要设计3.11月11日-11月25日:进行详细设计,完成相应源代码的编写4.11月26日-12月2日:对源代码进行调试、运行5.12月3日-12月10日:完善课程设计说明书并提

3、交参考资料1 梁小丹,梁红兵,哲凤屏,汤子赢计算机操作系统.第三版西安:西安电子科技大学出版社,200722 袁捷、沈俊、 袁晴晴. 计算机操作系统根底与应用.第二版.北京: 清华大学出版社,2021.073杨振山、龚培增. 计算机操作系统教程.第三版. 北京:清华大学出版社, 2007.94谭浩强. C程序设计.第四版.北京:清华大学出版社, 2021.065王敬华,林萍,张清国等C语言程序设计教程.第二版北京:清华大学出版社,202110指导教师签字系主任签字2011年9月 26日学生姓名: 学号: 专业班级: 计算机09-3班 设计题目: 为单道批处理系统设计一个作业调度模拟程序 指导教

4、师评语:成绩: 指导教师: 年 月 日安徽理工大学课程设计论文成绩评定表摘要 本次课程设计要求用高级语言编写和调试一个单道批处理系统的作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。作业调度算法分别采用先来先效劳FCFS,最短作业优先SJF、响应比高者优先HRN的调度算法。对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比拟各种算法的优缺点。 关键词:作业调度,先来先效劳FCFS,最短作业优先SJF,响应比高者优先HRNI目 录1需求分析11.1问题描述11.2功能分析及描述11.3

5、 开发语言选择12概要设计22.1功能模块划分22.2功能模块的描述22.3功能模块结构图示23详细设计43.1作业控制块JCB的数据结构类型43.2先来先效劳算法设计43.3最短作业优先算法设计53.4响应比高者优先算法设计64代码实现84.1高响应比算法84.2最短作业优先算法84.3先来先效劳算法95运行结果与分析115.1选择操作的界面115.2选择先来先效劳算法进行作业调度115.3选择最短作业优先算法进行作业调度125.4选择高响应比优先算法进行作业调度136结束语157附录16参考文献II操作系统课程设计说明书1需求分析 1.1问题描述为单道批处理系统设计一个作业调度模拟程序。作

6、业调度算法分别采用先来先效劳FCFS,最短作业优先SJF、响应比高者优先HRN的调度算法。对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比拟各种算法的优缺点。1.2功能分析及描述在批处理系统中,作业进入系统后,先驻留在外存上,通过作业调度算法,将它们分批装入内存。作业调度程序用于决定把外存上处于后备队列中的哪些作业调入内存,并为他们创立进程、分配必要的资源,然后,再将新创立的进程参加就绪队列中,准备执行。应将哪些作业从外存调入内存,取决于所采用的调度算法。最简单的是先来先效劳调度算法,这是指讲最早进入外存的作业最

7、先调入内存;较常用的一种是短作业优先调度算法,这是将外存上最短的作业最先调入内存;此外,还有基于响应比高者优先的调度算法,根据作业的等待时间和要求效劳时间的和与要求效劳时间之比可计算出响应比。1.3 开发语言选择 本课程设计采用C语言实现。2概要设计 2.1功能模块划分根据功能描述,单道批处理程序作业调度的模拟程序要求实现如下功能:建立作业、选择作业、运行作业、计算作业周转时间和带权周转时间,以及这组作业的平均周转时间和带权平均周转时间、显示运行结果包括每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间等、退出程序。 2.2功能模块的描述各模块

8、的功能介绍如下:1建立作业:输入作业数,建立一组作业,并对所建立的这组作业进行初始化,用以模拟作业调度。初始化的内容包括作业名,作业要求运行的时间,其中,作业进入系统的时间由系统默认设置。2选择作业:程序通过先来先效劳调度算法、短作业优先调度算法和高响应比优先调度算法对建立的一组作业进行选择,决定把哪个作业从外存调入内存中。3运行作业:根据初始化中设置的作业要求运行时间来模拟作业的运行。4计算:作业完成计算作业周转时间和带权周转时间,以及这组作业的平均周转时间和带权平均周转时间。5显示结果:将计算所得的结果输出。6退出程序:当实验结束,不再需要模拟作业调度的时候,用来退出程序。2.3功能模块结

9、构图示作业调度模拟程序的系统功能结构如图2-1所示。作 业 调 度 系 统 退出程序高响应比优先算短作业优先算法先来先效劳算法输出运行结果运行作业初始化初始化运行作业输出运行结果初始化运行作业输出运行结果 图2-1 作业调度模拟程序系统功能结构图3详细设计 3.1作业控制块JCB的数据结构类型由于在单道批处理系统中,不必考虑作业所需要的资源是否得到满足,它所占用的 CPU时限等因素。每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的效劳时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之

10、一。每个作业的最初状态总是等待W。对每种调度算法都要求输出每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。从以上分析可见,在这个模拟程序中作业控制块JCB的数据结构类型可定义为:struct jcb /作业控制块 char name10; /作业名 int reachtime; /作业到达时间 int starttime; /作业开始时间 int needtime; /作业需要运行的时间 float super; /作业的响应比 int finishtime; /作业完成时间 float cycletime; /作业周转时间 float c

11、ltime; /作业带权周转时间 char state; /作业状态 struct jcb *next; /结构体指针*ready=NULL,*p,*q; typedef struct jcb JCB; 3.2先来先效劳算法设计先来先效劳算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被执行。流程图如图3-1所示。空结 束计算并打印这组作业的平均周转时间及带权平均周转时间等待队列空?更改时间量times的值;times:=times+效劳时间计算并打印运行作业i的完成时刻finishtime,周转时间cycletime,带权周转时间cltime;完成时间:=开始运行时间+效劳时间周转时

12、间:=完成时间到达时间带权周转时间:=周转时间/效劳时间调度队首的作业投入运行;更改队首指针,使作业的状态为R,记住作业运行的时刻starttime等初始化所有的JBC使JBC按作业提交的时刻的先后顺序排队时间量times:=0开 始不空图3-1 先来先效劳调度算法流程图3.3最短作业优先算法设计最短作业优先算法:是以进入系统的作业所要求的效劳时间为标准,总是优先选取执行时间最短的作业。流程图如图3-2所示。空结 束计算并打印这组作业的平均周转时间及带权平均周转时间等待队列空?更改时间量times的值;times:=times+效劳时间计算并打印运行作业i的完成时刻finishtime,周转时

13、间cycletime,带权周转时间cltime;完成时间:=开始运行时间+效劳时间周转时间:=完成时间到达时间带权周转时间:=周转时间/效劳时间调度队首的作业投入运行;更改队首指针,使所要求效劳时间最短的作业排在队首,使作业的状态为R,记住作业运行的时刻starttime等初始化所有的JBC使JBC按作业提交的时刻的先后顺序排队时间量times:=0开 始不空图3-2 短作业优先调度算法流程图 3.4响应比高者优先算法设计响应比高者优先算法:是在每次调度前都要计算所有被选作业在后备队列中的响应比,然后选择响应比最高的作业执行。流程图如图3-3所示。空结 束计算并打印这组作业的平均周转时间及带权

14、平均周转时间等待队列空?更改时间量times的值;times:=times+效劳时间计算并打印运行作业i的完成时刻finishtime,周转时间cycletime,带权周转时间cltime;完成时间:=开始运行时间+效劳时间周转时间:=完成时间到达时间带权周转时间:=周转时间/效劳时间先计算队列中所有作业的响应比,总是选择响应比最高的走也作为此刻要运行的作业,并修改相应的指针,记下starttime等初始化所有的JBC使JBC按作业提交的时刻的先后顺序排队时间量times:=0开 始不空 图3-3响应比高者优先算法流程图4代码实现4.1高响应比算法void hrn(int m) /高响应比算法

15、 JCB *min; int i,iden; system("cls"); inital(); for(i=0;i<n;i+) p=min=ready;iden=1; super(); do if(p->state='W'&&p->reachtime<=times) if(iden) min=p;iden=0; else if(p->super>min->super) min=p; p=p->next; while(p!=NULL); if(iden) i-;times+; /printf(&q

16、uot;ntime=%d:tno JCB submib.wait.",time); if(times>1000)printf("nruntime is too long.error.");getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数4.2最短作业优先算法void sjf(int m) / 最短作业优先算法 JCB *min; int i,iden; system("cls"); inital(); for(i=0;i<n;i+) p

17、=min=ready;iden=1; do if(p->state='W'&&p->reachtime<=times) if(iden) min=p;iden=0; else if(p->needtime<min->needtime) min=p; p=p->next; while(p!=NULL) ; if(iden) i-; /printf("ntime=%d:tno JCB submib.wait.",time); times+; if(times>100)printf("nru

18、ntime is too long.error");getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数4.3先来先效劳算法void fcfs(int m) /先来先效劳算法 int i,iden; system("cls"); inital(); for(i=0;i<n;i+) p=ready;iden=1; do if(p->state='W'&&p->reachtime<=times) iden=0; if(i

19、den)p=p->next; while(p!=NULL&&iden) ; if(iden) i-; printf("n没有满足要求的进程,需等待"); times+; if(times>100)printf("n时间过长");getch(); else running(p,m); /调用running()函数 final(); /调用running()函数5运行结果与分析5.1选择操作的界面如图5-1所示。图5-1 选择操作的界面5.2选择先来先效劳算法进行作业调度输入操作初始信息,建立一组作业,由4个作业组成,作业名分别为

20、a,b,c,d。如图5-2所示。图5-2 初始化调度顺序为abcd。运行结果如图5-3、图5-4、图5-5所示。 图5-3 先来先效劳算法调度 图5-4先来先效劳算法调度图5-5先来先效劳算法调度5.3选择最短作业优先算法进行作业调度调度顺序:acdb。运行结果如图5-6、图5-7、图5-8所示。 图5-6 最短作业优先算法调度 图5-7 最短作业优先算法调度图5-8最短作业优先算法调度5.4选择高响应比优先算法进行作业调度调度顺序:acbd。运行结果如图5-9、图5-10、图5-11所示。 图5-9响应比高者优先算法调度 图5-10响应比高者优先算法调度图5-11 响应比高者优先算法调度6结

21、束语当今,计算机技术在各个方面都极大地影响了人们的生活。操作系统作为一门计算机的根底课程,无论是对计算机等信息技术专业的学生活研究人员,还是对一般计算机应用人员,都是非常有益和重要的。通过本次课程设计我对在课堂上所学的有关操作系统的知识有了更加深刻的理解和掌握,尤其是单道批处理系统。进一步了解了该系统的主要特征:自动性,顺序性,单道性。批处理系统能提高系统资的利源用率和系统吞吐量。通过对三种调度算法的模拟程序设计,对先来先效劳调度算法、短作业优先调度算法以及高响应比优先调度算法的根本概念、实现过程以及各个算法的优缺点有的了深刻的了解,知道了不同的算法类型适合不同的作业类型。本次课程设计结合了C

22、语言程序设计语言,通过对作业调度模拟程序的设计,积累了程序设计的实战经验,锻炼了程序设计能力。通过这次课程设计,我学到了很多知识,拓宽了知识面,锻炼了能力,综合素质得到较大提高,把所学课程及相关知识加以融会贯穿,理解了操作系统工作的方法,为今后的学习、工作打下了坚实的根底。7附录源程序:#include <stdio.h>#include <stdlib.h> #include <conio.h> #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0int n;float T1=0,T2

23、=0;int times=0;struct jcb /作业控制块 char name10; /作业名 int reachtime; /作业到达时间 int starttime; /作业开始时间 int needtime; /作业需要运行的时间 float super; /作业的响应比 int finishtime; /作业完成时间 float cycletime; /作业周转时间 float cltime; /作业带权周转时间 char state; /作业状态 struct jcb *next; /结构体指针*ready=NULL,*p,*q;typedef struct jcb JCB;

24、void inital() /建立作业控制块队列,先将其排成先来先效劳的模式队列int i;printf("n输入作业数:");scanf("%d",&n);for(i=0;i<n;i+) p=getpch(JCB); printf("n输入作业名:"); scanf("%s",p->name); getch(); p->reachtime=i; printf("作业默认到达时间:%d",i); printf("n输入作业要运行的时间:"); sca

25、nf("%d",&p->needtime); p->state='W' p->next=NULL; if(ready=NULL) ready=q=p; else q->next=p; q=p; void disp(JCB* q,int m) /显示作业运行后的周转时间及带权周转时间等 if(m=3) /显示高响应比算法调度作业后的运行情况 printf("n作业%s正在运行,估计其运行情况:n",q->name); printf("开始运行时刻:%dn",q->startti

26、me); printf("完成时刻:%dn",q->finishtime); printf("周转时间:%fn",q->cycletime); printf("带权周转时间:%fn",q->cltime); printf("相应比:%fn",q->super); getch(); else / 显示先来先效劳,最短作业优先算法调度后作业的运行情况 printf("n作业%s正在运行,估计其运行情况:n",q->name); printf("开始运行时刻:%

27、dn",q->starttime); printf("完成时刻:%dn",q->finishtime); printf("周转时间:%fn",q->cycletime); printf("带权周转时间:%fn",q->cltime); getch(); void running(JCB *p,int m) /运行作业 if(p=ready) /先将要运行的作业从队列中别离出来 ready=p->next; p->next=NULL; else q=ready; while(q->ne

28、xt!=p) q=q->next; q->next=p->next; p->starttime=times; /计算作业运行后的完成时间,周转时间等等 p->state='R' p->finishtime=p->starttime+p->needtime; p->cycletime=(float)(p->finishtime-p->reachtime); p->cltime=(float)(p->cycletime/p->needtime); T1+=p->cycletime; T2+=p

29、->cltime; disp(p,m); /调用disp()函数,显示作业运行情况 times+=p->needtime; p->state='F' printf("n%s has been finished!npress any key to continue.n",p->name); free(p); /释放运行后的作业 getch();void super() /计算队列中作业的高响应比 JCB *padv; padv=ready; do if(padv->state='W'&&padv-&

30、gt;reachtime<=times) padv->super=(float)(times-padv->reachtime+padv->needtime)/padv->needtime; padv=padv->next; while(padv!=NULL);void final() /最后打印作业的平均周转时间,平均带权周转时间 float s,t; t=T1/n; s=T2/n; getch(); printf("nn作业已经全部完成!"); printf("n%d个作业的平均周转时间是:%f",n,t); pri

31、ntf("n%d个作业的平均带权周转时间是%f:nnn",n,s); void hrn(int m) /高响应比算法 JCB *min; int i,iden; system("cls"); inital(); for(i=0;i<n;i+) p=min=ready;iden=1; super(); do if(p->state='W'&&p->reachtime<=times) if(iden) min=p;iden=0; else if(p->super>min->super)

32、 min=p; p=p->next; while(p!=NULL); if(iden) i-;times+; /printf("ntime=%d:tno JCB submib.wait.",time); if(times>1000)printf("nruntime is too long.error.");getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数void sjf(int m) / 最短作业优先算法 JCB *min; int i,iden

33、; system("cls"); inital(); for(i=0;i<n;i+) p=min=ready;iden=1; do if(p->state='W'&&p->reachtime<=times) if(iden) min=p;iden=0; else if(p->needtime<min->needtime) min=p; p=p->next; while(p!=NULL) ; if(iden) i-; /printf("ntime=%d:tno JCB submib.wa

34、it.",time); times+; if(times>100)printf("nruntime is too long.error");getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数void fcfs(int m) /先来先效劳算法 int i,iden; system("cls"); inital(); for(i=0;i<n;i+) p=ready;iden=1; do if(p->state='W'&&p->reachtime<=times) iden=0

温馨提示

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

评论

0/150

提交评论