版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
合工大頁面置換算法操作系統(tǒng)課程設(shè)計報告計算機(jī)與信息學(xué)院《操作系統(tǒng)綜合設(shè)計》報告設(shè)計題目:頁面置換算法學(xué)生姓名:學(xué)號:專業(yè)班級:計算機(jī)科學(xué)與技術(shù)班2015年X月一、設(shè)計題目3二、開發(fā)環(huán)境與工具3三、設(shè)計原理31.最佳(Optimal)置換算法32.先進(jìn)先出(FIFO)頁面置換算法43.最近最久未使用(LRU)頁面置換算法4四、重要算法51.算法流程圖52.關(guān)鍵代碼8五、設(shè)計結(jié)果22六、設(shè)計體會24七、附錄24一、設(shè)計題目第15題:頁面置換算法1.建立相應(yīng)的數(shù)據(jù)結(jié)構(gòu);
2.在屏幕上顯示頁面的狀況;
3.時間的流逝可以用下面幾種方法模擬:
(a)按鍵盤,每按一次可以認(rèn)為過一個時間單位;
(b)相應(yīng)WM_TIMER;
4.將一批頁的置換情況存入磁盤文件,以后可以讀出并重放;
5.計算頁面的缺頁次數(shù)、缺頁后的頁面置換次數(shù);
6.支持算法:FIFO、LRU、最佳置換算法。二、開發(fā)環(huán)境與工具開發(fā)環(huán)境:Windows開發(fā)工具:VC6.0、Eclipse三、設(shè)計原理1.最佳(Optimal)置換算法最佳置換算法是由Belady于1966年提出的一種理論上的算法。其所選擇的被淘汰頁面將是以后永不使用的,或是在未來最長時間內(nèi)不再被訪問的頁面。采用最佳置換算法通??梢员WC獲得最低的缺頁率,但由于人們目前還無法預(yù)知,一個進(jìn)程在內(nèi)存的若干個頁面中,哪一個頁面是未來最長時間內(nèi)不再被訪問的,因而該算法是無法實現(xiàn)的,但可以用該算法去評價其他算法。現(xiàn)舉例說明如下:假定系統(tǒng)為某進(jìn)程分配了三個物理快,并考慮有以下的頁面號引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1進(jìn)程運(yùn)行時,先將7,0,1三個頁面放入內(nèi)存。以后,當(dāng)進(jìn)程要訪問頁面2時,將會產(chǎn)生缺頁中斷。此時OS根據(jù)最佳置換算法將將選擇頁面7予以淘汰。這是因為頁面0將作為第5個被訪問的頁面,頁面1是第14個被訪問的頁面,而頁面7則要在第18次頁面訪問是才需調(diào)入。下次訪問頁面0時,因它已在內(nèi)存而不必產(chǎn)生缺頁中斷。當(dāng)進(jìn)程訪問頁面3時,又講引起頁面1被淘汰;
因為它在現(xiàn)在的1,2,0三個頁面中,將是以后最晚才被訪問的。圖1示出了采用最佳置換算法時的置換圖。由圖可以看出,采用最佳置換算法發(fā)生了6次頁面置換。頁面號70120304230321201701物理快1777222227物理快200004000物理快311333112.先進(jìn)先出(FIFO)頁面置換算法FIFO算法是最早出現(xiàn)的置換算法,該算法總是淘汰最先進(jìn)入內(nèi)存的頁面,即選擇在內(nèi)存中駐留時間最長的頁面予以淘汰。該算法實現(xiàn)簡單,只需要把已經(jīng)調(diào)入內(nèi)存的頁面按先后次序排成一個隊列,當(dāng)發(fā)生缺頁時,將隊首頁面出隊,再將找到的頁面入隊,這樣就完成了頁面置換的任務(wù)。以書上的為例有如下表格:701203423032120170777222444000000077000033222221111101111003333322222但該算法與程序的運(yùn)行規(guī)律不相適應(yīng),它忽視了程序運(yùn)行的局部性原理。有可能造成需要訪問的頁面經(jīng)常性的被置換。3.最近最久未使用(LRU)頁面置換算法FIFO算法性能較差,它是根據(jù)頁面進(jìn)入的先后次序進(jìn)行置換,并不能反映頁面的使用情況。最近最久未使用(LRU)算法的基本思想是利用“最近的過去”來預(yù)測“最近的未來”,這個也是根據(jù)程序運(yùn)行的局部性原理。由于最佳置換算法只有理論價值,實際系統(tǒng)中是無法使用的,所以就利用最近的過去來預(yù)測未來。該算法每訪問一個字段,記錄一個自上次以來被訪問以來所經(jīng)歷的時間t。當(dāng)需要淘汰一個頁面時,選擇所有頁面中t值最大的,即最近最久未使用的頁面予以置換。
以書上為例,有如下表格:
701203423032120170777222444000111111000000033333300001113322222222277四、重要算法1.算法流程圖FIFO算法流程圖:
Yi++把p的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++把page中最先裝入的頁面置換出去.i++Page是否有空當(dāng)前p中第i個元素是否已在內(nèi)存中頁面走向存入數(shù)組p中,內(nèi)存塊用page表示初始化為0開始NYN輸出當(dāng)前內(nèi)存塊狀態(tài)結(jié)束LRU算法流程圖:開始頁面走向存入數(shù)組p中,內(nèi)存塊用page表示初始化為0Y當(dāng)前p中第i個元素是否已在內(nèi)存i++NNPage是否有空Y結(jié)束把p的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++輸出當(dāng)前內(nèi)存塊狀態(tài)把page中最近最久未使用的頁面置換出去.i++OPT算法流程圖:開始Yi++結(jié)束輸出當(dāng)前內(nèi)存塊狀態(tài)把page中以后一段時間都不使用或是使用時間離現(xiàn)在最遠(yuǎn)的換出.i++把p的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++Page是否有空當(dāng)前p中第i個元素是否已在內(nèi)存頁面走向存入數(shù)組p中,內(nèi)存塊用page表示初始化為0NNY2.關(guān)鍵代碼1.FIFO算法代碼:
publicclassFIFOControl{//privateintnum={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//使用無參構(gòu)造函數(shù)privateintnum=newint;privateintnumLength;privateintpg=newint;privateinttimepg=newint;privateintPageNum;publicintstore;FIFOControl{this.PageNum=3;numLength=20;intnumtemp={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};for{num=numtemp;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}FIFOControl//參數(shù):1.物理塊數(shù)2.頁面序列號3.頁面序列號數(shù)組長度meiyong{this.PageNum=nump;numLength=nlength;for{num=n;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}privatebooleancheckInPage{for{timepg++;}for{if{returntrue;}}returnfalse;}privatevoidcaculate{//將物理頁框裝滿inttimer=0;//橫著的指針for{pg=num;for//加時間{timepg++;}for//數(shù)據(jù)放到store中去{store=pg;}timer++;}//把后面的數(shù)據(jù)按先進(jìn)先出的順序放到物理塊中for{if)//如果在物理框中將對應(yīng)位時間置為1{for//把這次物理塊中的數(shù)據(jù)存儲起來{store=pg;}timer++;}else//否則找出時間最長的,將其置換,并將對應(yīng)位的時間置為1{intmax=timepg;intmaxvalue=pg;intmaxindex=0;inttemp;for//找到時間最大的物理塊{temp=timepg;if{max=temp;maxvalue=pg;maxindex=n;}}//System.out.println;//System.out.println;pg=num;timepg=1;for//把這次的數(shù)據(jù)存儲起來{store=pg;}store=maxindex+1;timer++;}}//測試查看結(jié)果//for//seshi//{//for//{//System.out.print;//}//System.out.println;//}}publicintgetStore{this.caculate;returnstore;}publicclassFIFOControl{//privateintnum={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//使用無參構(gòu)造函數(shù)privateintnum=newint;privateintnumLength;privateintpg=newint;privateinttimepg=newint;privateintPageNum;publicintstore;FIFOControl{this.PageNum=3;numLength=20;intnumtemp={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};for{num=numtemp;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}FIFOControl//參數(shù):1.物理塊數(shù)2.頁面序列號3.頁面序列號數(shù)組長度meiyong{this.PageNum=nump;numLength=nlength;for{num=n;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}privatebooleancheckInPage{for{timepg++;}for{if{returntrue;}}returnfalse;}privatevoidcaculate{//將物理頁框裝滿inttimer=0;//橫著的指針for{pg=num;for//加時間{timepg++;}for//數(shù)據(jù)放到store中去{store=pg;}timer++;}//把后面的數(shù)據(jù)按先進(jìn)先出的順序放到物理塊中for{if)//如果在物理框中將對應(yīng)位時間置為1{for//把這次物理塊中的數(shù)據(jù)存儲起來{store=pg;}timer++;}else//否則找出時間最長的,將其置換,并將對應(yīng)位的時間置為1{intmax=timepg;intmaxvalue=pg;intmaxindex=0;inttemp;for//找到時間最大的物理塊{temp=timepg;if{max=temp;maxvalue=pg;maxindex=n;}}//System.out.println;//System.out.println;pg=num;timepg=1;for//把這次的數(shù)據(jù)存儲起來{store=pg;}store=maxindex+1;timer++;}}}publicintgetStore{this.caculate;returnstore;}2.LRU算法代碼:
publicclassLRUControl{//privateintnum={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//使用無參構(gòu)造函數(shù)privateintnum=newint;//使用有參構(gòu)造函數(shù)privateintnumLength;privateintPageNum;privatePagepg=newPage;publicintstore;publicinttemp1;LRUControl{PageNum=3;numLength=num.length;store=newint;for{pg=newPage;if{this.pg.setValue;this.pg.setTime;}else{System.out.println;}}}LRUControl//參數(shù):1.物理塊數(shù)2.頁面序列號3.頁面序列號數(shù)組長度meiyong{this.PageNum=nump;numLength=nlength;for{num=n;}store=newint;//gaidongtemp1=newint;for{pg=newPage;if{this.pg.setValue;this.pg.setTime;}else{System.out.println;}}}privatebooleancheckInPage{for{p.setTime+1);}for{if){returntrue;}}returnfalse;}voidcaculate{inttimer=0;//前PageNum個,先將物理快裝滿for{pg.setValue;pg.setTime;for{pg.setTime+1);}for{store=pg.getValue;}timer++;}for{store=0;}//num數(shù)組后面的頁面檢查每一個是否在前面出現(xiàn)過,有置該頁框時間為1,沒有則在原基礎(chǔ)上加1for{if)//如果在物理框中將對應(yīng)位時間置為1{for//把num和pg中相等的物理塊時間置1{if){pg.setTime;break;}}for//把這次物理塊中的數(shù)據(jù)存儲起來{store=pg.getValue;}store=0;timer++;}else//否則找出時間最長的,將其置換,并將對應(yīng)位的時間置為1{intmax=pg.getTime;intmaxindex=0;inttemp;for//找到時間最大的物理塊{temp=pg.getTime;if{max=temp;maxindex=n;}}//System.out.println;//System.out.println;pg.setTime;pg.setValue;for//把這次的數(shù)據(jù)存儲起來{store=pg.getValue;}store=maxindex+1;timer++;}}}voiddisplay{for{for{System.out.print;}System.out.println;}}privatevoidadjustStore{for{for{temp1=store;}}for{temp1=store;}}publicintgetStore{adjustStore;returntemp1;}}3.OPT算法代碼:
intOptimal{//參數(shù)intmax;//未來最長時間內(nèi)不被訪問的頁面距下次被訪問的時間intmax_page;//未來最長時間內(nèi)不被訪問的頁面號intmemory_null;//內(nèi)存中的空位號intlack=0;//記錄缺頁次數(shù)//intprocess=newint;//記錄置換過程Memorymemory=newMemory;//創(chuàng)建內(nèi)存//記錄置換過程數(shù)組初始化for{for{process=-1;}}//內(nèi)存塊初始化for{memory=newMemory;memory.page=-1;memory.next=0;}for{//依次讀取頁面System.out.println;if){//System.out.println;//記錄process=0;//沒有置換for{process=process;}}else{//memory_null=isNull;//獲取內(nèi)存中的空位號if{////獲取各內(nèi)存塊中頁面距下次被訪問的時間for{memory.next=nextAccess;}//輸出各內(nèi)存塊中頁面距下次被訪問的時間System.out.print;for{System.out.print;}System.out.println;//獲取未來最長時間內(nèi)不被訪問的頁面號max=memory.next;max_page=0;for{if{max=memory.next;max_page=j;}}//將未來最長時間內(nèi)不被訪問的頁面號置換為新頁面System.out.println;memory.page=page;//置換lack++;//更新缺頁次數(shù)//記錄process=max_page+1;//發(fā)生置換process=page;for{if{process=process;}}}else{//System.out.println;memory.page=page;//將新頁面放入內(nèi)存塊的空位中for{System.out.print;}System.out.println;//記錄process=0;//沒有置換process=page;for{if{if{process=process;}else{process=-1;}}}}}}System.out.println;System.out.printlnlack/page_num);System.out.println;for{for{System.out.print;}System.out.println;}return0;}五、設(shè)計結(jié)果圖1頁面號文件圖2讀入頁面號圖3自動運(yùn)行圖4單步運(yùn)行六、設(shè)計體會本次課程設(shè)計不僅讓我對操作系統(tǒng)這門課程有了更深入的研究、對很多重要的概念有了鞏固和掌握。通過努力,三個頁面置換算法程序都已經(jīng)完成。雖然自己所做的很少也不夠完善,但畢竟也是努力的結(jié)果。主要有以下幾點收獲:
1.通過對上網(wǎng)和看書查閱相關(guān)資料,使自己對JAVA語言的基本框架有新的了解,加深了對可視化程序的認(rèn)識。
2.在使用Java語言來實現(xiàn)功能時,不像以往用的其他語言,它比較簡練,更容易理解,實用性很強(qiáng)。
3.先進(jìn)先出頁面置換和LRU以及OPT算法各有特點,但是實踐起來卻很大,使自己對頁面置換算法有了新的認(rèn)識。
另外,和同學(xué)的合作也讓我收獲了許多,本來做界面是我的短板,但卻是同學(xué)的強(qiáng)項,和他合作讓我在這方面也有很大收獲,學(xué)到了不少東西。七、附錄代碼:第一個FIFOControl.javapublicclassFIFOControl{//privateintnum={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//使用無參構(gòu)造函數(shù)privateintnum=newint;privateintnumLength;privateintpg=newint;privateinttimepg=newint;privateintPageNum;publicintstore;FIFOControl{this.PageNum=3;numLength=20;intnumtemp={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};for{num=numtemp;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}FIFOControl//參數(shù):1.物理塊數(shù)2.頁面序列號3.頁面序列號數(shù)組長度meiyong{this.PageNum=nump;numLength=nlength;for{num=n;}for{pg=-1;timepg=1;}store=newint;for{for{store=-1;}}for{store=0;}}privatebooleancheckInPage{for{timepg++;}for{if{returntrue;}}returnfalse;}privatevoidcaculate{//將物理頁框裝滿inttimer=0;//橫著的指針for{pg=num;for//加時間{timepg++;}for//數(shù)據(jù)放到store中去{store=pg;}timer++;}//把后面的數(shù)據(jù)按先進(jìn)先出的順序放到物理塊中for{if)//如果在物理框中將對應(yīng)位時間置為1{for//把這次物理塊中的數(shù)據(jù)存儲起來{store=pg;}timer++;}else//否則找出時間最長的,將其置換,并將對應(yīng)位的時間置為1{intmax=timepg;intmaxvalue=pg;intmaxindex=0;inttemp;for//找到時間最大的物理塊{temp=timepg;if{max=temp;maxvalue=pg;maxindex=n;}}//System.out.println;//System.out.println;pg=num;timepg=1;for//把這次的數(shù)據(jù)存儲起來{store=pg;}store=maxindex+1;timer++;}}//測試查看結(jié)果//for//seshi//{//for//{//System.out.print;//}//System.out.println;//}}publicintgetStore{this.caculate;returnstore;}}2.第二個LRUControl.javapublicclassLRUControl{//privateintnum={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//使用無參構(gòu)造函數(shù)privateintnum=newint;//使用有參構(gòu)造函數(shù)privateintnumLength;privateintPageNum;privatePagepg=newPage;publicintstore;publicinttemp1;LRUControl{PageNum=3;numLength=num.length;store=newint;for{pg=newPage;if{this.pg.setValue;this.pg.setTime;}else{System.out.println;}}}LRUControl//參數(shù):1.物理塊數(shù)2.頁面序列號3.頁面序列號數(shù)組長度meiyong{this.PageNum=nump;numLength=nlength;for{num=n;}store=newint;//gaidongtemp1=newint;for{pg=newPage;if{this.pg.setValue;this.pg.setTime;}else{System.out.println;}}}privatebooleancheckInPage{for{p.setTime+1);}for{if){returntrue;}}returnfalse;}voidcaculate{inttimer=0;//前PageNum個,先將物理快裝滿for{pg.setValue;pg.setTime;for{pg.setTime+1);}for{store=pg.getValue;}timer++;}for{store=0;}//num數(shù)組后面的頁面檢查每一個是否在前面出現(xiàn)過,有置該頁框時間為1,沒有則在原基礎(chǔ)上加1for{if)//如果在物理框中將對應(yīng)位時間置為1{for//把num和pg中相等的物理塊時間置1{if){pg.setTime;break;}}for//把這次物理塊中的數(shù)據(jù)存儲起來{store=pg.getValue;}store=0;timer++;}else//否則找出時間最長的,將其置換,并將對應(yīng)位的時間置為1{intmax=pg.getTime;intmaxindex=0;inttemp;for//找到時間最大的物理塊{temp=pg.getTime;if{max=temp;maxindex=n;}}//System.out.println;//System.out.println;pg.setTime;pg.setValue;for//把這次的數(shù)據(jù)存儲起來{store=pg.getValue;}store=maxindex+1;timer++;}}}voiddisplay{for{for{System.out.print;}System.out.println;}}privatevoidadjustStore{for{for{temp1=store;}}for{temp1=store;}}publicintgetStore{adjustStore;returntemp1;}}3.第三個和第二個關(guān)聯(lián)的是第二個page類的實現(xiàn)Page.javapublicclassPage{privateinttime;privateintvalue;publicvoidsetTime{this.time=t;}publicvoidsetValue{this.value=v;}publicintgetTime{returnthis.time;}publicintgetValue{returnthis.value;}Page{time=0;value=0;}}4.第四個MyFrame.javaimportjava.awt.Color;importjava.awt.Dimension;importjava.awt.FileDialog;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.TextArea;importjava.awt.Toolkit;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.image.BufferedImage;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjavax.swing.ButtonGroup;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JRadioButton;importjavax.swing.JScrollPane;importjavax.swing.JSlider;importjavax.swing.JTextField;importjavax.swing.SwingConstants;//頁面置換算法publicclassMyFrameextendsJFrameimplementsActionListener,Runnable{intwidth=Toolkit.getDefaultToolkit.getScreenSize.width;//取得屏幕的寬度intheight=Toolkit.getDefaultToolkit.getScreenSize.height;//取得屏幕的高度intsize=10;//字體大小privateJTextFieldtextField1,textField2;privateJButtonbutton1,button2,button3,button4,button5,button6;privateJRadioButtonradioButton1,radioButton2;privateButtonGroupbuttongroup;privateJLabellabel1,label2,label3,label4,label5,label6;privateJLabellabel_page=newJLabel;privateJLabellabel_sign=newJLabel;//記錄運(yùn)行位置privateJLabellabel_memory=newJLabel;//記錄內(nèi)存塊變化情況privateJLabellabel_memory_LRU=newJLabel;//記錄內(nèi)存塊變化情況privateJLabellabel_memory_FIFO=newJLabel;//記錄內(nèi)存塊變化情況privateJSliderslider;//滑動條privateJPanelpanel;privateJScrollPanescrollPane;//滾動面板//定義打開和保存對話框privateFileDialogopenDia,saveDia;privateTextAreatextArea;privateFilefile;privateFilesaveFile;//當(dāng)前點擊的按鈕privateintbutton_chose=0;//記錄自動運(yùn)行當(dāng)前運(yùn)行到的位置privatestaticintlocation=0;Threadthread=newThread;//輸入的頁面號privateStringpage=newString;privateintpage_int=newint;//輸入的頁面號個數(shù)privateintpage_num=0;//內(nèi)存塊數(shù)privateintmemory_num=3;//最佳置換算法缺頁次數(shù)privateintOptimal_lack=0;//記錄置換過程privateintprocess_memory=newint;//創(chuàng)建LRU對象帶入?yún)?shù)LRUControllru;intprocess_memory_LRU;//LRU置換算法缺頁次數(shù)privateintOptimal_lack_LRU=0;//FIFO//創(chuàng)建對象帶入?yún)?shù)FIFOControlfifo;//創(chuàng)建一個數(shù)組用來接收數(shù)據(jù)intprocess_memory_FIFO;//FIFO置換算法缺頁次數(shù)privateintOptimal_lack_FIFO=0;privateColorcolors={Color.cyan,Color.orange,Color.green,Color.pink,Color.yellow,Color.cyan,Color.orange,Color.green,Color.pink,Color.yellow,Color.cyan,Color.orange,Color.green,Color.pink,Color.yellow,Color.cyan,Color.orange,Color.green,Color.pink,Color.yellow,};MyFrame{//構(gòu)造函數(shù)this.setTitle;this.setSize;this.setLocation/2,/2);this.setLayout;//設(shè)置布局方式label1=newJLabel;label1.setBounds;this.add;textField1=newJTextField;textField1.setBounds;this.add;button1=newJButton;button1.setBounds;button1.addActionListener;this.add;radioButton1=newJRadioButton;radioButton2=newJRadioButton;buttongroup=newButtonGroup;buttongroup.add;buttongroup.add;radioButton1.setBounds;radioButton2.setBounds;this.add;this.add;label2=newJLabel;label2.setBounds;this.add;slider=newJSlider;slider.setBounds;slider.setValue;//設(shè)置滑動條的初始值slider.setMajorTickSpacing;//設(shè)置主刻度標(biāo)記的間隔slider.setMinorTickSpacing;//設(shè)置次刻度標(biāo)記的間隔slider.setPaintTicks;//設(shè)置滑塊繪制刻度標(biāo)記,顯示劃分刻度的slider.setPaintLabels;slider.setSnapToTicks;this.add;//textArea=newTextArea;//textArea.setBounds;//this.add;panel=newJPanel;//panel.setBounds;panel.setBackground;panel.setPreferredSize);//主要是這句代碼,設(shè)置panel的首選大小,同時保證寬高大于JScrollPane的寬高,這樣下面的JScrollPane才會出現(xiàn)滾動條panel.setLayout;//設(shè)置panel的布局方式//this.add;scrollPane=newJScrollPane;scrollPane.setBackground;scrollPane.setBounds;scrollPane.setVerticalScrollBarPolicy;//scrollPane.getHorizontalScrollBar.setValue;//設(shè)置滾動條的水平位置//scrollPane.getVerticalScrollBar.setValue;//設(shè)置滾動條的豎直位置//this.add;this.getContentPane.add;label3=newJLabel;label3.setFont);label3.setBounds;panel.add;label4=newJLabel;label4.setFont);label4.setBounds;panel.add;label5=newJLabel;label5.setFont);label5.setBounds;panel.add;label6=newJLabel;label6.setFont);label6.setBounds;panel.add;button3=newJButton;button3.setBounds;button3.addActionListener;this.add;button4=newJButton;button4.setBounds;button4.addActionListener;this.add;button5=newJButton;button5.setBounds;button5.addActionListener;this.add;textArea=newTextArea;textArea.setText;textArea.setBounds;this.add;button6=newJButton;button6.setBounds;button6.addActionListener;this.add;this.setVisible;this.setResizable;//thread.start;for{for{label_memory=newJLabel;label_memory_LRU=newJLabel;label_memory_FIFO=newJLabel;}}//默認(rèn)模式為FileDialog.LOADopenDia=newFileDialog;saveDia=newFileDialog;}//清空面板publicvoidremovePanel{panel.removeAll;//清空面板panel.add;panel.add;panel.add;panel.add;panel.repaint;//刷新面板}publicvoidactionPerformed{charch;Stringstr=““;//intpage2={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};//intpage_num=20;//intmemory_num=3;//Optimal;if==button1){//打開源文件removePanel;//清空面板openDia.setVisible;StringdirPath=openDia.getDirectory;//獲取文件路徑StringfileName=openDia.getFile;//獲取文件名稱//System.out.println;textField1.setText;//如果打開路徑或目錄為空則返回空ifreturn;//textArea.setText;//清空文本file=newFile;try{BufferedReaderbufr=newBufferedReader);Stringline=null;intn=0;while)。=null){//將輸入的頁面號保存到page數(shù)組中for;i++){ch=line.charAt;if{str=str+ch;if-1){//獲取最后一個字符page=str;}}else{if){//page=Integer.parseInt;page=str;n++;str=““;}}ifbreak;}ifbreak;}bufr.close;page_num=n;System.out.println;for{//textArea.append;//if){label_page=newJLabel;label_page.setFont);label_page.setBounds;label_page.setOpaque;//設(shè)置其為不透明,才可以顯示出背景顏色label_page.setBackground;label_page.setHorizontalAlignment;//內(nèi)容居中panel.add;//}}panel.repaint;//刷新面板//將從文件中讀入的頁面號信息轉(zhuǎn)化為整形for{try{page_int=Integer.parseInt;}catch{//e1.printStackTrace;JOptionPane.showMessageDialog;page_num=0;break;}}//獲取內(nèi)存塊數(shù)//memory_num=slider.getValue;//System.out.println;//最佳置換算法//Optimal;}catch{thrownewRuntimeException;}}elseif==button3){//重置removePanel;//清空面板for{panel.add;//加入讀入的頁面信息}panel.repaint;//刷新面板location=0;}elseif==button4){//自動運(yùn)行//button_chose=4;//獲取內(nèi)存塊數(shù)memory_num=slider.getValue;//最佳置換算法Optimal;//LRUlru=newLRUControl;//調(diào)用對象的計算函數(shù)lru.caculate;//要傳出的二維數(shù)組process_memory_LRU=newint;//調(diào)用對象返回參數(shù)方法process_memory_LRU=lru.getStore;System.out.println;for{for{System.out.print;}System.out.println;}//FIFOfifo=newFIFOControl;process_memory_FIFO=newint;process_memory_FIFO=fifo.getStore;System.out.println;for{for{System.out.print;}System.out.println;}if{JOptionPane.showMessageDialog;}else{removePanel;//清空面板for{panel.add;//加入讀入的頁面信息}panel.repaint;//刷新面板newThread{publicvoidrun{button4.setEnabled;//將自動運(yùn)行按鈕設(shè)置為不可點擊,防止因多次點擊而造成顯示混亂button5.setEnabled;//根據(jù)內(nèi)存塊的多少動態(tài)調(diào)整各顯示標(biāo)簽的位置intfrist_y=0;if{frist_y=memory_num-4;label5.setBounds;label6.setBounds;}else{label5.setBounds;label6.setBounds;}scrollPane.getHorizontalScrollBar.setValue;//設(shè)置滾動條的水平位置Optimal_lack=0;//最佳置換缺頁數(shù)置零Optimal_lack_LRU=0;//LRU缺頁數(shù)置零Optimal_lack_FIFO=0;//FIFO缺頁數(shù)置零//繪制頁面置換情況for{label_sign.setBounds;label_sign.setHorizontalAlignment;//內(nèi)容居中panel.add;//最佳置換算法for{if{//內(nèi)存塊為空label_memory.setText;}else{label_memory.setText;//process_memory+““}label_memory.setBounds;label_memory.setHorizontalAlignment;//內(nèi)容居中l(wèi)abel_memory.setOpaque;//設(shè)置其為不透明,才可以顯示出背景顏色if{//發(fā)生置換且當(dāng)前內(nèi)存塊為發(fā)生置換的內(nèi)存塊label_memory.setBackground;Optimal_lack++;//發(fā)生置換,缺頁數(shù)加一}else{label_memory.setBackground;}panel.add;}//LRUfor{//System.out.println;if{//內(nèi)存塊為空label_memory_LRU.setText;}else{label_memory_LRU.setText;//process_memory+““}label_memory_LRU.setBounds+20*j,30,20);label_memory_LRU.setHorizontalAlignment;//內(nèi)容居中l(wèi)abel_memory_LRU.setOpaque;//設(shè)置其為不透明,才可以顯示出背景顏色if{//發(fā)生置換且當(dāng)前內(nèi)存塊為發(fā)生置換的內(nèi)存塊label_memory_LRU.setBackground;Optimal_lack_LRU++;//發(fā)生置換,缺頁數(shù)加一}else{label_memory_LRU.setBackground;}panel.add;}//FIFOfor{if{//內(nèi)存塊為空label_memory_FIFO.setText;}else{label_memory_FIFO.setText;//process_memory+““}label_memory_FIFO.setBounds+20*j,30,20);label_memory_FIFO.setHorizontalAlignment;//內(nèi)容居中l(wèi)abel_memory_FIFO.setOpaque;//設(shè)置其為不透明,才可以顯示出背景顏色if{//發(fā)生置換且當(dāng)前內(nèi)存塊為發(fā)生置換的內(nèi)存塊label_memory_FIFO.setBackground;Optimal_lack_FIFO++;//發(fā)生置換,缺頁數(shù)加一}else{label_memory_FIFO.setBackground;}panel.add;}if{//輸出超過一定范圍時,滾動條隨顯示輸出動態(tài)變化scrollPane.getHorizontalScrollBar.setValue);//設(shè)置滾動條的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 武漢音樂學(xué)院《光電技術(shù)課程設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 合同補(bǔ)充協(xié)議3篇
- 醫(yī)院藥品采購合同的付款條件3篇
- 出版社印刷委托合同3篇
- 醫(yī)院藥品采購合同的終止原因3篇
- 區(qū)域代理商的合同格式3篇
- 物流欠款合同范例
- 雙方購房交易合同范例
- 追回裝修欠款合同范例
- 武漢商貿(mào)職業(yè)學(xué)院《生物技術(shù)創(chuàng)新與創(chuàng)業(yè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 必刷題2024六年級英語上冊語法規(guī)則專項專題訓(xùn)練(含答案)
- 2024新教科版四年級上冊科學(xué)知識點總結(jié)精簡版
- 人工智能在礦產(chǎn)勘探中的應(yīng)用分析篇
- 中西文化鑒賞智慧樹知到答案2024年鄭州大學(xué)
- 2024國開大學(xué)《經(jīng)濟(jì)學(xué)基礎(chǔ)》形考任務(wù)2答案
- 2024山東省招聘社區(qū)工作者試題及答案
- 14《答謝中書書》對比閱讀-2024-2025中考語文文言文閱讀專項訓(xùn)練(含答案)
- DL∕T 5494-2014 電力工程場地地震安全性評價規(guī)程
- 顱腦外傷病人的急救和護(hù)理
- 大型儲罐制作安裝施工方案
- 2024版《供電營業(yè)規(guī)則》學(xué)習(xí)考試題庫500題(含答案)
評論
0/150
提交評論