南昌大學(xué)操作系統(tǒng)實驗報告存儲管理的模擬實現(xiàn)
《南昌大學(xué)操作系統(tǒng)實驗報告存儲管理的模擬實現(xiàn)》由會員分享,可在線閱讀,更多相關(guān)《南昌大學(xué)操作系統(tǒng)實驗報告存儲管理的模擬實現(xiàn)(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
南 昌 大 學(xué) 實 驗 報 告---( 5) 存 儲 管 理 的 模 擬 實 現(xiàn)學(xué)生姓名: 張皓然 學(xué) 號: 5501215001 專業(yè)班級: 本碩 151 實驗類型:□ 驗證 □ 綜合 ■ 設(shè)計 □ 創(chuàng)新 實驗日期: 實驗成績: 一、實驗?zāi)康拇鎯芾淼闹饕δ苤皇呛侠淼胤峙淇臻g。請求頁式管理是一種常用的虛擬存儲管理技術(shù)。本實驗的目的是通過請求頁式存儲管理中頁面置換算法模擬設(shè)計,了解虛擬存儲技術(shù)的特點,掌握請求頁式管理的頁面置換算法。二、實驗內(nèi)容1.過隨機(jī)數(shù)產(chǎn)生一個指令序列,共 320 條指令。其地址按下述原則生成:①50%的指令是順序執(zhí)行的;②25%的指令是均勻分布在前地址部分;③25%的指令是均勻分布在后地址部分;#具體的實施方法是:A. 在[0,319]的指令地址之間隨機(jī)選區(qū)一起點 M;B. 順序執(zhí)行一條指令,即執(zhí)行地址為 M+1 的指令;C. 在前地址[0,M+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為 M’;D. 順序執(zhí)行一條指令,其地址為 M’+1;E. 在后地址[M’+2,319]中隨機(jī)選取一條指令并執(zhí)行;F. 重復(fù) A—E,直到執(zhí)行 320 次指令。2.指令序列變換成頁地址流設(shè):(1)頁面大小為 1K;(2) 用戶內(nèi)存容量為 4 頁到 32 頁;(3) 用戶虛存容量為 32K。在用戶虛存中,按每 K 存放 10 條指令排列虛存地址,即 320 條指令在虛存中的存放方式為:第 0 條—第 9 條指令為第 0 頁(對應(yīng)虛存地址為[0,9]) ;第 10 條—第 19 條指令為第 1 頁(對應(yīng)虛存地址為[10,19]) ;。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。 。第 310 條—第 319 條指令為第 31 頁(對應(yīng)虛存地址為[310,319]) ;按以上方式,用戶指令可組成 32 頁。3. 計算并輸出下述各種算法在不同內(nèi)存容量下的命中率。A. FIFO 先進(jìn)先出的算法B. LRU 最近最少使用算法C.LFU 最少訪問頁面算法三、實驗要求1、需寫出設(shè)計說明;2、設(shè)計實現(xiàn)代碼及說明3、運行結(jié)果;四、主要實驗步驟代碼如下:#include #include #include #include #ifndef _UNISTD_H#define _UNISTD_H#include #include #endif#define TRUE 1#define FALSE 0#define INVALID -1#define total_instruction 320 //指令流長#define total_vp 32 //虛頁頁長#define clear_period 50 //清零周期typedef struct //頁面結(jié)構(gòu){int pn, //頁面序號pfn, //頁面所在內(nèi)存區(qū)的幀號counter, //單位時間內(nèi)訪問量time;}pl_type;pl_type pl[total_vp]; //頁面結(jié)構(gòu)數(shù)組struct pfc_struct{ //頁面控制結(jié)構(gòu)int pn, //頁面號pfn; //內(nèi)存區(qū)頁面的幀號//頁面指針,用于維護(hù)內(nèi)存緩沖區(qū)的鏈?zhǔn)浇Y(jié)構(gòu)struct pfc_struct *next;};typedef struct pfc_struct pfc_type; //主存區(qū)頁面控制結(jié)構(gòu)名稱pfc_type pfc[total_vp], //主存區(qū)頁面控制結(jié)構(gòu)數(shù)組*freepf_head, //空閑頁面頭指針*busypf_head, //忙頁面頭指針*busypf_tail; //忙頁面尾指針int diseffect; //缺頁計數(shù)器int a[total_instruction]; //指令流數(shù)組int page[total_instruction]; //指令對應(yīng)的頁面號int offset[total_instruction]; //指令所在頁面的偏移量//初始化頁面結(jié)構(gòu)數(shù)組和頁面控制結(jié)構(gòu)數(shù)組int initialize(int);int FIFO(int); //先進(jìn)先出int LRU(int); //最近最久未使用int OPT(int); //最佳置換算法int CLOCK(int); //clock 置換算法int main( ){int s;int i;srand(10*getpid()); s = (int)((float)(total_instruction-1)*(rand()/(RAND_MAX+1.0)));printf("\n------------隨機(jī)產(chǎn)生指令流 ------------\n");for (i=0; ipl[j].time&&pl[j].pfn!=INVALID){MinT=pl[j].time;MinPn=j;}}//釋放最久未訪問的頁面freepf_head= //最久未訪問頁面被換出主存pl[MinPn].pfn=INVALID;//最久未訪問頁面的訪問時間設(shè)置為無效 pl[MinPn].time=-1;freepf_head->next=NULL;}pl[page[i]].pfn=freepf_head->pfn; pl[page[i]].time=CurrentTime;freepf_head=freepf_head->next; }elsepl[page[i]].time=CurrentTime; CurrentTime++; }printf("%6.3f\t",1-(float)diseffect/320);return 0;}//最佳置換算法int OPT(int total_pf){int i,j;int MaxD; //將來最近一次訪問距離的最大值int MaxPn; //對應(yīng)的頁號int dis; //距離計數(shù)器int dist[total_vp];initialize(total_pf); diseffect=0;for(i=0;inext=NULL;pl[MaxPn].pfn=INVALID;}pl[page[i]].pfn=freepf_head->pfn; freepf_head=freepf_head->next;}//if}//forprintf("%6.3f\t",1-(float)diseffect/320);return 0;}int CLOCK(int total_pf){int i;int use[total_vp]; //使用位int swap;swap=0; initialize(total_pf);pfc_type *pnext; //時鐘指針pfc_type *head; //隊列頭指針pnext=freepf_head;head=freepf_head;for(i=0;ipfn]==1) {use[pnext->pfn]=0;pnext=pnext->next;if(pnext==NULL) pnext=head; //形成循環(huán)隊列}//換出被替換的頁pl[pnext->pn].pfn=INVALID;swap=1;}if(use[pnext->pfn]==0){ //換入相應(yīng)的頁 pl[page[i]].pfn=pnext->pfn; pnext->pn=page[i]; use[pnext->pfn]=1;pnext=pnext->next;if(pnext==NULL) pnext=head;if(swap==0){ freepf_head=freepf_head->next; }}}else{//頁面在主存中use[pl[page[i]].pfn]=1; //使用位置 1 }}printf("%6.3f\t",1-(float)diseffect/320);return 0;}int FIFO(int total_pf){int i;int use[total_vp];int swap=0;initialize(total_pf);pfc_type *pnext,*head;pnext=freepf_head;head=freepf_head;for(i=0;ipfn]==1){use[pnext->pfn]=0;pnext=pnext->next;if(pnext==NULL) pnext=head;}pl[pnext->pn].pfn=INVALID;swap=1;}if(use[pnext->pfn]==0){ pl[page[i]].pfn=pnext->pfn; pnext->pn=page[i]; use[pnext->pfn]=1;pnext=pnext->next;if(pnext==NULL) pnext=head;if(swap==0){ freepf_head=freepf_head->next; }}}}printf("%6.3f\t",1-(float)diseffect/320);return 0;}FIFO 算法流程圖:開始頁面存入數(shù)組 p[]初始化內(nèi)存塊 page[]結(jié)束P[i]是否已在內(nèi)存中i++Page[]是否有空將最先裝入 page[]中的頁面置換出去直接將 p[i]裝入內(nèi)存i++i<32輸出當(dāng)前頁面的 命中率是否是否是否LRU 算法流程圖:開始頁面存入數(shù)組 p[]初始化內(nèi)存塊 page[]結(jié)束P[i]是否已在內(nèi)存中i++Page[]是否有空將最近最久未使用的頁面從 page[]中的頁面置換出去直接將 p[i]裝入內(nèi)存i++i<32輸出當(dāng)前頁面的 命中率是否是否是否OPT 算法流程圖:開始頁面存入數(shù)組 p[]初始化內(nèi)存塊 page[]結(jié)束P[i]是否已在內(nèi)存中i++Page[]是否有空將距離最遠(yuǎn)的頁面從page[]中的頁面置換出去直接將 p[i]裝入內(nèi)存i++i<32輸出當(dāng)前頁面的 命中率是否是否是否Clock 算法流程圖:開始查詢指針前進(jìn)一步頁面訪問位=0 置頁面訪問位=0選擇該頁面淘汰結(jié)束是否五、實驗數(shù)據(jù)及處理結(jié)果隨機(jī)產(chǎn)生指令流,并給出不同置換策略的命中率表。發(fā)現(xiàn) OPT 命中率較高。六、實驗體會或?qū)Ω倪M(jìn)實驗的建議存儲管理子系統(tǒng)是操作系統(tǒng)中最重要的組成部分之一,它的目的是方便用戶使用和提高存儲器利用率。通過這次實驗更加清楚了四種頁面置換算法的實現(xiàn)過程,通過比較了解到了他們的異同之處。七、參考資料《計算機(jī)操作系統(tǒng)》西安電子科技大學(xué)出版社- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 南昌大學(xué) 操作系統(tǒng) 實驗 報告 存儲 管理 模擬 實現(xiàn)
鏈接地址:http://www.3dchina-expo.com/p-359713.html