操作系統(tǒng)實(shí)驗(yàn)4請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)_第1頁(yè)
操作系統(tǒng)實(shí)驗(yàn)4請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)_第2頁(yè)
操作系統(tǒng)實(shí)驗(yàn)4請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)_第3頁(yè)
操作系統(tǒng)實(shí)驗(yàn)4請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)_第4頁(yè)
操作系統(tǒng)實(shí)驗(yàn)4請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)四請(qǐng)求分頁(yè)存儲(chǔ)管理模擬實(shí)驗(yàn)一:實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)對(duì)頁(yè)面、頁(yè)表、地址轉(zhuǎn)換和頁(yè)面置換過(guò)程的模擬,加深對(duì)請(qǐng)求分頁(yè)存儲(chǔ)管理系統(tǒng)的原理和實(shí)現(xiàn)技術(shù)的理解。二:實(shí)驗(yàn)內(nèi)容假設(shè)每個(gè)頁(yè)面可以存放10條指令,分配給進(jìn)程的存儲(chǔ)塊數(shù)為4。用C語(yǔ)言或Pascal語(yǔ)言模擬一進(jìn)程的執(zhí)行過(guò)程。設(shè)該進(jìn)程共有320條指令,地址空間為32個(gè)頁(yè)面,運(yùn)行前所有頁(yè)面均沒有調(diào)入內(nèi)存。模擬運(yùn)行時(shí),如果所訪問的指令已經(jīng)在內(nèi)存,則顯示其物理地址,并轉(zhuǎn)下一條指令;如果所訪問的指令還未裝入內(nèi)存,則發(fā)生缺頁(yè),此時(shí)需要記錄缺頁(yè)產(chǎn)生次數(shù),并將相應(yīng)頁(yè)面調(diào)入內(nèi)存,如果4個(gè)內(nèi)存塊已滿,則需要進(jìn)行頁(yè)面置換。最后顯示其物理地址,并轉(zhuǎn)下一條指令。在所有指令執(zhí)行完畢后,顯

2、示進(jìn)程運(yùn)行過(guò)程中的缺頁(yè)次數(shù)和缺頁(yè)率。頁(yè)面置換算法:分別采用OPT、FIFO、LRU三種算法。進(jìn)程中的指令訪問次序按如下原則生成:50%的指令是順序執(zhí)行的。25%的指令是均勻分布在低地址部分。25%的指令是均勻分布在高地址部分。三:實(shí)驗(yàn)類別分頁(yè)存儲(chǔ)管理四:實(shí)驗(yàn)類型模擬實(shí)驗(yàn)五:主要儀器計(jì)算機(jī)六:結(jié)果OPT:LRU:FIFO:七:程序# include<stdio.h># include<stdlib.h># include<conio.h># define blocknum 4/頁(yè)面尺寸大小int m; /程序計(jì)數(shù)器,用來(lái)記錄按次序執(zhí)行的指令對(duì)應(yīng)的頁(yè)號(hào)stati

3、c int num320; /用來(lái)存儲(chǔ)320條指令typedef struct BLOCK /聲明一種新類型-物理塊類型 int pagenum; /頁(yè)號(hào)int accessed; /訪問量,其值表示多久未被訪問BLOCK; BLOCK blockblocknum; /定義一大小為8的物理塊數(shù)組void init() /程序初始化函數(shù),對(duì)block初始化 for(int i=0;i<blocknum;i+) blocki.pagenum=-1;blocki.accessed=0;m=0;int pageExist(int curpage)/查找物理塊中頁(yè)面是否存在,尋找該頁(yè)面curpag

4、e是否在內(nèi)存塊block中,若在,返回塊號(hào)for(int i=0; i<blocknum; i+) if(blocki.pagenum = curpage )return i; /在內(nèi)存塊block中,返回塊號(hào)return -1;int findSpace()/查找是否有空閑物理塊,尋找空閑塊block,返回其塊號(hào)for(int i=0;i<blocknum;i+) if(blocki.pagenum=-1)return i; /找到了空閑的block,返回塊號(hào) return -1;int findReplace()/查找應(yīng)予置換的頁(yè)面 int pos = 0;for(int i=

5、0;i<blocknum;i+) if(blocki.accessed > blockpos.accessed)pos = i; /找到應(yīng)該置換頁(yè)面,返回BLOCK中位置 return pos;void display()/顯示物理塊中的頁(yè)面號(hào) for(int i=0; i<blocknum; i+) if(blocki.pagenum != -1)printf(" %02d ",blocki.pagenum);printf("%p |",&blocki.pagenum);printf("n");void r

6、andam()/產(chǎn)生320條隨機(jī)數(shù),顯示并存儲(chǔ)到num320 int flag=0;printf("請(qǐng)為一進(jìn)程輸入起始執(zhí)行指令的序號(hào)(0320):n");scanf("%d",&m);/用戶決定的起始執(zhí)行指令printf("*進(jìn)程中指令訪問次序如下:(由隨機(jī)數(shù)產(chǎn)生)*n");for(int i=0;i<320;i+)/進(jìn)程中的320條指令訪問次序的生成numi=m;/當(dāng)前執(zhí)行的指令數(shù),if(flag%2=0) m=+m%320;/順序執(zhí)行下一條指令if(flag=1) m=rand()%(m-1);/通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到低

7、地址部分0,m-1的一條指令處,設(shè)其序號(hào)為m1if(flag=3) m=m+1+(rand()%(320-(m+1);/通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到高地址部分m1+2,319的一條指令處,設(shè)其序號(hào)為m2flag=+flag%4;printf(" %03d",numi);/輸出格式:3位數(shù)if(i+1)%10=0) /控制換行,每個(gè)頁(yè)面可以存放10條指令,共32個(gè)頁(yè)面printf("n"); void pagestring() /顯示調(diào)用的頁(yè)面序列,求出此進(jìn)程按次序執(zhí)行的各指令所在的頁(yè)面號(hào)并顯示輸出 for(int i=0;i<320;i+)printf(&q

8、uot; %02d",numi/10);/輸出格式:2位數(shù)if(i+1)%10=0)/控制換行,每個(gè)頁(yè)面可以存放10條指令,共32個(gè)頁(yè)面printf("n");void OPT() /最佳替換算法 int n=0;/記錄缺頁(yè)次數(shù)int exist,space,position;int curpage;/當(dāng)前指令的頁(yè)面號(hào)for(int i=0;i<320;i+) m=numi; curpage=m/10;exist=pageExist(curpage);if(exist=-1) /當(dāng)前指令的頁(yè)面號(hào)不在物理塊中space=findSpace();if(space

9、 != -1) /當(dāng)前存在空閑的物理塊blockspace.pagenum = curpage; /將此頁(yè)面調(diào)入內(nèi)存display();/顯示物理塊中的頁(yè)面號(hào)n+;/缺頁(yè)次數(shù)+1else /當(dāng)前不存在空閑的物理塊,需要進(jìn)行頁(yè)面置換for(int k=0;k<blocknum;k+)for(int j=i;j<320;j+)/找到在最長(zhǎng)(未來(lái))時(shí)間內(nèi)不再被訪問的頁(yè)面if(blockk.pagenum!= numj/10) blockk.accessed = 1000; /將來(lái)不會(huì)被訪問,設(shè)置為一個(gè)很大數(shù)else /將來(lái)會(huì)被訪問,訪問量設(shè)為jblockk.accessed = j;br

10、eak; position = findReplace();/找到被置換的頁(yè)面 ,淘汰blockposition.pagenum = curpage;/ 將新頁(yè)面調(diào)入display();n+; /缺頁(yè)次數(shù)+1printf("缺頁(yè)次數(shù):%dn",n);printf("缺頁(yè)率:%f%n",(n/320.0)*100);void LRU() /最近最久未使用算法 int n=0;/記錄缺頁(yè)次數(shù)int exist,space,position ;int curpage;/當(dāng)前指令的頁(yè)面號(hào)for(int i=0;i<320;i+) m=numi; curpa

11、ge=m/10;exist = pageExist(curpage);if(exist=-1) /當(dāng)前指令的頁(yè)面號(hào)不在物理塊中space = findSpace();if(space != -1) /當(dāng)前存在空閑的物理塊blockspace.pagenum = curpage; /將此頁(yè)面調(diào)入內(nèi)存display();/顯示物理塊中的頁(yè)面號(hào)n+;/缺頁(yè)次數(shù)+1else /當(dāng)前不存在空閑的物理塊,需要進(jìn)行頁(yè)面置換position = findReplace(); blockposition.pagenum = curpage; display();n+; /缺頁(yè)次數(shù)+1else blockexis

12、t.accessed = -1;/恢復(fù)存在的并剛訪問過(guò)的BLOCK中頁(yè)面accessed為-1for(int j=0; j<blocknum; j+)/其余的accessed+blockj.accessed+;printf("缺頁(yè)次數(shù):%dn",n);printf("缺頁(yè)率:%f%n",(n/320.0)*100);void FIFO() int n=0;/記錄缺頁(yè)次數(shù) int exist,space,position ; int curpage;/當(dāng)前指令的頁(yè)面號(hào) int blockpointer=-1; for(int i=0;i<320

13、;i+) m=numi; curpage=m/10; exist = pageExist(curpage); if(exist=-1) /當(dāng)前指令的頁(yè)面號(hào)不在物理塊中 space = findSpace(); if(space != -1) /當(dāng)前存在空閑的物理塊 blockpointer+; blockspace.pagenum=curpage; /將此頁(yè)面調(diào)入內(nèi)存 n+;/缺頁(yè)次數(shù)+1 display();/顯示物理塊中的頁(yè)面號(hào) else / 沒有空閑物理塊,進(jìn)行置換 position = (+blockpointer)%4; blockposition.pagenum = curpage

14、; /將此頁(yè)面調(diào)入內(nèi)存 n+; display(); printf("缺頁(yè)次數(shù):%dn",n); printf("缺頁(yè)率:%f%n",(n/320.0)*100); void main() int choice;printf("*請(qǐng)求分頁(yè)存儲(chǔ)管理模擬系統(tǒng)*n");randam();printf("*此進(jìn)程的頁(yè)面調(diào)用序列如下*n");pagestring();while(choice != 4) printf("*1:OPT 2:LRU 3:FIFO 4:退出*n");printf("請(qǐng)選擇一種頁(yè)面置換算法:"); scanf("%d",&choice);init();switch(choice) case 1:printf("最佳置換算法OPT:n");printf("頁(yè)面號(hào) 物理地址 頁(yè)面號(hào) 物理地址 頁(yè)面號(hào) 物理地址 頁(yè)面號(hào) 物理地址n");OPT();b

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論