实验一进程调度实验学时:2学时实验类型:设计实验要求:必修一、实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、实验内容1.优先权法、轮转法简化假设1)进程为计算型的(无I/O)2)进程状态:ready、running、finish3)进程需要的CPU时间以时间片为单位确定2.算法描述1)优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2)轮转法三、流程图四、实验程序代码package进程调度;/***@author**/publicclassCPCB{privateStringname;privateinttime;privateintcount;publicintgetCount(){returncount;}publicvoidsetCount(intcount){this.count=count;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetTime(){returntime;}publicvoidsetTime(inttime){this.time=time;}}package进程调度;/***@author**/classPCB{privateStringname;privateinttime;privateintpriority;publicintgetTime(){returntime;}publicvoidsetTime(inttime){this.time=time;}publicintgetPriority(){returnpriority;}publicvoidsetPriority(intpriority){this.priority=priority;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}}package进程调度;importjava.util.LinkedList;/***@author**/classprocess{privatefinalstaticintnap_time=500;privateLinkedListPCBqueue=newLinkedListPCB();privateLinkedListCPCBcqueue=newLinkedListCPCB();//优先权算法publicvoidgo(intp_Num)throwsException{for(inti=0;ip_Num;i++){PCBpcb=newPCB();inttime=(int)(Math.random()*20+1);intpri=(int)(Math.random()*20+4);pcb.setName(进程+i);pcb.setTime(time);pcb.setPriority(pri);queue.add(pcb);}queue=this.sort(queue);inti=0;while(queue.size()!=0){PCBpcb=(PCB)queue.getFirst();System.out.println(i+\t\t+pcb.getName()+运行\t+优先级:+pcb.getPriority()+---所需时间:+pcb.getTime());//Thread.sleep(nap_time);intpre=pcb.getPriority()-3;inttime=pcb.getTime()-1;if(time=0){System.out.println(pcb.getName()+\t\t进程运行结束);PCBp=(PCB)queue.removeFirst();System.out.println(移除队列的进程是\t\t+p.getName()+\n队列中还有+queue.size()+个进程\n);}else{queue.remove();pcb.setPriority(pre);pcb.setTime(time);//System.out.println(运行后:+i+----+pcb.getName()+---优先级:+pcb.getPriority()+---所需时间:+pcb.getTime());queue.add(pcb);queue=this.sort(queue);}i++;}}//时间片轮转调度算法publicvoidcycle(intp_Num)throwsException{finalinttime=3;//定义轮转时间片数for(inti=0;ip_Num;i++){CPCBcpcb=newCPCB();cpcb.setTime((int)(Math.random()*20)+1);cpcb.setName(进程+i);cpcb.setCount(0);cqueue.add(cpcb);}while(cqueue.size()!=0){CPCBcpcb=(CPCB)cqueue.getFirst();while(cpcb.getCount()!=time){//Thread.sleep(nap_time);cpcb.setTime(cpcb.getTime()-1);cpcb.setCount(cpcb.getCount()+1);for(inti=0;icqueue.size();i++)//输出进程运行情况{CPCBcpcb1=(CPCB)cqueue.get(i);System.out.println(cpcb1.getName()+\t\t所需时间片数+cpcb1.getTime()+\t\t已占用CPU时间片数+cpcb1.getCount());}if(cpcb.getTime()==0){System.out.println(cpcb.getName()+运行结束\n+-------------移除队列的是+cpcb.getName()+-------------);cqueue.removeFirst();System.out.println(-------------队列中还有+cqueue.size()+个进程--------------);break;}if(cpcb.getCount()==time){//cqueue.remove();System.out.println(----因为+cpcb.getName()+占用CPU时间片数+cpcb.getCount()+=+time);System.out.println(cpcb.getName()+时间片运行结束+cpcb.getCount()+cpcb.getTime());CPCBp=(CPCB)cqueue.removeFirst();cqueue.add(p);cpcb.setCount(0);break;}}}}publicLinkedListPCBsort(LinkedListPCBprocesses){for(inti=0;iprocesses.size();i++){PCBthread=newPCB();thread=processes.get(i);for(intj=i+1;jprocesses.size();j++){if(thread.getPriority()processes.get(j).getPriority()){PCBmythread=newPCB();mythread=thread;//thread=processes.get(j);processes.set(i,processes.get(j));processes.set(j,mythread);}}}returnprocesses;}}package进程调度;importjava.io.BufferedReader;importjava.io.InputStreamReader;/****@author邱福文**/publicclassMainFun{publicvoidFPF(){}publicstaticvoidmain(String[]args)throwsException{Integern2;do{System.out.print(请输入进程数:);BufferedReadersin=newBufferedReader(newInputStreamReader(System.in));Stringstr=sin.readLine();Integern=Integer.parseInt(str);System.out.print(请输入调度算法:\n+1为优先权\n+2为轮转法\n+0退出\n);BufferedReadersin2=newBufferedReader(newInputStreamReader(System.in));Stringstr2=sin2.readLine();processp=newprocess();//do{n2=Integer.parseInt(str2);switch(n2){case0:break;case1:p.go(n);break;case2:p.cycle(n);break;default:System.out.print(输入有误请重新输入);break;}}while(n2!=0);}}五、实验结果请输入进程数:3请输入调度算法:1为优先权2为轮转法0退出10进程0运行优先级:19---所需时间:181进程1运行优先级:19---所需时间:152进程0运行优先级:16---所需时间:173进程1运行优先级:16---所需时间:144进程0运行优先级:13---所需时间:165进程1运行优先级:13---所需时间:136进程2运行优先级:10---所需时间:87进程0运行优先级:10---所需时间:158进程1运行优先级:10---所需时间:129进程2运行优先级:7---所需时间:710进程0运行优先级:7---所需时间:1411进程1运行优先级:7---所需时间:1112进程2运行优先级:4---所需时间:613进程0运行优先级:4---所需时间:1314进程1运行优先级:4---所需时间:1015进程2运行优先级:1---所需时间:516进程0运行优先级:1---所需时间:1217进程1运行优先级:1---所需时间:918进程2运行优先级:-2---所需时间:419进程0运行优先级:-2---所需时间:1120进程1运行优先级:-2---所需时间:821进程2运行优先级:-5---所需时间:322进程0运行优先级:-5---所需时间:1023进程1运行优先级:-5---所需时间:724进程2运行优先级:-8---所需时间:225进程0运行优先级:-8---所需时间:926进程1运行优先级:-8---所需时间:627进程2运行优先级:-11---所需时间:1进程2进程运行结束移除队列的进程是进程2队列中还有2个进程28进程0运行优先级:-11---所需时间:829进程1运行优先级:-11---所需时间:530进程0运行优先级:-14---所需时间:731进程1运行优先级:-14---所需时间:432进程0运行优先级:-17---所需时间:633进程1运行优先级:-17---所需时间:334进程0运行优先级:-20---所需时间:535进程1运行优先级:-20---所需时间:236进程0运行优先级:-23---所需时间:437进程1运行优先级:-23---所需时间:1进程1进程运行结束移除队列的进程是进程1队列中还有1个进程38进程0运行优先级:-26---所需时间