《2022年短作业优先的作业调度-操作系统课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年短作业优先的作业调度-操作系统课程设计 .pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要作业调度是对成批进入系统的用户作业,根据作业控制块的信息, 按一定的策略选取若干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。本设计是为了加深对作业概念的理解,掌握短作业优先(SJF)算法,深入了解批处理系统如何组织作业、管理作业和调度作业,了解作业控制块的作用,以及作业控制块的内容和组织方式。为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、 指向下一个作业控制块的指针等信息。这
2、个记录作业相关信息的数据块称为作业控制块 (JCB) ,并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列中查找选择作业。在从后备队列中查找选择作业是,先根据作业控制块中的信息,选中一个短作业,也就是执行时间最短的作业,将它们调入内存运行。关键词:作业; 调度; 短作业优先 ; SJF; JCB 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 20 页 -
3、- - - - - - - - Abstract Batch job scheduling problem is to enter the system according to the user, the job control block of information, according to certain strategy selection several assignments that they can go to obtain a processor runs. For each user is always hope their job cycle time is the
4、smallest, short j (SJF) which is the preferred method of a kind of scheduling. This design is to deepen the understanding of the concept of job assignments, short job first (SJF) algorithm is, in-depth understanding of how the system of batch management and organization, scheduling, understand the j
5、ob assignments, as well as the job control blocks of content and organization. In order to organize the assignment system for everyone to enter the system to establish archives of job assignments and related information recorded, for example, job assignments, resources, work into execution time of t
6、ime, information system in memory of job assignments, pointing to a position job control block etc. The record of the information data block job assignments job control blocks (called), and the system JCB waiting in the job assignments scheduling job control block into a queue, the queue as backup q
7、ueue. A full information into a system for its establishment, operation job control block, and hung the backup queue. When scheduling problem, from the backlog queue for choice.From the backlog queue for job first choice, according to the information and job control block a short assignment, and sel
8、ect the shortest time is executed, they would run into memory. Keywords : Job; Scheduling; Short job first; SJF; JCB 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 20 页 - - - - - - - - - 目 录第一章课题概述 . .11.1 设计背景 . .1 1.2 目的及要求 .11.3 基本理论依据 . .1第二章 设计简介及设计方案论述. 2
9、2.1 设计简介 . .22.2 设计内容 . .2第三章 详细设计 . . 33.1 设计流程图. .33.2 主要程序代码. .4第四章 设计结果及分析 . . 74.1 运行结果截图. 74.2 运行结果分析. 8总 结 . . 9致 谢 . .10参考文献. . .11 附录程序代码 . .12名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 20 页 - - - - - - - - - - 1 - 第一章课题概述1.1 设计背景在多道程序环境下, 主存中有着多个进
10、程, 其数目往往多于处理机数目。 这就要求系统能按某种算法, 动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。在多道程序系统中, 一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言, 通常需要经历作业调度和进程调度两个过程后方能获得处理机。本次设计就是模拟作业调度和短作业优先的设计。1.2 目的及要求1.2.1 目的加深对作业概念的理解;深入了解批处
11、理系统如何组织作业、管理作业和调度作业;1.2.2 设计要求1. 加深对作业概念地理解。2. 掌握短作业优先调度算法。3. 深入了解批处理系统如何组织作业、管理作业和调度作业。4. 了解作业控制块的作用,以及作业控制块的内容和组织方式。1.3 基本理论依据根据作业控制块中的信息, 审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。短作业优先调度算法, 从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
12、- - - - - 名师精心整理 - - - - - - - 第 4 页,共 20 页 - - - - - - - - - - 2 - 第二章设计简介及设计方案论述2.1 设计简介在多道程序环境下, 将系统中的作业组织起来, 为每个进入系统的作业建立档案以记录和作业相关的信息,按要求输入作业名、到达时间和服务时间,并为其建立作业控制块(JCB )挂入后备队列。进行作业调度时,在其后计算出各个作业的开始执行时间、 完成时间、 周转时间和平均周转时间,利用短作业优先算法进行作业调度,并按照由小到大的顺序显示出来。2.2 设计内容编写程序完成批处理系统中的作业调度,要求采用短作业优先的作业调度算法。
13、实验具体包括: 首先确定作业控制块的内容,作业控制块的组成方式; 然后完成作业调度;最后编写主函数对所作工作进程测试。2.2.1 创建 JCB作业控制块创建作业控制块 JCB,定义为结构体,为进入系统的作业建立档案,其中定义了作业名,作业到达时间, 作业服务时间, 作业开始执行时间, 作业完成时间,作业周转时间,作业平均周转时间。2.2.2 控制显示信息输出文字提醒用户操作步骤;设定输入数据的格式及数量;运行完程序后显示输出实验结果。2.2.3 实现短作业优先选择首先按各个作业完成时间由小到大排序。再用输入的到达时间与服务时间按一定算法算出各个作业的开始执行时间、完成时间、周转时间和作业平均周
14、转时间。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 20 页 - - - - - - - - - - 3 - 第三章详细设计3.1 设计流程图是否否是图 3-1开始定义最多能管理的作业数目,建立作业控制块定义作业各个数据输出提示,让用户输入需要处理的作业数目,并输入各作业的作业名、作业到达时间和作业服务时间计算各个作业的作业开始执行时间,作业完成时间, 作业周转时间, 作业平均周转时间进入作业比较后备队列是否为空作业 i 完成时间 作业 i+1 完成时间按完成时间由小
15、到大输出结果,并由小到大输出作业名, 作业到达时间, 作业服务时间,作业开始执行时间,作业完成时间,作业周转时间,作业平均周转时间结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 20 页 - - - - - - - - - - 4 - 3.2 主要程序代码3.2.1 采用数据结构定义作业控制块struct jcb char name10; /作业名 float arrivetime; /作业到达时间 float servicetime;/作业服务时间 float st
16、arttime; /作业开始执行时间 float finishtime; /作业完成时间 float zztime; /作业周转时间 float avezztime; /作业平均周转时间; 3.2.2 jcb调度算法void jcbf(jcb *p,int N) float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0, avezztime=0; sort(p,N); /以到达时间从小到大排序 for(int m=0;mN-1;m+) if(m=0) pm.finishtime=pm.arrivetime+pm.ser
17、vicetime; else pm.finishtime=pm-1.finishtime+pm.servicetime; int i=0; for(int n=m+1;n=N-1;n+) if(pn.arrivetime=pm.finishtime) /查找下标 m+1以后的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 20 页 - - - - - - - - - - 5 - 作业中 : 服务时间 =pm.finishtime的作业个数 i+; float min=pm
18、+1.servicetime; int next=m+1;/m+1=n for(int k=m+1;km+i;k+) /循环查找服务时间最小的作业 if(pk+1.servicetimeMAX) printf(t!输 入 的 作业 数目 太大 , 请 输入 不大 于 %d 的 整 数n,MAX); printf(按 Q或者 q 退出程序 , 按其他任意键继续测试 .); ch = getch(); if(ch=Q|ch=q) break; else continue; input(a,N); jcb *b=a; jcbf(b,N); printf(按 Q或者 q 退出程序 , 按其他任意键继续
19、测试 .); ch = getch(); if(ch=Q|ch=q) break; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 20 页 - - - - - - - - - - 7 - 第四章设计结果及分析4.1 运行结果截图4.1.1 初始化界面图 4-1 初始化4.1.2 输入要调度的作业数目图 4-2 输入作业数目4.1.3 输入作业名、到达时间、服务时间图 4-3 输入各作业信息名师资料总结 - - -精品资料欢迎下载 - - - - -
20、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 20 页 - - - - - - - - - - 8 - 4.1.4 运行出的结果图 4-4 运行结果4.2 运行结果分析调度顺序为: A-D-B-E-C 运行结果如表所示:Name 作业名Arrive 到达时间Service 服务时间Start 开始时间Finish 完成时间Zz 周转时间Avezz 平均周转时间A 0.00 4.00 0.00 4.00 4.00 1.00 D 3.00 2.00 4.00 6.00 3.00 1.50 B 1.00 3.00 6.00 9.00
21、8.00 2.67 E 4.00 4.00 9.00 13.00 9.00 2.25 C 2.00 5.00 13.00 18.00 16.00 3.20 表 4-2 结果分析可知: 短作业优先法先由到达时间排序,执行作业, 然后对后来进入系统的作业和系统中等待执行的作业进行计算、比较,以服务时间有小到大排序, 并按此顺序进行调度。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 20 页 - - - - - - - - - - 9 - 总结课程设计是培养学生综合运用所学
22、知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程。我做的是作业调度模拟,一开始拿到题目时,实在不知道操作系统和c+如何联系在一起, 经过翻阅资料、 网上查询、讨论,最后终于完成了本次课程设计。短作业优先调度算法易于实现,并且效率很高, 但是短作业只考虑到短作业的利益,而不顾长作业,这样就可能会使得长作业一直处于等待状态而不能运行。所以,短作业优先算法适用于系统中短作业较多的情况。通过这次课程设计, 我对操作系统中的作业调度模拟和短作业优先算法有了更深的认识。并且发现,只看课本上的知识远远不够,只一味学习也根本没用,必须要动手亲自实践,才能
23、真正掌握所学的东西。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 20 页 - - - - - - - - - - 10 - 致谢本次课程设计能顺利完成,是在老师的精心指导和同学的互相帮助下完成的, 无论从学习上还是实践上都使我受益匪浅。感谢院系为我们提供实练的机会,感谢老师的细心指导,也感谢组员们的互相帮助互相探讨。在本次设计中,自己动手,亲身经历了从学习、探讨、编写、调试的过程。不仅使对书本上的知识点和理论有了更深一层的了解,使我学会如何利用所学知识,把理论结合于
24、实践, 更重要的是让我发散思路, 提高实践动手能力。 此次的课程设计收获很多, 虽然过程磕磕绊绊, 但是最终还是完成了。 但是,单单完成还远远不够, 还有许许多多的问题, 自己仍然不懂, 是在老师、 同学的帮助下完成的,在这里再次对他们的帮助表示衷心的感谢。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 20 页 - - - - - - - - - - 11 - 参考文献1 汤小丹梁红兵哲凤屏等计算机操作系统(第三版)M 西安电子科技大学出版社, 2007 年出版 91
25、-95 页2任爱华李鹏 刘方毅编著. 操作系统实验指导 M . 清华大学出版社 ,2004年出版 .134-157 页.3吕凤翥 编著.C+语言基础教程 M . 清华大学出版社 ,2007 年出版 . 4 谭浩强著 .C 程序设计 (第三版 )M . 清华大学出版社, 2005 年出版 .名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 20 页 - - - - - - - - - - 12 - 附录程序代码#include #include #include #defi
26、ne MAX 100 /最多能管理的作业数目struct jcb /作业控制块 JCB,定义为结构体 char name10; /作业名 float arrivetime; /作业到达时间 float servicetime;/作业服务时间 float starttime; /作业开始执行时间 float finishtime; /作业完成时间 float zztime; /作业周转时间 float avezztime; /作业平均周转时间; jcb aMAX; void input(jcb *p,int N) int i; printf(请 分别 输 入 :nt作 业名 , 到 达 时 间
27、, 服 务 时间 ( 如 :JOB1 5 10)nn); for(i=0;i=N-1;i+) printf(请输入第 %d个作业信息 :,i+1); scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.servicetime); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 20 页 - - - - - - - - - - 13 - void Print(jcb *p,float arrivetime,float s
28、ervicetime,float starttime,float finishtime,float zztime,float avezztime,int N) int k; printf(调度顺序 :); printf(%s,p0.name); for(k=1;k%s,pk.name); printf(nn); printf(ttt作业信息 :n); printf(nnametarrivetservicetstarttfinishtzztavezzn); for(k=0;k=N-1;k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.n
29、ame,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.avezztime); void sort(jcb *p,int N) for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime) jcb temp; temp=pi; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 20 页 - - - -
30、 - - - - - - 14 - pi=pj; pj=temp; void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &avezztime,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
31、.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.avezztime=pk.zztime/pk.servicetime; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 20 页 - - - - - - - - - - 15 - void jcbf(jcb *p,int N) float arrivetime=0,
32、servicetime=0,starttime=0,finishtime=0,zztime=0,avezztime=0; sort(p,N); for(int m=0;mN-1;m+) if(m=0) pm.finishtime=pm.arrivetime+pm.servicetime; else pm.finishtime=pm-1.finishtime+pm.servicetime; int i=0; for(int n=m+1;n=N-1;n+) if(pn.arrivetime=pm.finishtime) i+; float min=pm+1.servicetime; int nex
33、t=m+1;/m+1=n for(int k=m+1;km+i;k+) if(pk+1.servicetimeMAX) printf(t!输 入 的 作业 数目 太大 , 请 输入 不大 于 %d 的 整 数n,MAX); printf(按 Q或者 q 退出程序 , 按其他任意键继续测试 .); ch = getch(); if(ch=Q|ch=q) break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 20 页 - - - - - - - - - - 17 - else continue; input(a,N); jcb *b=a; jcbf(b,N); printf(按 Q或者 q 退出程序 , 按其他任意键继续测试 .); ch = getch(); if(ch=Q|ch=q) break; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 20 页 - - - - - - - - -