版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上一、目的和要求1、設(shè)計(jì)目的 通過(guò)請(qǐng)求頁(yè)式存儲(chǔ)管理中頁(yè)面置換算法模擬設(shè)計(jì),了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式存儲(chǔ)管理的頁(yè)面置換算法。2、設(shè)計(jì)要求根據(jù)模擬的頁(yè)式管理設(shè)計(jì),掌握在頁(yè)式存儲(chǔ)管理中最基本的三種頁(yè)面調(diào)度算法FIFO、LRU以及OPT。但在三種算法中均要求在調(diào)度程序中產(chǎn)生的頁(yè)面序列是隨機(jī)產(chǎn)生的,而不是人為的輸入,在執(zhí)行時(shí)只需改變頁(yè)面的大小及內(nèi)存容量就可以得到不同的頁(yè)面序列,另外還需要說(shuō)明隨機(jī)的性能和其性能可能對(duì)算法的影響,并對(duì)隨機(jī)性要有一定的參數(shù)控制能力。此外,計(jì)算并輸出FIFO、LRU以及OPT算法在不同內(nèi)存容量下的命中率。根據(jù)方法的執(zhí)行過(guò)程,編寫(xiě)一個(gè)解決上述問(wèn)
2、題的程序,顯示訪問(wèn)每個(gè)值頁(yè)面中的值。具體參數(shù):訪問(wèn)串的長(zhǎng)度,訪問(wèn)串,頁(yè)面?zhèn)€數(shù)。分別用3種不同的方法實(shí)現(xiàn)頁(yè)面的置換,并輸出相關(guān)信息。二、設(shè)計(jì)思路及過(guò)程1、概要設(shè)計(jì)1.1 問(wèn)題概述根據(jù)三種不同的置換算法,依據(jù)其不同的算法方式,分別計(jì)算該算法在不同情況下的命中率,并顯示各頁(yè)面的變化情況。1.2 內(nèi)容分析對(duì)于該課程設(shè)計(jì)中模擬的頁(yè)式存儲(chǔ)管理的頁(yè)面置換過(guò)程,只要掌握其中最基本的三種算法,包括FIFO、LRU及OPT。 但最重要的一點(diǎn)就是要求產(chǎn)生隨機(jī)序列,所以在編寫(xiě)程序時(shí)要采用控制產(chǎn)生隨機(jī)值的種子數(shù)函數(shù),如此能產(chǎn)生隨機(jī)的訪問(wèn)序列。另外,不能在執(zhí)行完一次操作后就只能進(jìn)行另外一種算法的操作,必須還要有更加詳細(xì)的
3、操作,比如:是否要重新得到新序列?還是要不改變?cè)L問(wèn)序列而只改變?cè)L問(wèn)串的內(nèi)存容量?抑或是不操作就退出該算法以進(jìn)行下一種調(diào)度算法?因此,在執(zhí)行完每次操作后都必須要有提示語(yǔ),看是否進(jìn)入更細(xì)節(jié)的操作,還是退出本次算法的操作以進(jìn)入下一種算法的調(diào)度。2、過(guò)程設(shè)計(jì)2.1模塊設(shè)計(jì)在下圖的主模塊設(shè)計(jì)圖中,只注重描繪了頁(yè)式存儲(chǔ)管理的三種主要算法,未描繪出細(xì)節(jié)部分。其中,在執(zhí)行每種算法時(shí)都會(huì)要求輸入你所需要的訪問(wèn)串長(zhǎng)度、隨機(jī)值以及同一種算法的不同內(nèi)存容量,如此就可以得出不同的命中率。另外,在執(zhí)行完該操作后又會(huì)出現(xiàn)三條提示語(yǔ),是重新得到新序列?還是不改變?cè)L問(wèn)序列只改變?cè)L問(wèn)串的內(nèi)存容量?抑或是不操作退出以進(jìn)行下一種調(diào)度
4、算法?這些在下圖中都未一一實(shí)現(xiàn)。=2.2 算法原理分析要學(xué)成功實(shí)現(xiàn)算法,首先要知道各個(gè)方法是怎么做的,即原理是怎樣的,下面是三種算法的原理。FIFO算法是先進(jìn)先出,當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出最先進(jìn)來(lái)的頁(yè)面。LRU算法是最近最久未使用,當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出在當(dāng)前頁(yè)面中最近最久沒(méi)有使用的頁(yè)面。OPT算法是未來(lái)最遠(yuǎn)出現(xiàn),當(dāng)當(dāng)前內(nèi)存中沒(méi)有正要訪問(wèn)的頁(yè)面時(shí),置換出當(dāng)前頁(yè)面中在未來(lái)的訪問(wèn)頁(yè)中最遠(yuǎn)出現(xiàn)的頁(yè)面或再也不出現(xiàn)的頁(yè)面。2.3 程序流程圖本次課程設(shè)計(jì)的主要流程是3種置換算法的流程圖,本人負(fù)責(zé)OPT,流程圖如下所示:NNYY開(kāi)始輸入內(nèi)存中分配頁(yè)數(shù)NY還有請(qǐng)求訪問(wèn)頁(yè)??jī)?nèi)存
5、中是否已存在?直接復(fù)制前一列內(nèi)容內(nèi)存有空頁(yè)?直接插入替換內(nèi)存中將來(lái)不出現(xiàn)或離當(dāng)前最遠(yuǎn)的頁(yè)輸出全部頁(yè)面變化情況結(jié)束據(jù)第一個(gè)訪問(wèn)頁(yè)初始化第一列值圖2.2 OPT算法流程圖三、數(shù)據(jù)定義int length,num_page,count,seed; /length記錄訪問(wèn)串的長(zhǎng)度,num_page頁(yè)面數(shù),count記錄缺頁(yè)次數(shù)int result2030,order30,a10; /result記錄結(jié)果,order存儲(chǔ)訪問(wèn)串,a存儲(chǔ)當(dāng)前頁(yè)面中的值int pos1,flag1,flag2,flag3; /pos1位置變量,flag1等為標(biāo)志變量char result130; /記錄缺頁(yè)數(shù)組四、核心代碼三
6、種置換算法中只列出本人負(fù)責(zé)部分(OPT算法),具體代碼及注釋如下:void opt() /理想型int i,pos10,flag10;/i為for循環(huán)控制語(yǔ)句,pos為位置變量,flag標(biāo)志變量while(1)flag1=flag2=0;for(i=0;i<length;i+)/訪問(wèn)串遍歷if(!search(orderi)/查詢要訪問(wèn)的頁(yè)是否在內(nèi)存中count+;result1i='*'if(anum_page-1!=-1) /表示當(dāng)前頁(yè)面已滿要淘汰一個(gè)memset(pos,-1,sizeof(pos);/初始pos數(shù)組memset(flag,0,sizeof(flag
7、);/初始flag數(shù)組int j,k;for( j=i;j<length;j+)/找當(dāng)前頁(yè)中的值在將來(lái)訪問(wèn)串中對(duì)應(yīng)最近位置for( k=0;k<num_page;k+)if(orderj=ak&&flagk=0)posk=j;flagk=1;cout<<endl;int max=-10,max_pos;for( k=0;k<num_page;k+)/找出位置最遠(yuǎn)的那個(gè)值if(posk=-1)/未出現(xiàn)則跳出,替換該值max_pos=k;break;else if(max<posk)max=posk;max_pos=k;amax_pos=orde
8、ri;else /還有空頁(yè),直接調(diào)入內(nèi)存for(int j=0;j<num_page;j+)if(aj=-1)aj=orderi;break;else result1i=' 'for(int j=0;j<num_page;j+)resultji=aj;again(); /再操作 if(flag1=0&&flag2=0)break;其中的查詢函數(shù)search()具體代碼如下:bool search(int n) /查找當(dāng)前內(nèi)存中是否已存在該頁(yè)int i;for(i=0;i<num_page;i+)if(ai=n)return true;retur
9、n false;其中的再操作函數(shù)again(),具體代碼如下:void again() /用于再輸入print();int numpage,m; printf("* n");printf(" 1.重新輸入新序列.n"); printf(" 2.不改變?cè)L問(wèn)序列只改變頁(yè)面數(shù).n");printf(" 0.不操作退出.n");printf("* n");printf(" 選擇所要操作:");scanf("%d",&m);if(m=1) flag1=1;
10、/重新輸入init(); else if(m=2)flag2=1;cout<<"輸入新頁(yè)面數(shù):" cin>>numpage;num_page=numpage;memset(a,-1,sizeof(a);else return ;五、運(yùn)行截圖根據(jù)不同的分工,限于紙張只列出部分截圖,以下是對(duì)OPT調(diào)度算法的實(shí)驗(yàn)截圖:圖5.1 相同的內(nèi)存容量下不同的訪問(wèn)串序列1 圖5.2 相同的內(nèi)存容量下不同的訪問(wèn)串序列2依上圖5.1和5.2來(lái)看,OPT調(diào)度算法在訪問(wèn)串長(zhǎng)度一致,隨機(jī)值不同以致產(chǎn)生不同的訪問(wèn)串序列時(shí),但頁(yè)面數(shù)相同的情況下,所得到的命中率也不同。圖5.3不同
11、的內(nèi)存容量下相同的訪問(wèn)串序列在上圖5.3中就是對(duì)同一訪問(wèn)串序列進(jìn)行OPT調(diào)度,只是改變其頁(yè)面的大小,得到了不同的命中率。六、小結(jié)生程序,并說(shuō)明隨機(jī)的性能和其性能可能對(duì)算法的影響,對(duì)隨機(jī)性要有一定的參數(shù)控制能力;計(jì)算并輸出FIFO及LRU算法在不同內(nèi)存容量下的命中率。做了這么多次課程設(shè)計(jì)了,大致的過(guò)程都熟悉了,每次的動(dòng)手實(shí)踐,調(diào)動(dòng)了我們主動(dòng)學(xué)習(xí)的積極性, 并引導(dǎo)我們根據(jù)實(shí)際編程要求, 訓(xùn)練自己實(shí)際分析問(wèn)題的能力及編程能力, 并養(yǎng)成良好的編程習(xí)慣。 通過(guò)詳細(xì)的實(shí)例, 循序漸進(jìn)地啟發(fā)我們完成設(shè)計(jì)課程設(shè)計(jì)將要求。從拿到題目到完成整個(gè)編程,從理論到實(shí)踐可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)
12、的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。知識(shí)的獲得是無(wú)止境的,只要你想學(xué),只要你行動(dòng),就一定會(huì)有所收獲的?;厥走@兩個(gè)星期的課程設(shè)計(jì),盡管很是頭痛,很多都不會(huì),但經(jīng)過(guò)努力,我們還是學(xué)了不少知識(shí)的。這期間,老師給了我們?cè)S多幫助,非常感謝!附錄所有源程序代碼如下:#include<iostream>#include<stdlib.h>using namespace st
13、d;int length,num_page,count,seed;int result2030,order30,a10;int pos1,flag1,flag2,flag3;char result130;void init()memset(a,-1,sizeof(a);int i;cout<<"輸入訪問(wèn)串的長(zhǎng)度:"cin>>length;cout<<"輸入種子數(shù)控制產(chǎn)生的隨機(jī)值:"cin>>seed;srand(seed);cout<<"產(chǎn)生的隨機(jī)訪問(wèn)串:"for(i=0;i
14、<length;i+)/cin>>orderi;orderi=rand()%10;cout<<orderi<<" "cout<<endl; cout<<"輸入頁(yè)面的個(gè)數(shù):"cin>>num_page;void print()int i,j;cout<<"(*表示缺頁(yè))"<<endl;cout<<endl;for( j=0;j<length;j+)printf("%2d ",orderj);cout
15、<<endl;for( i=0;i<num_page;i+)for( j=0;j<length;j+)if(resultij=-1) printf(" ");elseprintf("%2d ",resultij);cout<<endl;for( j=0;j<length;j+)printf("%2c ",result1j);cout<<endl;cout<<"缺頁(yè)率:"<<count<<"/"<<
16、;length;printf("=%.1lf",(count*1.0)/(length*1.0)*100);cout<<"%"<<endl;bool search(int n) /查找當(dāng)期內(nèi)存是否已存在int i;for(i=0;i<num_page;i+)if(ai=n)return true;return false;void again() /用于再輸入print();int numpage,m; printf("* n");printf(" 1.重新輸入新序列.n"); pri
17、ntf(" 2.不改變?cè)L問(wèn)序列只改變頁(yè)面數(shù).n");printf(" 0.不操作退出.n");printf("* n");printf(" 選擇所要操作:");scanf("%d",&m);if(m=1) flag1=1; /重新輸入init(); else if(m=2)flag2=1;cout<<"輸入新頁(yè)面數(shù):"cin>>numpage;num_page=numpage;memset(a,-1,sizeof(a);else return
18、;void fifo() /先進(jìn)先出int i,thisn=0;while(1)count=0;flag1=flag2=0;for(i=pos1;i<length;i+)if(!search(orderi)count+;result1i='*'if(anum_page-1!=-1) /表示當(dāng)前頁(yè)面已滿要淘汰一個(gè)athisn= orderi;thisn+;if(thisn>=num_page)thisn=0;elsefor(int j=0;j<num_page;j+)if(aj=-1)aj=orderi;break;else result1i='
19、9;for(int j=0;j<num_page;j+)resultji=aj;again(); /再操作 if(flag1=0&&flag2=0)break;void lru() /最久最近沒(méi)使用int i,pos10;while(1)count=0;flag1=flag2=0;memset(pos,-1,sizeof(pos);for(i=pos1;i<length;i+)if(!search(orderi)count+;result1i='*'if(anum_page-1!=-1) /表示當(dāng)前頁(yè)面已滿要淘汰一個(gè)int j,k;for( j=0;
20、j<i;j+) /查找當(dāng)前頁(yè)中的值對(duì)應(yīng)的最近位置for( k=0;k<num_page;k+)if(orderj=ak)posk=j;int min=pos0,min_pos=0;for( k=1;k<num_page;k+)/找出位置最遠(yuǎn)的那個(gè)if(min>posk)min=posk;min_pos=k;amin_pos=orderi;else /還有空頁(yè)for(int j=0;j<num_page;j+)if(aj=-1)aj=orderi;break;else result1i=' 'for(int j=0;j<num_page;j+)
21、resultji=aj;again(); /再操作 if(flag1=0&&flag2=0)break;void opt() /理想型int i,pos10,flag10;while(1)flag1=flag2=0;for(i=0;i<length;i+)if(!search(orderi)count+;result1i='*'if(anum_page-1!=-1) /表示當(dāng)前頁(yè)面已滿要淘汰一個(gè)memset(pos,-1,sizeof(pos);memset(flag,0,sizeof(flag);int j,k;for( j=i;j<length;j+)/找出當(dāng)前頁(yè)中的值在將來(lái)訪問(wèn)串中對(duì)應(yīng)的最近位置for( k=0;k<num_page;k+)if(orderj=ak&&flagk=0)posk=j;flagk=1;cout<<endl;int max=-10,max_pos;for( k=0;k<num_page;k+)/找出位置最遠(yuǎn)的那個(gè)值if(posk=-1)/未出現(xiàn)則跳出,替換該值max_pos=k;break;else if(max<posk)max=posk;max_
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 取用水領(lǐng)域信用評(píng)價(jià)指標(biāo)及評(píng)分標(biāo)準(zhǔn)
- 《水文分析與計(jì)算》本科題集
- 班子領(lǐng)導(dǎo)在新單位見(jiàn)面會(huì)上的講話
- 石淋與現(xiàn)代藝術(shù)融合
- 江蘇省蘇州市姑蘇區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期10月月考?xì)v史卷(含答案)
- 2024年電銀項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2023年帶鋼傳輸自動(dòng)糾偏裝置資金申請(qǐng)報(bào)告
- 2023年自動(dòng)絡(luò)筒機(jī)投資申請(qǐng)報(bào)告
- 2024年實(shí)驗(yàn)室儀器裝置項(xiàng)目資金籌措計(jì)劃書(shū)代可行性研究報(bào)告
- 強(qiáng)化現(xiàn)場(chǎng)6S管理-推進(jìn)班組建設(shè)
- HLA-LJ-185混流式水輪機(jī)導(dǎo)水機(jī)構(gòu)安裝作業(yè)指導(dǎo)書(shū)2
- 商城開(kāi)發(fā)合同
- 220千伏變電站現(xiàn)場(chǎng)運(yùn)行通用規(guī)程
- 海綿城市建設(shè)難點(diǎn)與對(duì)策
- 綠化工程竣工資料(全套)
- 我的叔叔于勒(劇本)精編版
- 中班語(yǔ)言:我眼中的秋天
- 2002全國(guó)水利預(yù)算定額
- 視頻監(jiān)控系統(tǒng)質(zhì)量檢查表(完整版)
- (西班牙語(yǔ))戶口本翻譯模板
- 齊魯制藥處方藥營(yíng)銷策略及實(shí)施
評(píng)論
0/150
提交評(píng)論