![存儲器管理實驗報告_第1頁](http://file4.renrendoc.com/view/f987714a89155b0d5cff6305857ffebd/f987714a89155b0d5cff6305857ffebd1.gif)
![存儲器管理實驗報告_第2頁](http://file4.renrendoc.com/view/f987714a89155b0d5cff6305857ffebd/f987714a89155b0d5cff6305857ffebd2.gif)
![存儲器管理實驗報告_第3頁](http://file4.renrendoc.com/view/f987714a89155b0d5cff6305857ffebd/f987714a89155b0d5cff6305857ffebd3.gif)
![存儲器管理實驗報告_第4頁](http://file4.renrendoc.com/view/f987714a89155b0d5cff6305857ffebd/f987714a89155b0d5cff6305857ffebd4.gif)
![存儲器管理實驗報告_第5頁](http://file4.renrendoc.com/view/f987714a89155b0d5cff6305857ffebd/f987714a89155b0d5cff6305857ffebd5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
操作系統(tǒng)實驗報告2012年12月24日學(xué)號1008114124姓名L劉凱利時間12月27日專業(yè)計算機科學(xué)與技術(shù)班級計科二班實驗題目:存儲器管理實驗?zāi)康模?.通過模擬實現(xiàn)最佳頁面置換的算法,熟悉存儲器管理方式;2.掌握虛擬存儲請求頁式存儲管理中幾種頁面置換算法的基本思想,并用三種至少三種算法來模擬實現(xiàn);3.比較對幾種置換算法頁面,對比他們的優(yōu)缺點,并通過比較更換頻率來對比它們的效率;實驗原理:為了提高內(nèi)存利用率,提供了內(nèi)外存進程對換機制,內(nèi)存空間的分配和回收均以頁為單位進行,一個進程只需將其一部分(段或頁)調(diào)入內(nèi)存便可運行。當進程在運行中需要訪問某部分程序和數(shù)據(jù)時,發(fā)現(xiàn)其所在頁面不在內(nèi)存,就立即提出請求(向CPU發(fā)出缺中斷)由系統(tǒng)將其所需頁面調(diào)入內(nèi)存。如果進程的許多頁是存放在外存的一個連續(xù)區(qū)域中,則一次調(diào)入若干個相鄰的頁,會比一次調(diào)入一頁的效率更高效一些。但如果調(diào)入的一批頁面中的大多數(shù)都未被訪問,則又是低效的。可采用一種以預(yù)測為基礎(chǔ)的預(yù)調(diào)頁策略,將那些預(yù)計在不久之后便會被訪問的頁面,預(yù)先調(diào)入內(nèi)存。如果預(yù)測較準確,那么,這種策略顯然是很有吸引力的。但目前預(yù)調(diào)頁的成功率僅為50%。且這種策略主要用于進程的首次調(diào)入時,由程序員指出應(yīng)該先調(diào)入哪些頁。當進程在運行中需要訪問某部分程序和數(shù)據(jù)時,若發(fā)現(xiàn)其所在的頁面不在內(nèi)存,便即提出請求,由OS將其所需頁面調(diào)入內(nèi)存。由請示調(diào)頁策略所確定調(diào)入的頁,是一定會被訪問的,再加之請求調(diào)頁策略比較易于實現(xiàn),故在目前的虛擬存儲器中,大多采用此策略。但這種策略每次僅調(diào)入一頁,故須花費較大的系統(tǒng)開銷,增加了磁盤I/O的啟用頻率。實驗步驟:先進先出(FIFO)置換算法通過淘汰最先進入內(nèi)存的頁面,即選淘汰在內(nèi)存中駐留時間最久的頁面。該算法實現(xiàn)簡單,只需把一個進程已調(diào)入內(nèi)存的頁面,按照先后次序連接成一個隊列,并設(shè)置一個替換指針,使它總指向最老的頁面。2.最近久未使用(LRU)置換算法根據(jù)頁面調(diào)入內(nèi)存后的使用情況來進行決策的,賦予每個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經(jīng)歷的時間,當需淘汰一個頁面的時候選擇現(xiàn)有頁面中其時間值最大的進行淘汰。3.最佳(OPT)置換算法所選擇的被淘汰的頁面,將是以后不使用的,或者是在未來時間內(nèi)不再被訪問的頁面,采用最佳算法,通??杀WC獲得最低的缺頁率。常用函數(shù):voidFIFO():計算使用FIFO算法時的命中率,voidLRU():計算使用LRU算法時的命中率,voidOPT():計算使用OPT算法時的命中率,inttotal_pf:用戶進程的內(nèi)存頁面數(shù),intdisaffect:頁面失效次數(shù).程序Main.cpp:#include<iostream>#include<string>#include<vector>#include<cstdlib>#include<cstdio>#include<unistd.h>usingnamespacestd;#defineINVALID-1constintTOTAL_INSTRUCTION(320);constintTOTAL_VP(32);constintCLEAR_PERIOD(50);#include"Page.h"#include"PageControl.h"#include"Memory.h"intmain(){inti; CMemorya; for(i=4;i<=32;i++) {a.FIFO(i); a.LRU(i); cout<<"\n"; } return0;}Memory.h:#ifndef_MEMORY_H#define_MEMORY_HclassCMemory{public: CMemory(); voidinitialize(constintnTotal_pf); voidFIFO(constintnTotal_pf);voidLRU(constintnTotal_pf);voidOPT(constintnTotal_pf);private: vector<CPage>_vDiscPages;//硬盤頁面總數(shù) vector<CPageControl>_vMemoryPages;//內(nèi)存頁面總數(shù) CPageControl*_pFreepf_head,*_pBusypf_head,*_pBusypf_tail; vector<int>_vMain,_vPage,_vOffset; int_nDiseffect;//頁面失效次數(shù)};CMemory::CMemory():_vDiscPages(TOTAL_VP),//硬盤共32個頁面 _vMemoryPages(TOTAL_VP),//內(nèi)存共32個頁面 _vMain(TOTAL_INSTRUCTION),/*共320條指令,在320條指令有很多指令可能具有相同的頁地址不同的偏移地址,所以共32個頁面,每頁10條指令(在硬盤上的)*/ _vPage(TOTAL_INSTRUCTION),//共320個頁地址 _vOffset(TOTAL_INSTRUCTION)//共320個偏移地址{ inti,S,nRand; srand(getpid()*10); nRand=rand()%32767; S=(int)319*nRand/32767+1; for(i=0;i<TOTAL_INSTRUCTION;i+=4)//共320個 { _vMain[i]=S; _vMain[i+1]=_vMain[i]+1;//連著上一個順序執(zhí)行 nRand=rand()%32767; _vMain[i+2]=(int)_vMain[i]*nRand/32767; _vMain[i+3]=_vMain[i+2]+1;//連著上一個順序執(zhí)行 nRand=(int)rand()%32767; S=(int)nRand*(318-_vMain[i+2])/32767+_vMain[i+2]+2; } for(i=0;i<TOTAL_INSTRUCTION;i++)//共320個 { _vPage[i]=_vMain[i]/10; _vOffset[i]=_vMain[i]%10; _vPage[i]%=32; }}voidCMemory::initialize(constintnTotal_pf){ intix; _nDiseffect=0; for(ix=0;ix<_vDiscPages.size();ix++) { _vDiscPages[ix].m_nPageNumber=ix;//硬盤中的頁號 _vDiscPages[ix].m_nPageFaceNumber=INVALID;//在沒有調(diào)入內(nèi)存時為-1 _vDiscPages[ix].m_nCounter=0; _vDiscPages[ix].m_nTime=-1; } for(ix=1;ix<nTotal_pf;ix++) { _vMemoryPages[ix-1].m_pNext=&_vMemoryPages[ix]; _vMemoryPages[ix-1].m_nPageFaceNumber=ix-1;/*內(nèi)存頁號,此時PageNumber沒有賦值因為此時沒有產(chǎn)生調(diào)用*/ } _vMemoryPages[nTotal_pf-1].m_pNext=NULL; _vMemoryPages[nTotal_pf-1].m_nPageFaceNumber=nTotal_pf-1; _pFreepf_head=&_vMemoryPages[0];}voidCMemory::FIFO(constintnTotal_pf){ inti; CPageControl*p; initialize(nTotal_pf); _pBusypf_head=_pBusypf_tail=NULL; for(i=0;i<TOTAL_INSTRUCTION;i++)//共320條指令連續(xù)調(diào)用 { if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID)/*判斷是否已在內(nèi)存中,如果已在內(nèi)存就什么都不做,如果不在內(nèi)存就進行調(diào)入,每次調(diào)入一頁*/ { _nDiseffect+=1;//不在內(nèi)存就加1統(tǒng)計缺頁次數(shù) if(_pFreepf_head==NULL)/*無空閑頁面,進行置換,找出忙隊列的第一個置換出。*/ { p=_pBusypf_head->m_pNext; _vDiscPages[_pBusypf_head->m_nPageNumber].m_nPageFaceNumber=INVALID;//要置換出,所以置-1 _pFreepf_head=_pBusypf_head;/*每次都把忙隊列的頭給讓出,則是先來先服務(wù)*/ _pFreepf_head->m_pNext=NULL; _pBusypf_head=p; } p=_pFreepf_head->m_pNext;//有空閑頁面 _pFreepf_head->m_pNext=NULL; _pFreepf_head->m_nPageNumber=_vPage[i];_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFaceNumber; if(_pBusypf_tail==NULL) _pBusypf_head=_pBusypf_tail=_pFreepf_head; else { _pBusypf_tail->m_pNext=_pFreepf_head; _pBusypf_tail=_pFreepf_head; } _pFreepf_head=p; } } cout<<"FIFO:"<<1-(float)_nDiseffect/320;}voidCMemory::LRU(constintnTotal_pf){inti,j,nMin,minj,nPresentTime(0);initialize(nTotal_pf);for(i=0;i<TOTAL_INSTRUCTION;i++){if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID) { _nDiseffect++; if(_pFreepf_head==NULL)//無空閑頁面 { nMin=32767; for(j=0;j<TOTAL_VP;j++)//getthesubscribeoftheleastusedpage //aftertherecycleiMinisthenumberoftimes //usedoftheleastusedpagewhileminjisitssubscribe if(nMin>_vDiscPages[j].m_nTime&&_vDiscPages[j].m_nPageFaceNumber!=INVALID) { nMin=_vDiscPages[j].m_nTime; minj=j; }_pFreepf_head=&_vMemoryPages[_vDiscPages[minj].m_nPageFaceNumber]; _vDiscPages[minj].m_nPageFaceNumber=INVALID; _vDiscPages[minj].m_nTime=-1; _pFreepf_head->m_pNext=NULL; }_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFaceNumber; _vDiscPages[_vPage[i]].m_nTime=nPresentTime; _pFreepf_head=_pFreepf_head->m_pNext; }else _vDiscPages[_vPage[i]].m_nTime=nPresentTime;nPresentTime++;}cout<<"LRU:"<<1-(float)_nDiseffect/320;}voidCMemory::OPT(constintnTotal_pf){inti,j,max,maxpage,nDistance,vDistance[TOTAL_VP];initialize(nTotal_pf);for(i=0;i<TOTAL_INSTRUCTION;i++){if(_vDiscPages[_vPage[i]].m_nPageFaceNumber==INVALID)//頁面不在內(nèi)存中 {_nDiseffect++; if(_pFreepf_head==NULL){//如果沒有空閑頁面找到最不經(jīng)常用的那個,將其置換出 for(j=0;j<TOTAL_VP;j++)if(_vDiscPages[j].m_nPageFaceNumber!=INVALID)vDistance[j]=32767;/*如果在內(nèi)存中*/ else vDistance[j]=0;//如果不在內(nèi)存中nDistance=1;for(j=i+1;j<TOTAL_INSTRUCTION;j++){if((_vDiscPages[_vPage[j]].m_nPageFaceNumber!=INVALID)&&(vDistance[_vPage[j]]==32767))vDistance[_vPage[j]]=nDistance;nDistance++;}max=-1;for(j=0;j<TOTAL_VP;j++) if(max<vDistance[j]){max=vDistance[j];maxpage=j;}_pFreepf_head=&_vMemoryPages[_vDiscPages[maxpage].m_nPageFaceNumber];_pFreepf_head->m_pNext=NULL;_vDiscPages[maxpage].m_nPageFaceNumber=INVALID;}//如果在有空閑頁面或者最不經(jīng)常用的已經(jīng)置換出,把空隊列的頭指向的頁面_vDiscPages[_vPage[i]].m_nPageFaceNumber=_pFreepf_head->m_nPageFaceNumber;_pFreepf_head=_pFreepf_head->m_pNext;}}cout<<"OPT:"<<1-(float)_nDiseffect/320;}#endif#endif磁盤頁面結(jié)構(gòu):Page.h:#ifndef_PAGE_H#define_PAGE_HclassCPage{public: intm_nPageNumber,//磁盤上的頁號 m_nPageFaceNumber,//內(nèi)存中的頁號 m_nCounter, m_nTime;};#endif內(nèi)存頁面結(jié)構(gòu):PageControl.h:#ifndef_PAGECONTROL_H#define_PAGECONTROL_HclassCPageControl{public: intm_nPageNumber,m_nPageFaceNumber; classCPageControl*m_pNext;};#endif實驗結(jié)果與分析:實驗結(jié)果:FIFO:0.534375LRU:0.534375OPT:0.6375FIFO:0.55LRU:0.546875OPT:0.6625FIFO:0.56875LRU:0.559375OPT:0.6875FIFO:0.571875LRU:0.56875OPT:0.709375FIFO:0.590625LRU:0.58125OPT:0.73125FIFO:0.6125LRU:0.6OPT:0.75FIFO:0.628125LRU:0.6125OPT:0.765625FIFO:0.646875LRU:0.640625OPT:0.78125FIFO:0.659375LRU:0.66875OPT:0.796875FIFO:0.675LRU:0.68125OPT:0.809375FIFO:0.70625LRU:0.690625OPT:0.821875FIFO:0.721875LRU:0.709375OPT:0.834375FIFO:0.7375LRU:0.73125OPT:0.84375FIFO:0.753125LRU:0.746875OPT:0.853125FIFO:0.7625LRU:0.7625OPT:0.859375FIFO:0.765625LRU:0.784375OPT:0.865625FIFO:0.778125LRU:0.803125OPT:0.871875FIFO:0.79375LRU:0.803125OPT:0.875FIFO:0.815625LRU:0.815625OPT:0.878125FIFO:0.815625LRU:0.834375OPT:0.88125FIFO:0.834375LRU:0.840625OPT:0.884375FIFO:0.859375LRU:0.85OPT:0.8875FIFO:0.865625LRU:0.8625OPT:0.890625FIFO:0.86875LRU:0.875OPT:0.89375FIFO:0.86875LRU:0.890625OPT:0.896875FIFO:0.875LRU:0.89375OPT:0.9FIFO:0.88125LRU:0.896875OPT:0.9FIFO:0.884375LRU:0.896875OPT:0.9FIFO:0.9LRU:0.9OPT:0.9結(jié)果分析:理論上,三種置換算法的命中率由高到底排列應(yīng)該是OPT>LRU>FIFO。實際上,從實驗數(shù)據(jù)觀測得到,存在這種由高到低的趨勢,由page=4時可以觀測到,但是效果不是很明顯。效果不明顯的原因:推測與指令流的產(chǎn)生方式有關(guān)系。因為指令流的產(chǎn)生方式要能體現(xiàn)局部性原理,所以該指令流產(chǎn)生設(shè)計為:50%的指令是順序執(zhí)的,25
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年五年級數(shù)學(xué)下冊 7 折線統(tǒng)計圖第1課時 單式折線統(tǒng)計圖配套說課稿 新人教版001
- 2025城鎮(zhèn)土地開發(fā)和商品房借款合同協(xié)議書范本范文
- 9 生活離不開規(guī)則 (說課稿)2023-2024學(xué)年統(tǒng)編版道德與法治三年級下冊001
- 2025工地集控室裝飾裝修工程分包合同
- 2025原料玉原料玉米電FEGN子交易合同文本
- 2025二手房交易合同(合同版本)
- 2024年五年級數(shù)學(xué)上冊 3 小數(shù)除法練習課說課稿 新人教版
- 2024年高中歷史 第三單元 從人文精神之源到科學(xué)理性時代 第13課 挑戰(zhàn)教皇的權(quán)威說課稿 岳麓版必修3
- Unit 6 Growing Up(說課稿)2023-2024學(xué)年人教新起點版英語五年級下冊001
- 2024秋七年級英語下冊 Module 8 Story time Unit 3 Language in use說課稿 (新版)外研版
- 【重慶長安汽車公司績效管理現(xiàn)狀、問題及優(yōu)化對策(7600字論文)】
- 計算機網(wǎng)絡(luò)畢業(yè)論文3000字
- 2023年大學(xué)物理化學(xué)實驗報告化學(xué)電池溫度系數(shù)的測定
- 農(nóng)村公共基礎(chǔ)知識
- 腦出血的護理課件腦出血護理查房PPT
- 煤礦機電運輸安全培訓(xùn)課件
- 扣繳個人所得稅報告表-(Excel版)
- Unit+4+History+and+Traditions單元整體教學(xué)設(shè)計課件 高中英語人教版(2019)必修第二冊單元整體教學(xué)設(shè)計
- 提高預(yù)埋螺栓安裝一次驗收合格率五項qc2012地腳
- 2023年全國自學(xué)考試00054管理學(xué)原理試題答案
- 六年級譯林版小學(xué)英語閱讀理解訓(xùn)練經(jīng)典題目(附答案)
評論
0/150
提交評論