版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一进程调度一、实验目的多道程序设计中,经常是假设干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、实验内容优先权法、轮转法简化假设进程为计算型的〔无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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度生物医药制品研发与临床试验合同
- 经纪人合同三篇
- 2024年农村小产权房屋转售合同3篇
- 2024年度金融服务合同包含贷款额度与利率规定2篇
- 2024年建筑施工木材材料供应合同3篇
- 2024年度福建海域使用权转让合同
- 秋季学期实践教学方案计划
- 旅游诚信服务:导游行为承诺书
- 2024年度高校教师继续教育与聘用合同2篇
- 二零二四年楼顶篮球场租赁合同:体育活动与使用权协议3篇
- 湖北省十一校2025届高三第一次联考 生物试卷(含答案)
- 2024陕西榆林市黄河东线引水工程限公司招聘20人易考易错模拟试题(共500题)试卷后附参考答案
- GB/T 33475.2-2024信息技术高效多媒体编码第2部分:视频
- GB/T 44819-2024煤层自然发火标志气体及临界值确定方法
- 广东开放大学2024秋《形势与政策(专)》形成性考核参考答案
- 2024秋期国家开放大学专科《液压与气压传动》一平台在线形考(实验报告1)试题及答案
- 3输变电工程施工质量验收统一表式(变电工程电气专业)-2024年版
- 秀场内外-走进服装表演艺术智慧树知到答案2024年武汉纺织大学
- 《我的白鸽》课件-2024-2025学年统编版语文七年级上册
- 2024年《军事理论》考试题库附答案(含各题型)
- MOOC 大学英语视听导学-湖南大学 中国大学慕课答案
评论
0/150
提交评论