ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:35.87KB ,
资源ID:6327982      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6327982.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(短作业优先调度算法.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

短作业优先调度算法.docx

1、短作业优先调度算法短作业优先调度算法学 院 计算机科学与技术 专 业 学 号 学 生 姓 名 指导教师姓名 2014-3-18一、 实验题目 二、 课程设计的目的 三、 设计内容 四、 设计要求 五、 主要数据结构及其说明 六、 程序运行结果 七、 源程序文件 八、 实验体会 九 参考文献实验题目 采用短作业优先算法的进程调度程序课程设计的目的 操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合一起,独立分析和解决实际问题的机会。 进一步巩固和复习操作系统的基础知识。 培养学生结构化程序、模块化程序设计的方法和能力。 提高学生调试程序

2、的技巧和软件设计的能力。 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。设计内容设计并实现一个采用短作业优先算的进程调度算法演示程序设计要求1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行 (由于不要求设置互斥资源与进程间同步关系,故只有两种状态) 5. 具有一定的数据容错性主要数据结构及其说明算法的简要说明:短作业(进程)优先调度算法SJ(P)F,

3、是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。优点是SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。缺点是该算法对长作业不利;完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)长期不被调度;由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或

4、无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业游戏那调度。该程序定义了一个进程数据块(struct spf),该数据块有进程名(name)、到达时间(arrivetime)、服务时间(servicetime)、开始执行时间(starttime)、完成时间(finishtime)、周转时间(zztime)、带权周转时间(dqzztime)。用到的公式有:完成时间=到达时间+服务时间;周转时间=完成时间-到达时间;带权周转时间=周转时间/服务时间;(第一次执行的进程的完成时间=该进程的到达时间;下一个进程的开始执行时间=上一个进程的完成时间)。运行进程的顺序需要对进程的到达时间和

5、服务时间进行比较。如果某一进程是从0时刻到达的,那么首先执行该进程;之后就比较进程的服务时间,谁的服务时间短就先执行谁(如果服务时间相同则看它们的到达时间,到达时间短的先执行);如果到达时间和服务时间相同,则按先来先服务算法执行。程序运行结果1 进入操作界面如下2输入进程的数目3输入进程的信息4 运行顺序流程图源程序文件#include #include #include #define MAX 100 /最多能管理的作业数目 struct jcb /作业控制块JCB,定义为结构体 char name10; /作业名 float arrivetime; /作业到达时间 float servic

6、etime;/作业服务时间 float starttime; /作业开始执行时间 float finishtime; /作业完成时间 float zztime; /作业周转时间 float avezztime; /作业平均周转时间 ; jcb aMAX; void input(jcb *p,int N) int i; printf(请分别输入:nt作业名,到达时间,服务时间(如:JOB1 5 10)nn); for(i=0;i=N-1;i+) printf(请输入第%d个作业信息:,i+1); scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.serviceti

7、me); printf(n); void Print(jcb *p,float arrivetime,float servicetime,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;

8、k+) printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.name,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; pi=pj; pj=temp; void deal(jcb *p, float arr

9、ivetime,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.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k=N-1;k+)

10、 pk.zztime=pk.finishtime-pk.arrivetime; pk.avezztime=pk.zztime/pk.servicetime; 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.servicetime; else pm.finishtime=pm-1.finishtim

11、e+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 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;

12、 input(a,N); jcb *b=a; jcbf(b,N); printf(按Q或者q退出程序,按其他任意键继续测试.); ch = getch(); if(ch=Q|ch=q) break; return 0; 体会心得每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。不能决定对或错的,有个很简单的方法就是去尝试。同学间的讨论,这是很重要的。老师毕竟比较忙。对于

13、课程设计最大的讨论伴侣应该是同学了。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。对于本次课设的题目,SJF算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。SJF由于考虑到作业的服务时间,只在某种程度上效率要高,但大多数上即使算法易于实现,效率也不高,主要弱点是忽视了作业等待时间,会出现饥饿现象。参考文献1)宗大华,宗涛,陈吉人着操作系统北京:人民邮电出版社,2009 2)李爱华,程磊着面相对象程序设计(C+语言)北京: 清华大学出版社,2010 3)宋晓宇windows操作系统核心编程实验教程中国铁道出版社 4)张丽芬,刘利雄,王金玉编着操作系统实验教程清华大学出版社

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1