1、设计要求1. 每一个进程有一个PCB,其内容可以根据具体情况设定。 2. 进程数、进入内存时间、要求服务时间、优先级等均可以在界面上设定 3. 可读取样例数据(要求存放在外部文件中)进行进程数、进入内存时间、时间片长度、进程优先级的初始化 4. 可以在运行中显示各进程的状态:就绪、执行 (由于不要求设置互斥资源与进程间同步关系,故只有两种状态) 5. 具有一定的数据容错性主要数据结构及其说明算法的简要说明:短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的
2、作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。优点是SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。缺点是该算法对长作业不利;完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)长期不被调度;由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业游戏那调度。该程序定义了一个进程数据块(struct spf),该数据块有进程名(na
3、me)、到达时间(arrivetime)、服务时间(servicetime)、开始执行时间(starttime)、完成时间(finishtime)、周转时间(zztime)、带权周转时间(dqzztime)。用到的公式有:完成时间=到达时间+服务时间;周转时间=完成时间-到达时间;带权周转时间=周转时间/服务时间;(第一次执行的进程的完成时间=该进程的到达时间;下一个进程的开始执行时间=上一个进程的完成时间)。运行进程的顺序需要对进程的到达时间和服务时间进行比较。如果某一进程是从0时刻到达的,那么首先执行该进程;之后就比较进程的服务时间,谁的服务时间短就先执行谁(如果服务时间相同则看它们的到达
4、时间,到达时间短的先执行);如果到达时间和服务时间相同,则按先来先服务算法执行。程序运行结果1 进入操作界面如下2输入进程的数目3输入进程的信息4 运行顺序流程图源程序文件#include #include #define MAX 100 ame,&pi.arrivetime,&pi.servicetime); printf(n); void Print(jcb *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float avezztime,int N) int k;调度顺序
5、:%s,p0.name); for(k=1;k,pk.name);nnttt作业信息:nnametarrivetservicetstarttfinishtzztavezzn for(k=0;=N-1;%st%t%t%t%t%t%tn,pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.avezztime); void sort(jcb *p,int N) for(int i=0;ii+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime) jc
6、b temp; temp=pi; pi=pj; pj=temp;void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,avezztime,int N) 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.ser
7、vicetime; 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; pm.finishtime=pm-1.finis
8、htime+pm.servicetime; int i=0; for(int n=m+1;nn+) if(pn.arrivetime=pm.finishtime) i+; float min=pm+1.servicetime; int next=m+1;ervicetimeMAX)t!输入的作业数目太大,请输入不大于%d的整数n,MAX);按Q或者q退出程序,按其他任意键继续测试. ch = getch();if(ch=Q|ch=q) break; else continue; input(a,N); jcb *b=a; jcbf(b,N); if(ch= return 0;体会心得每一次课程
9、设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。不能决定对或错的,有个很简单的方法就是去尝试。同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。对于本次课设的题目,SJF算法以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。SJF由于考虑到作业的服务时间,只在某种程度上效率要高,但大多数上即使算法易于实现,效率也不高,主要弱点是忽视了作业等待时间,会出现饥饿现象。参考文献1)宗大华,宗涛,陈吉人着操作系统北京:人民邮电出版社,2009 2)李爱华,程磊着面相对象程序设计(C+语言)北京: 清华大学出版社,2010 3)宋晓宇windows操作系统核心编程实验教程中国铁道出版社 4)张丽芬,刘利雄,王金玉编着操作系统实验教程清华大学出版社
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1