操作系统课程设计报告题目:两道批处理系统的两级调度-2操作系统课程设计任务书学生姓名专业班级学号题目两道批处理系统的两级调度-2指导教师题目编号2015秋-05主要内容本课程设计要求模拟实现一个的两道批处理系统的两级调度。通过具体的作业调度、进程调度等功能的实现,加深对批处理系统的两级调度模型和实现过程的理解。任务要求内存任何时候最多只允许有两道作业。要求作业从进入系统到最后完成,要经历两级调度:作业调度和进程调度。作业调度是高级调度,它的主要功能是根据一定的算法,为它们建立初始状态为就绪的作业进程。进程调度是低级调度,它的主要功能是根据一定的算法将CPU分派给就绪队列中的一个进程。1.作业调度分别采用先来先服务算法,进程调度采用可抢占的优先级调度算法。2.假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。测试数据如下:作业进入时间估计运行时间优先数JOB110:0040分钟5JOB210:2030分钟3JOB310:3050分钟4JOB410:5020分钟63.优先数越小的优先级别越高。分别在不同算法控制下运行设计的程序,依次显示被选中作业、内存空闲区和磁带机的情况。比较不同算法作业的选中次序及作业平均周转时间。4.选用程序设计语言:C、C++等。参考文献[1]计算机操作系统,汤小丹等,西安电子科技大学出版社[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)[3]计算机操作系统教程(第二版),张尧学、史美林,清华大学出版社[4]现代操作系统,A.S.Tanenbaum著,陈向群等译机械工业出版社审查意见指导教师签字:系主任签字:年月日说明:本表由指导教师填写,由系主任审核后下达给选题学生,装订在设计(论文)首页一、主要内容本课程设计是实现两道批处理系统的两级调度-2,作业调度为先来先服务,进程调度为可抢占的优先级调度。二、任务要求作业调度分别采用先来先服务算法,进程调度采用可抢占的优先级调度算法。假定“预输入”程序已经把一批作业的信息存放在输入井了,并为它们建立了相应作业表。测试数据如下:作业进入时间估计运行时间优先数JOB110:0040分钟5JOB210:2030分钟3JOB310:3050分钟4JOB410:5020分钟6优先数越小的优先级别越高。分别在不同算法控制下运行设计的程序,依次显示被选中作业、内存空闲区和磁带机的情况。比较不同算法作业的选中次序及作业平均周转时间。选用程序设计语言:C、C++等。三、设计思想说明1.先来先服务算法FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中菜哦那个该算法时,系统将按照作业到达的先后次序来进行调度。2.抢占式优先级调度算法把处理机分配给当前优先级最高的进程,使之执行。但在执行期间,只要出现了另一个其优先级更高的进程,调度程序就将处理机分配给新到的优先级最高的进程。3.两级调度1)作业依照先来先服务算法的顺序进入内存。2)Cpu依据内存中进程的优先级来调度进程3)若cpu运行中有更高优先级的进程进入内村,返回(2)4)若没有,进程运行到结束。四、数据结构的说明定义所需要的作业类。publicclassZuoyeimplementsCloneable{privateStringname;//作业名privateStringstate=W;//状态privateintntime;//需要运行的时间privateintatime=0;//已经运行的时间privateintsupernum;//优先级privateintruntime;//开始运行的时间privateintftime;//结束时间privateintintime;//调入时间privateintztime;//周转时间privatefloatdztime;//带权周转}五、部分程序代码//以下代码均是在一个java线程对象中的方法//一秒的调度过程publicvoiddiaodu(inttime){Zuoyerun;//若内存未满,将外存作业调入while(main.size()2&&outside.size()!=0){Zuoyeo=outside.get(0);main.add(o);outside.remove(0);}//把内存进程按优先级排序Collections.sort(main,m2);//若内存不为空,运行进程if(main.size()!=0){run=main.get(0);//若第一次运行,给进程的开始运行时间赋值if(run.getRuntime()==-1)run.setRuntime(time);//进程运行run.running();if(main.size()==2){main.get(1).setState(W);}}this.funcintime();}//即将调入外存的程序减少一秒等待时间publicvoidfuncintime(){for(inti=0;icopyinfo.size();i++){Zuoyeo=copyinfo.get(i);o.setIntime(o.getIntime()-1);if(o.getIntime()==0){outside.add(o);copyinfo.remove(i);i--;}}}//零时刻若有进程调入,调入外存publicvoidfunczerotime(){for(inti=0;icopyinfo.size();i++){Zuoyeo=copyinfo.get(i);if(o.getIntime()==0){outside.add(o);copyinfo.remove(i);i--;}}}//深度复制ListpublicvoidcloneList(){copyinfo=newArrayListZuoye(my.size());IteratorZuoyeiterator=my.iterator();while(iterator.hasNext()){copyinfo.add((Zuoye)iterator.next().clone());}}/***重写线程的run方法*/@Overridepublicvoidrun(){//TODOAuto-generatedmethodstub//定义秒数inttime=0;//将完成组清空finish.clear();//显示Finishinfof=newFinishinfo();f.setInfo(finish);jt4.setModel(f);//将Originalinfo复制this.cloneList();//按调入时间排序Collections.sort(copyinfo,m1);//零时刻的情况this.funczerotime();//整个调度的过程while(copyinfo.size()+outside.size()+main.size()0){try{Thread.sleep(1000);}catch(Exceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}//一秒的调度过程this.diaodu(time);//秒数增加time++;//若有作业完成,调出到finishif(main.size()!=0&&main.get(0).getNtime()==0){Zuoyerun=main.get(0);//计算完成时间,周转时间,带权周转时间run.setFtime(time);run.setZtime(run.getFtime()-run.getZtime());run.setDztime(run.getZtime()/run.getDztime());main.remove(0);if(main.size()!=0){Zuoyenext=main.get(0);next.setState(R);if(next.getRuntime()==-1)next.setRuntime(time);}finish.add(run);}//显示一秒调度的信息this.setInfomation();}JOptionPane.showMessageDialog(this,已完成。);this.setJlabel();}六、流程图开始把零时刻调入的作业放入外存检查内存是否已满是否检查外存是否有进程对内存进行抢占式优先级算法选出最高优先级进程否通过先来先服务算法把进程调入内存直到内存满是进程运行是否完成调入完成组内外存是否还有进程是是结束否否七、程序运行预输入结果随机产生作业组:结果:总界面:总界面运行过程:结束: