您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 模拟操作系统的请求分页存储管理JAVA代码
请求分页存储管理的实现写出方案实现代码(1)page类packagehomework;publicclassPage{privateintpagenumb;//页号privateintphysicsnumb;//物理块号privatebooleanstate;//状态位privateintvisitcount;//访问字段privatebooleanchange;//修改位privateintCRTaddress;//外存地址publicPage(){this.pagenumb=-1;this.physicsnumb=-1;this.state=false;this.visitcount=0;this.change=false;this.CRTaddress=-1;}publicPage(intpagenumb,intphysicsnumb,booleanstate,intvisitcount,booleanchange,intCRTaddress){this.pagenumb=pagenumb;this.physicsnumb=physicsnumb;this.state=state;this.visitcount=visitcount;this.change=change;this.CRTaddress=CRTaddress;}publicvoidsetPagenumb(intpagenumb){this.pagenumb=pagenumb;}publicvoidsetPhysicsnumb(intphysicsnumb){this.physicsnumb=physicsnumb;}publicvoidsetState(booleanstate){this.state=state;}publicvoidsetVisitcount(intvisitcount){this.visitcount=visitcount;}publicvoidsetChange(booleanchange){this.change=change;}publicvoidsetCRTaddress(intCRTaddress){this.CRTaddress=CRTaddress;}publicintgetPagenumb(){returnthis.pagenumb;}publicintgetPhysicsnumb(){returnthis.physicsnumb;}publicbooleangetState(){returnthis.state;}publicintgetVisitcount(){returnthis.visitcount;}publicbooleangetChange(){returnthis.change;}publicintgetCRTaddress(){returnthis.CRTaddress;}}(2)Shell类:页表packagehomework;importjava.util.Scanner;publicclassShell{Pageshell[];privateintcurrent;privateintlength;publicShell(){};publicShell(intlength){this.length=length;this.current=0;shell=newPage[length];for(inti=0;ilength;i++){this.shell[i]=newPage();}}publicvoidsetCurrent(intcurrent){this.current=current;}publicintgetCurrent(){returnthis.current;}publicintsearchpage(intpagenumb){inti=0;if(this.current==0){return-2;}else{while(ithis.current){if(this.shell[i].getPagenumb()==pagenumb){returni;}i++;}return-1;}}publicvoidInchange(intb[],Stringch,intnumber){Scannera=newScanner(System.in);switch(ch){caseyes:{System.out.println(请输入一个新的数据);b[this.shell[number].getPhysicsnumb()]=a.nextInt();this.shell[number].setChange(true);System.out.println(修改成功!);break;}caseno:{break;}default:{System.out.println(输入字符有误,将退出程序!!);System.exit(0);}}}publicintIsover(){if(this.current=this.length){return1;}elsereturn0;}publicintMinVisitcount(){inti,t=0;for(i=1;ithis.current;i++){if(this.shell[i].getVisitcount()this.shell[t].getVisitcount()){t=i;}}returnt;}publicintIschange(intnumber){if(this.shell[number].getChange()==true){return1;}elsereturn0;}publicvoidprintPageShell(){System.out.println(页表:);System.out.println(索引\t+页号\t+物理块号\t+状态\t+访问次数\t+修改\t+外存地址\t);for(inti=0;ithis.length;i++){System.out.println(i+\t+this.shell[i].getPagenumb()+\t+this.shell[i].getPhysicsnumb()+\t+this.shell[i].getState()+\t+this.shell[i].getVisitcount()+\t+this.shell[i].getChange()+\t+this.shell[i].getCRTaddress());}}publicvoidprogramFunction(){System.out.println(****************************请求分页存储系统****************************);System.out.println(功能:);System.out.println(\t1.查看页表);System.out.println(\t2.查看快表);System.out.println(\t3.查看外存);System.out.println(\t4.在内存修改数据);System.out.println(\t5.继续访问页面);System.out.println(\t6.退出程序);}publicvoidDealfunction(inti,KShellTLB,Sources[],intb[]){if(i==1){this.printPageShell();}elseif(i==2){TLB.printKShell();}elseif(i==3){System.out.println(外存:);System.out.println(外存地址\t+页号\t+数据\n);for(intk=0;k20;k++){s[k].printSource(k);}}elseif(i==4){Stringch=yes;intpageNumb;Scannera=newScanner(System.in);System.out.print(请输入一个页号:);pageNumb=a.nextInt();intnumb=this.searchpage(pageNumb);if(numb0){System.out.println(内存中没有此页号);}else{this.Inchange(b,ch,numb);}}elseif(i==6){System.out.println(结束程序);System.exit(0);}}publicstaticvoidmain(String[]args){Scannera=newScanner(System.in);inti,number=-10,k1,k2,result;intk3=0;//当前存储的内存地址intt;//页表中访问次数最小的索引intb[]=newint[10];//内存中存储的数据Stringch;intslength,plength,Tlength,data;System.out.print(请输入外存大小:);slength=a.nextInt();System.out.print(请输入页表大小:);plength=a.nextInt();System.out.print(请输入快表大小:);Tlength=a.nextInt();//定义页表,快表,外存Shellpageshell=newShell(plength);//页表Sources[]=newSource[slength];//外存KShellTLB=newKShell(Tlength);//快表System.out.println(产生一个随机序列作为外存数据!);//录入外存地址和数据for(i=0;islength;i++){data=(int)(100*Math.random());System.out.print(data+\t);s[i]=newSource(i,data);}System.out.println(\n外存设置成功);//请求页面do{//TLB.printKShell();//打印当前快表的情况//pageshell.printPageShell();//打印当前页表的情况System.out.println(请输入一个页面的页号(0-19):);k1=a.nextInt();if(k1=20||k10){System.out.println(输入数据有错,将退出程序!!);System.exit(0);}//检测快表,快表存储当前的页表项,即当快表满时采用最近最久未被使用算法置换快表System.out.println(进入快表检测);if(TLB.getCurrent()0){number=TLB.searchpage(k1);if(number!=-1&&number!=-2){result=b[TLB.shell[number].getPhysicsnumb()];System.out.println(在快表中找到,结果为:+result);//找出该页号在页表中的位置并修改访问字段number=TLB.shell[number].getIndex();pageshell.shell[number].setVisitcount(pageshell.shell[number].getVisitcount()+1);}}if(TLB.getCurrent()=0||number==-1){System.out.println(在快表中找不到!+进入内存检测:);//在快表中找不到,去内存区的页表找if(pageshell.current0){number=pageshell.searchpage(k1);//页号k1所在的下标if(number!=-1&&number!=-2){result=b[pageshell.shell[number].getPhysicsnumb()];S
本文标题:模拟操作系统的请求分页存储管理JAVA代码
链接地址:https://www.777doc.com/doc-5834049 .html