




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
...wd......wd......wd...實(shí)驗(yàn)二頁(yè)面置換算法實(shí)現(xiàn)一、實(shí)驗(yàn)?zāi)康摹?〕了解內(nèi)存分頁(yè)管理策略〔2〕掌握調(diào)頁(yè)策略〔3〕掌握一般常用的調(diào)度算法〔4〕學(xué)會(huì)各種存儲(chǔ)分配算法的實(shí)現(xiàn)方法?!?〕了解頁(yè)面大小和內(nèi)存實(shí)際容量對(duì)命中率的影響。二、實(shí)驗(yàn)內(nèi)容采用頁(yè)式分配存儲(chǔ)方案,通過(guò)分別計(jì)算不同算法的命中率來(lái)比擬算法的優(yōu)劣,同時(shí)也考慮頁(yè)面大小及內(nèi)存實(shí)際容量對(duì)命中率的影響,設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法來(lái)模擬實(shí)現(xiàn)頁(yè)面的置換:1.先進(jìn)先出的算法〔FIFO〕2.最近最久未使用算法〔LRU〕3.最正確置換算法〔OPT〕實(shí)驗(yàn)分析在進(jìn)程運(yùn)行過(guò)程中,假設(shè)其所訪問(wèn)的頁(yè)面不存在內(nèi)存而需要把它們調(diào)入內(nèi)存,但內(nèi)存已無(wú)空閑時(shí),為了保證該進(jìn)程能夠正常運(yùn)行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁(yè)程序或數(shù)據(jù)送磁盤(pán)的對(duì)換區(qū)中。但應(yīng)調(diào)出哪個(gè)頁(yè)面,需根據(jù)一定的算法來(lái)確定,算法的好壞,直接影響到系統(tǒng)的性能。一個(gè)好的頁(yè)面置換算法,應(yīng)該有較低的頁(yè)面更換頻率。2.1先進(jìn)先出〔FIFO〕頁(yè)面置換算法當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面時(shí),首先查看物理塊中是否就有這個(gè)頁(yè)面,假設(shè)要查看的頁(yè)面物理塊中就有,則直接顯示,不需要替換頁(yè)面;如果要查看的頁(yè)面物理塊中沒(méi)有,就需要尋找空閑物理塊放入,假設(shè)存在有空閑物理塊,則將頁(yè)面放入;假設(shè)沒(méi)有空閑物理塊,則替換頁(yè)面。并將物理塊中所有頁(yè)面timer++。2.2最近久未使用(LRU)置換算法的思路最近久未使用置換算法的替換規(guī)則,是根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況來(lái)進(jìn)行決策的。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間,當(dāng)需淘汰一個(gè)頁(yè)面的時(shí)候選擇現(xiàn)有頁(yè)面中其時(shí)間值最大的進(jìn)行淘汰。2.3最正確〔OPT〕置換算法的思路其所選擇的被淘汰的頁(yè)面,是以后不使用的,或者是在未來(lái)時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面,采用最正確算法,通??杀WC獲得最低的缺頁(yè)率。實(shí)驗(yàn)流程3.1系統(tǒng)功能圖圖3-1系統(tǒng)功能圖3.2算法流程圖先進(jìn)先出〔FIFO〕頁(yè)面置換算法流程圖圖3-2先進(jìn)先出頁(yè)面置換算法流程圖最近久未使用(LRU)置換算法圖3-3最近久未使用置換算法流程圖最正確〔OPT〕置換算法圖3-4最正確置換算法流程圖源程序#include<iostream.h>#include<stdlib.h>#include<time.h>#include<stdio.h>#defineL20//頁(yè)面長(zhǎng)度最大為20intM;//內(nèi)存塊structPro//定義一個(gè)構(gòu)造體{intnum,time;};Input(intm,Prop[L])//打印頁(yè)面走向狀態(tài){ cout<<"請(qǐng)輸入頁(yè)面長(zhǎng)度(10~20):"; do { cin>>m; if(m>20||m<10) {cout<<endl; cout<<"頁(yè)面長(zhǎng)度必須在10~20之間"<<endl<<endl; cout<<"請(qǐng)重新輸入L:"; } elsebreak; }while(1); inti,j; j=time(NULL);//取時(shí)鐘時(shí)間 srand(j);//以時(shí)鐘時(shí)間j為種子,初始化隨機(jī)數(shù)發(fā)生器 cout<<endl; cout<<"輸出隨機(jī)數(shù):"<<endl; cout<<endl; for(i=0;i<m;i++) { p[i].num=rand()%10;//產(chǎn)生0到9之間的隨機(jī)數(shù)放到數(shù)組p中 p[i].time=0; cout<<p[i].num<<""; } cout<<endl<<endl; returnm;}voidprint(Pro*page1)//打印當(dāng)前的頁(yè)面{ Pro*page=newPro[M]; page=page1; for(inti=0;i<M;i++) cout<<page[i].num<<""; cout<<endl;}intSearch(inte,Pro*page1)//尋找內(nèi)存塊中與e一樣的塊號(hào){ Pro*page=newPro[M]; page=page1; for(inti=0;i<M;i++)if(e==page[i].num)returni;//返回i值 return-1;}intMax(Pro*page1)//尋找最近最長(zhǎng)未使用的頁(yè)面{ Pro*page=newPro[M]; page=page1; inte=page[0].time,i=0; while(i<M)//找出離現(xiàn)在時(shí)間最長(zhǎng)的頁(yè)面 { if(e<page[i].time)e=page[i].time; i++; } for(i=0;i<M;i++)if(e==page[i].time)returni;//找到離現(xiàn)在時(shí)間最長(zhǎng)的頁(yè)面返回其塊號(hào) return-1;}intCount(Pro*page1,inti,intt,Prop[L])//記錄當(dāng)前內(nèi)存塊中頁(yè)面離下次使用間隔長(zhǎng)度{ Pro*page=newPro[M]; page=page1; intcount=0; for(intj=i;j<L;j++) { if(page[t].num==p[j].num)break;//當(dāng)前頁(yè)面再次被訪問(wèn)時(shí)循環(huán)完畢 elsecount++;//否則count+1 } returncount;//返回count的值}intmain(){ intc; intm=0,t=0; floatn=0; Prop[L]; m=Input(m,p);//調(diào)用input函數(shù),返回m值 cout<<"請(qǐng)輸入分配的物理塊m(2~6):"; cout<<endl<<endl; do{ cin>>M; if(M>6||M<2) {cout<<endl; cout<<"物理塊m必須在2~6之間"<<endl<<endl; cout<<"請(qǐng)重新輸入m:";} elsebreak; }while(1); Pro*page=newPro[M]; do{ for(inti=0;i<M;i++)//初始化頁(yè)面根本情況 {page[i].num=0; page[i].time=m-1-i; } i=0; cout<<endl; cout<<"1:FIFO頁(yè)面置換 2:LRU頁(yè)面置換"<<endl; cout<<"3:OPT頁(yè)面置換 4:退出"<<endl; cout<<"請(qǐng)選擇頁(yè)面置換算法:"<<endl; cin>>c; if(c==1)//FIFO頁(yè)面置換 { n=0; cout<<"FIFO算法頁(yè)面置換情況如下:"<<endl; cout<<endl; while(i<m) { if(Search(p[i].num,page)>=0)//當(dāng)前頁(yè)面在內(nèi)存中 { cout<<p[i].num<<"";//輸出當(dāng)前頁(yè)p[i].num cout<<"不缺頁(yè)"<<endl; i++;//i加1 } else//當(dāng)前頁(yè)不在內(nèi)存中 { if(t==M)t=0; else { n++;//缺頁(yè)次數(shù)加1 page[t].num=p[i].num;//把當(dāng)前頁(yè)面放入內(nèi)存中 cout<<p[i].num<<""; print(page);//打印當(dāng)前頁(yè)面 t++;//下一個(gè)內(nèi)存塊 i++;//指向下一個(gè)頁(yè)面 } } } cout<<endl; cout<<"缺頁(yè)次數(shù):"<<n<<"缺頁(yè)率:"<<n/m<<endl<<endl; } if(c==2)//LRU頁(yè)面置換 { n=0; cout<<"LRU算法頁(yè)面置換情況如下:"<<endl; cout<<endl; while(i<m) { inta; t=Search(p[i].num,page); if(t>=0)//如果已在內(nèi)存塊中 {page[t].time=0;//把與它一樣的內(nèi)存塊的時(shí)間置0 for(a=0;a<M;a++) if(a!=t)page[a].time++;//其它的時(shí)間加1 cout<<p[i].num<<""; cout<<"不缺頁(yè)"<<endl; } else//如果不在內(nèi)存塊中 { n++;//缺頁(yè)次數(shù)加1 t=Max(page);//返回最近最久未使用的塊號(hào)賦值給t page[t].num=p[i].num;//進(jìn)展替換 page[t].time=0;//替換后時(shí)間置為0 cout<<p[i].num<<""; print(page); for(a=0;a<M;a++) if(a!=t)page[a].time++;//其它的時(shí)間加1 } i++; } cout<<endl; cout<<"缺頁(yè)次數(shù):"<<n<<"缺頁(yè)率:"<<n/m<<endl<<endl; } if(c==3)//OPT頁(yè)面置換 { n=0; cout<<"OPT算法置換情況如下:"<<endl; cout<<endl; while(i<m) { if(Search(p[i].num,page)>=0)//如果已在內(nèi)存塊中 { cout<<p[i].num<<""; cout<<"不缺頁(yè)"<<endl; i++; } else//如果不在內(nèi)存塊中 { inta=0; for(t=0;t<M;t++) if(page[t].num==0)a++;//記錄空的內(nèi)存塊數(shù) if(a!=0)//有空內(nèi)存 { intq=M; for(t=0;t<M;t++) if(page[t].num==0&&q>t)q=t;//把空內(nèi)存塊中塊號(hào)最小的找出來(lái) page[q].num=p[i].num; n++; cout<<p[i].num<<""; print(page); i++; } else { inttemp=0,s; for(t=0;t<M;t++)//尋找內(nèi)存塊中下次使用離現(xiàn)在最久的頁(yè)面 if(temp<Count(page,i,t,p)) { temp=Count(page,i,t,p); s=t;}//把找到的塊號(hào)賦給s page[s].num=p[i].num; n++; cout<<p[i].num<<""; print(page); i++; } } } cout<<endl; cout<<"缺頁(yè)次數(shù):"<<n<<"缺頁(yè)率:"<<n/m<<endl<<endl; } if(c==4)break;}while(c==1||c==2||c==3);return0;}五、實(shí)驗(yàn)結(jié)果5.1程序主界面運(yùn)行程序后,將會(huì)提示用戶輸入頁(yè)面長(zhǎng)度,長(zhǎng)度在10到20之間。當(dāng)用戶輸入長(zhǎng)度〔以12為例〕后,系統(tǒng)將會(huì)顯示隨機(jī)數(shù)。系統(tǒng)提示用戶輸入分配的物理塊,用戶輸入數(shù)據(jù)〔以3為例〕。程序主界面運(yùn)行圖如圖5-1所示。圖5-1程序主界面5.2先進(jìn)先出(FIFO)頁(yè)面置換算法運(yùn)行結(jié)果選擇算法1之后,進(jìn)入算法1的操作。系統(tǒng)會(huì)顯示算法的頁(yè)面置換情況。先來(lái)先服務(wù)算法的運(yùn)行圖如圖5-2所示。圖5-2先進(jìn)先出頁(yè)面置換算法運(yùn)行結(jié)果圖5.3最近久未使用(LRU)置換算法運(yùn)行結(jié)果選擇算法2之后,進(jìn)入算法2的操作。系統(tǒng)會(huì)顯示算法的頁(yè)面置換情況。最近久未使用的運(yùn)行圖如圖5-3所示。圖5-3最近久未使
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 便攜式高效低損油茶果采收技術(shù)
- 埃博拉出血熱防控培訓(xùn)課件
- PSM考試全景圖試題及答案
- 2024年CPMM考試全面試題及答案
- 2024年CPMM備考總結(jié)與試題及答案
- 廣西欽州市第四中學(xué)2025年高三最后一卷化學(xué)試卷含解析
- CPSM考試常考案例及試題及答案
- 依從性差患者防跌倒課件
- 體育鍛煉防受傷課件
- 值得收藏的2024年CPMM考試試題及答案
- 起重機(jī)械吊具、索具檢查記錄表(卸扣)
- 《《城市社會(huì)學(xué)-芝加哥學(xué)派城市研究文集》》
- 【北京】八上地理知識(shí)點(diǎn)總結(jié)
- 統(tǒng)編版語(yǔ)文一年級(jí)上冊(cè)語(yǔ)文銜接課 課件
- 中小學(xué)-珍愛(ài)生命 遠(yuǎn)離毒品-課件
- 生產(chǎn)計(jì)劃的未來(lái)發(fā)展趨勢(shì)
- 學(xué)術(shù)英語(yǔ)智慧樹(shù)知到答案2024年南開(kāi)大學(xué)
- 人教版小學(xué)數(shù)學(xué)四年級(jí)上冊(cè)1-8單元思維導(dǎo)圖
- 2024年貴州省黔西南州中考?xì)v史真題【附參考答案】
- 人工智能技術(shù)應(yīng)用專(zhuān)業(yè)調(diào)研報(bào)告
- DB11T 774-2010 新建物業(yè)項(xiàng)目交接查驗(yàn)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論