实验一-进程调度_第1页
实验一-进程调度_第2页
实验一-进程调度_第3页
实验一-进程调度_第4页
实验一-进程调度_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

实验一进程调度一、实验目的多道程序设计中,经常是假设干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、实验内容优先权法、轮转法简化假设进程为计算型的〔无I/O〕进程状态:ready、running、finish进程需要的CPU时间以时间片为单位确定算法描述优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。轮转法三、流程图开始开始键盘输入进程数n,和调度方法的选择优先权法?轮转法产生n个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小,把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到,进程所需的CPU时间减1,优先权减3,输出个进程的运行情况所需的CPU时间=0?撤销进程就绪队列为空?结束将进程插入就绪队列NYNYYBN产生n个进程,对每个进程用随机数产生进程的轮转时间片数及进程所需的时间片数,已占用CPU的时间片数置为0按进程产生的先后次序拉成就绪队列链产生n个进程,对每个进程用随机数产生进程的轮转时间片数及进程所需的时间片数,已占用CPU的时间片数置为0按进程产生的先后次序拉成就绪队列链链首进程投入运行时间片到,进程所需时间片数减1,已占用CPU时间片数加1输出各进程的运行情况进程所需时间片数=0?撤销该进程就绪队列为空吗?占用CPU的时间片数=轮转时间片数?占用CPU的时间片数置为0把该进程插入就绪队列尾BNYNYY结束N开始键盘输入进程数n,和调度方法的选择优先权法?轮转法开始键盘输入进程数n,和调度方法的选择优先权法?轮转法产生n个进程,对每个进程产生一个PCB,并用随机数产生进程的优先权及进程所需的CPU时间按优先权大小,把n个进程拉成一个就绪队列初始化其他数据结构区链首进程投入运行时间片到,进程所需的CPU时间减1,优先权减3,输出个进程的运行情况所需的CPU时间=0?撤销进程就绪队列为空?结束将进程插入就绪队列NYNYYBN进程数n不要太大通常取4~8个使用动态数据结构独立编程至少三种调度算法假设有可能请在图形方式下,将PCB的调度用图形成动画显示。五、源程序代码1.PCB类packageProcessScheduing;publicclassPCB{privateintID;//进程ID号privateintPriority;//进程优先权privateintCPUtime;//进程执行CPU时间privateStringState;//进程状态privateintNeedtime;//进程需要的时间片数privatePCBnextPCB;//下一跳进程publicintgetID(){returnID; }publicvoidsetID(intID){this.ID=ID; }publicintgetPriority(){returnPriority; }publicvoidsetPriority(intPriority){this.Priority=Priority; }publicintgetCPUtime(){returnCPUtime; }publicvoidsetCPUtime(intCPUtime){this.CPUtime=CPUtime; }publicStringgetState(){returnState; }publicvoidsetState(StringState){this.State=State; }publicStringtoString(){return"ID:"+ID+"Priority:"+Priority+"CPUtime:"+CPUtime+"State:"+State+"\n"; }publicStringtoTimeChangeString(){return"ID:"+ID+"NeedTime:"+Needtime+"State:"+State+"\n"; }publicvoidrunGO(){CPUtime=CPUtime-1;Priority=Priority-3; }publicPCBgetNextPCB(){returnnextPCB; }publicvoidsetNextPCB(PCBnextPCB){this.nextPCB=nextPCB; }publicintgetNeedtime(){returnNeedtime; }publicvoidsetNeedtime(intneedtime){Needtime=needtime; }}2.PCB操作类packageProcessScheduing;importjava.util.ArrayList;importjava.util.Random;classQueue{ PCBfront; PCBrear;}publicclassPCB_Operation{privateArrayList<PCB>mPCBs=newArrayList<PCB>();//进程顺序表privateQueuereadyQueue=newQueue();//就绪队列privateRandomrandom=newRandom();//随机数privateinthaveCPUtime;//占用CPU的时间片数privateinteveryPCBruntime;//进程时间片数privateStringstring=newString();publicQueuegetReadyQueue(){returnreadyQueue; }publicvoidsetReadyQueue(QueuereadyQueue){this.readyQueue=readyQueue; }//产生N个PCB放于mPCBs中,方便后面调用publicvoidinitPCBs(intN){for(inti=0;i<N;i++){ PCBmPCB=newPCB(); mPCB.setID(i); mPCB.setPriority(random.nextInt(20)); mPCB.setCPUtime(random.nextInt(19)+1); mPCB.setNeedtime(random.nextInt(19)+1); mPCB.setState("就绪"); mPCB.setNextPCB(null);mPCBs.add(i,mPCB); } }//初始化就绪队列publicQueueinitReadyQueue(){ getReadyQueue().front=getReadyQueue().rear=newPCB();for(inti=0;i<mPCBs.size();i++){ insertReadyQueue(getReadyQueue(),mPCBs.get(i)); }returngetReadyQueue(); }//按优先权大小向就绪队列插入PCBpublicvoidinsertReadyQueue(QueuereadyQueue,PCBinPCB){ PCBtp=newPCB(),mp=newPCB(); inPCB.setNextPCB(null);if(readyQueue.front==readyQueue.rear){ readyQueue.rear.setNextPCB(inPCB); readyQueue.rear=inPCB; } mp=readyQueue.front; tp=readyQueue.front.getNextPCB(); while(tp!=null){if(inPCB.getPriority()>=tp.getPriority()){ mp.setNextPCB(inPCB); inPCB.setNextPCB(tp);break; } mp=tp; tp=tp.getNextPCB();if(mp==readyQueue.rear){ readyQueue.rear.setNextPCB(inPCB); readyQueue.rear=inPCB;break; } } }//向队列尾插入进程publicvoidinsertQueueRear(PCBinPCB){ getReadyQueue().rear.setNextPCB(inPCB); getReadyQueue().rear=inPCB; }//展示就绪队列中所有进程publicvoiddisplayAll(QueuereadyQueue){ PCBfrontPcb=readyQueue.front.getNextPCB();while(frontPcb!=null){ setString(getString()+frontPcb.toString()); System.out.println(frontPcb.toString()); frontPcb=frontPcb.getNextPCB(); } }//优先权法单步执行publicQueueSingleRun(QueuereadyQueue){ PCBrunPCB=readyQueue.front.getNextPCB();if(runPCB.getNextPCB()==null){ runPCB.runGO();if(runPCB.getCPUtime()==0){ Strings4="ID为"+runPCB.getID()+"的PCB执行结束"; setString(getString()+(s4+="\n")); readyQueue.front.setNextPCB(null); }returnreadyQueue; } readyQueue.front.setNextPCB(runPCB.getNextPCB()); runPCB.runGO();if(runPCB.getCPUtime()>0){ insertReadyQueue(readyQueue,runPCB); }else{ Strings1="ID为"+runPCB.getID()+"的PCB执行结束"; setString(getString()+(s1+="\n")); System.out.println(s1); }returnreadyQueue; }//动态优先权法publicvoidPriorityALG(){ QueuereadyQueue=initReadyQueue(); Strings2="初始化就绪队列"; System.out.println(s2); setString(getString()+(s2+="\n")); displayAll(readyQueue);intN=1; PCBfrontPcb=readyQueue.front.getNextPCB();while(frontPcb!=null){ readyQueue=SingleRun(readyQueue); Strings3="执行"+N+++"次后的就绪队列"; System.out.println(s3); setString(getString()+(s3+="\n")); displayAll(readyQueue); frontPcb=readyQueue.front.getNextPCB(); } }//时间片轮转队列publicQueueinitTimeChangeQueue(){ getReadyQueue().front=getReadyQueue().rear=newPCB();for(inti=0;i<mPCBs.size();i++){ getReadyQueue().rear.setNextPCB(mPCBs.get(i)); getReadyQueue().rear=mPCBs.get(i); } returngetReadyQueue(); }//时间片轮转法初始化publicvoidinitTimeChange(){everyPCBruntime=random.nextInt(10)+1;haveCPUtime=0; }//展示时间片轮转中就绪队列中所有进程publicvoiddisplayTimeChangeAll(QueuereadyQueue){ PCBfrontPcb=readyQueue.front.getNextPCB();while(frontPcb!=null){ Strings0=frontPcb.toTimeChangeString();string+=s0; System.out.println(s0); frontPcb=frontPcb.getNextPCB(); } }//时间片轮转法publicvoidTimeChange(){ initTimeChange(); setReadyQueue(initTimeChangeQueue()); Strings1="初始化就绪队列:"+"进程时间片"+everyPCBruntime; System.out.println(s1);string+=s1+="\n"; displayTimeChangeAll(getReadyQueue()); PCBpointer=newPCB();intN=1;while(getReadyQueue().front!=getReadyQueue().rear){ if(getReadyQueue().front.getNextPCB()==null &&getReadyQueue().front.getNeedtime()==0){break; } getReadyQueue().front.getNextPCB().setNeedtime(getReadyQueue().front.getNextPCB().getNeedtime()-1);haveCPUtime=haveCPUtime+1; Strings2="执行"+N+++"次后的就绪队列:"+"CPU时间片:"+haveCPUtime; System.out.println(s2);string+=s2+="\n"; displayTimeChangeAll(getReadyQueue());if(getReadyQueue().front.getNextPCB().getNeedtime()>0){if(haveCPUtime==everyPCBruntime){haveCPUtime=0; pointer=getReadyQueue().front.getNextPCB();if(pointer.getNextPCB()==null){continue; }else{ getReadyQueue().front.setNextPCB(pointer.getNextPCB()); pointer.setNextPCB(null); insertQueueRear(pointer);continue; } }else{continue; } }else{ Strings3="ID:"+getReadyQueue().front.getNextPCB().getID()+"进程执行结束";string+=s3+="\n";if(haveCPUtime==everyPCBruntime)haveCPUtime=0;if(getReadyQueue().front.getNextPCB().getNeedtime()==0&& getReadyQueue().front==getReadyQueue().rear){break; } getReadyQueue().front.setNextPCB(getReadyQueue().front.getNextPCB().getNextPCB()); } } }publicStringgetString(){returnstring; }publicvoidsetString(Stringstring){this.string=string; }}3.界面类packageProcessScheduing;importorg.eclipse.swt.widgets.Display;publicclassProcessSWT{protectedShellshell;privateTexttext;privateTexttext_1;privateintN;privatePCB_OperationmOperation;/** *Launchtheapplication. *@paramargs */publicstaticvoidmain(String[]args){try{ ProcessSWTwindow=newProcessSWT(); window.open(); }catch(Exceptione){ e.printStackTrace(); } }/** *Openthewindow. */publicvoidopen(){ Displaydisplay=Display.getDefault(); createContents();shell.open();shell.layout();while(!shell.isDisposed()){if(!display.readAndDispatch()){ display.sleep(); } } }/** *Createcontentsofthewindow. */protectedvoidcreateContents(){shell=newShell();shell.setSize(450,300);shell.setText("进程调度");shell.setLayout(null); ScrolledCompositescrolledComposite=newScrolledComposite(shell,SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL); scrolledComposite.setBounds(160,10,251,242); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true);text=newText(scrolledComposite,SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL|SWT.CANCEL);text.setBackground(SWTResourceManager.getColor(SWT.COLOR_LIST_BACKGROUND));text.setEditable(false); scrolledComposite.setContent(text); scrolledComposite.setMinSize(textputeSize(SWT.DEFAULT,SWT.DEFAULT)); Labellabel=newLabel(shell,SWT.NONE); label.setBounds(29,23,87,17); label.setText("\u8BF7\u8F93\u5165\u8FDB\u7A0B\u6570\uFF1A");text_1=newText(shell,SWT.BORDER);text_1.setBounds(29,56,73,23); Buttonbutton=newButton(shell,SWT.NONE); button.setBounds(29,95,80,27); button.addSelectionListener(newSelectionAdapter(){@OverridepublicvoidwidgetSelected(SelectionEvente){text.setText("");mOperation=newPCB_Operation();N=Integer.parseInt(text_1.getText());mOperation.initPCBs(N);mOperation.PriorityALG(); Stringstring=mOperation.getString();text.setText(string); } }); button.setTex

温馨提示

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

评论

0/150

提交评论