版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
/請求分頁存儲管理的實現(xiàn)寫出方案實現(xiàn)代碼〔1page類packagehomework;publicclassPage{privateintpagenumb;//頁號privateintphysicsnumb;//物理塊號privatebooleanstate;//狀態(tài)位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; }}〔2Shell類:頁表packagehomework;importjava.util.Scanner;publicclassShell{ Pageshell[];privateintcurrent;privateintlength;publicShell<>{};publicShell<intlength>{this.length=length;this.current=0;shell=newPage[length];for<inti=0;i<length;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<i<this.current>{if<this.shell[i].getPagenumb<>==pagenumb>{returni; }i++; }return-1; } }publicvoidInchange<intb[],Stringch,intnumber>{ Scannera=newScanner<System.in>;switch<ch>{case"yes":{System.out.println<"請輸入一個新的數(shù)據(jù)">;b[this.shell[number].getPhysicsnumb<>]=a.nextInt<>;this.shell[number].setChange<true>; System.out.println<"修改成功!">;break; }case"no":{break; }default:{ System.out.println<"輸入字符有誤.將退出程序??!">; System.exit<0>; } } }publicintIsover<>{if<this.current>=this.length>{return1; }elsereturn0; }publicintMinVisitcount<>{inti,t=0;for<i=1;i<this.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ài)\t"+"訪問次數(shù)\t"+"修改\t"+"外存地址\t">;for<inti=0;i<this.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<"****************************請求分頁存儲系統(tǒng)****************************">; System.out.println<"功能:">; System.out.println<"\t1.查看頁表">; System.out.println<"\t2.查看快表">; System.out.println<"\t3.查看外存">; System.out.println<"\t4.在內(nèi)存修改數(shù)據(jù)">; System.out.println<"\t5.繼續(xù)訪問頁面">; 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"+"數(shù)據(jù)\n">;for<intk=0;k<20;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<numb<0>{ System.out.println<"內(nèi)存中沒有此頁號">; }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;//當前存儲的內(nèi)存地址intt;//頁表中訪問次數(shù)最小的索引intb[]=newint[10];//內(nèi)存中存儲的數(shù)據(jù) 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<"產(chǎn)生一個隨機序列作為外存數(shù)據(jù)!">;//錄入外存地址和數(shù)據(jù)for<i=0;i<slength;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||k1<0>{ System.out.println<"輸入數(shù)據(jù)有錯.將退出程序?。?>; 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<"在快表中找不到!"+"進入內(nèi)存檢測:">;//在快表中找不到,去內(nèi)存區(qū)的頁表找if<pageshell.current>0>{number=pageshell.searchpage<k1>;//頁號k1所在的下標if<number!=-1&&number!=-2>{result=b[pageshell.shell[number].getPhysicsnumb<>]; System.out.println<"在頁表中找到,結果為:"+result>;//修改訪問字段和狀態(tài)位pageshell.shell[number].setVisitcount<pageshell.shell[number].getVisitcount<>+1>;//修改快表TLB.changeKShell<pageshell,number>; } }if<pageshell.current<=0||number==-1>{ System.out.println<"在內(nèi)存中找不到?。?>; System.out.println<"從外存中調(diào)入內(nèi)存:">;//在頁表找不到.去外存區(qū)找for<i=0;i<slength;i++>{if<k1==s[i].getPagenumb<>>{//在外存找到了缺頁k2=pageshell.Isover<>;if<k2==1>{//內(nèi)存已滿t=pageshell.MinVisitcount<>; System.out.println<"內(nèi)存已滿!即將調(diào)出頁號"+pageshell.shell[t].getPagenumb<>>; }else{t=pageshell.current;pageshell.setCurrent<pageshell.getCurrent<>+1>; }//判斷是否修改了內(nèi)存的數(shù)據(jù)if<pageshell.Ischange<t>==1>{s[pageshell.shell[t].getCRTaddress<>].setSts<b[pageshell.shell[t].getPhysicsnumb<>]>; }//調(diào)入內(nèi)存pageshell.shell[t].setPagenumb<k1>;if<k2==1>{b[pageshell.shell[t].getPhysicsnumb<>]=s[i].getSts<>; }else{pageshell.shell[t].setPhysicsnumb<k3>;//未滿則設置物理塊號.滿了只改變其他5個字段b[k3]=s[i].getSts<>;k3++;//物理塊號 }pageshell.shell[t].setState<true>;pageshell.shell[t].setVisitcount<1>;pageshell.shell[t].setChange<false>;pageshell.shell[t].setCRTaddress<i>; System.out.println<"調(diào)入內(nèi)存成功!">;//修改快表TLB.changeKShell<pageshell,t>; System.out.println<"修改快表成功!">; System.out.println<"結果為:"+b[k3-1]>;break; } } } }do{gramFunction<>; System.out.print<"請輸入一個整數(shù)〔1-6:">;i=a.nextInt<>;while<i<1||i>6>{ System.out.println<"輸入有誤.請重新輸入<1-6>:">;i=a.nextInt<>; }pageshell.Dealfunction<i,TLB,s,b>; }while<i!=5>;/*System.out.println<"是否繼續(xù)請求訪問頁面<1or0>:">; i=a.nextInt<>; while<i!=1&&i!=0>{ System.out.println<"輸入有誤.請重新輸入<1or0>:">; i=a.nextInt<>; } */}while<i==5>;System.out.println<"退出程序!">;}}〔4KShell類:快表packagehomework;publicclassKShell{ KPageshell[];privateintcurrent;privateintlength;privateintchangenumb;//修改快表的次數(shù)publicKShell<>{};publicKShell<intlength>{this.length=length;this.current=0;this.changenumb=0;shell=newKPage[length];for<inti=0;i<length;i++>{this.shell[i]=newKPage<>; } }publicvoidsetCurrent<intcurrent>{this.current=current;}publicvoidsetChangenumb<intchangenumb>{this.changenumb=changenumb;}publicintgetCurrent<>{returncurrent;}publicintgetChangenumb<>{returnchangenumb;}publicintgetLength<>{returnlength;}publicintsearchpage<intpagenumb>{inti=0;if<this.changenumb==0&&this.current==0>{return-2; }elseif<this.changenumb<this.length>{while<i<this.current>{if<this.shell[i].getPagenumb<>==pagenumb>{returni; }i++; }return-1; }else{while<i<this.length>{if<this.shell[i].getPagenumb<>==pagenumb>{returni; }i++; }return-1; } }publicvoidchangeKShell<Shellpageshell,intnumber>{if<this.getChangenumb<>>=this.getLength<>>{if<this.getCurrent<>==this.getLength<>>{this.setCurrent<0>; } System.out.println<"快表已滿,快表中即將調(diào)出頁號"+this.shell[this.current].getPagenumb<>>; }if<this.getCurrent<><this.getLength<>>{this.shell[this.getCurrent<>].setIndex<number>;this.shell[this.getCurrent<>].setPagenumb<pageshell.shell[number].getPagenumb<>>;this.shell[this.getCurrent<>].setPhysicsnumb<pageshell.shell[number].getPhysicsnumb<>>;this.se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省南平市五夫中學高二化學上學期期末試題含解析
- 福建省南平市渭田中學2021年高二生物模擬試題含解析
- 福建省南平市太平中學高三數(shù)學文聯(lián)考試題含解析
- 2 《燭之武退秦師》(說課稿)-2024-2025學年高一語文下學期同步教學說課稿專輯(統(tǒng)編版必修下冊)
- 美術教育之光
- 解密清明節(jié)氣
- 填分家協(xié)議書(2篇)
- 25王戎不取道旁李 說課稿-2024-2025學年四年級上冊語文統(tǒng)編版
- 有償使用場地租賃合同
- 租賃山地合同
- 鄉(xiāng)鎮(zhèn)權責清單
- 湖北省部分學校2023-2024學年高一上學期期末數(shù)學試題(解析版)
- 《活著》讀書分享課件
- 醫(yī)院醫(yī)療糾紛防范與處理實施辦法(試行)
- 前程無憂IQ測評題庫
- 《稀土礦石選礦》課件
- 家具行業(yè)招商方案
- 《現(xiàn)代電氣控制技術》課件
- 七年級第一學期地理知識點復習提綱(滬教版)
- 2023-2024年全球及中國藍莓產(chǎn)業(yè)研究報告
- 視頻監(jiān)控系統(tǒng)用戶操作手冊
評論
0/150
提交評論