操作系統(tǒng)實驗4請求分頁存儲管理模擬實驗_第1頁
操作系統(tǒng)實驗4請求分頁存儲管理模擬實驗_第2頁
操作系統(tǒng)實驗4請求分頁存儲管理模擬實驗_第3頁
操作系統(tǒng)實驗4請求分頁存儲管理模擬實驗_第4頁
操作系統(tǒng)實驗4請求分頁存儲管理模擬實驗_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

5、0;i<blocknum;i+) if(blocki.accessed > blockpos.accessed)pos = i; /找到應(yīng)該置換頁面,返回BLOCK中位置 return pos;void display()/顯示物理塊中的頁面號 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條隨機數(shù),顯示并存儲到num320 int flag=0;printf("請為一進程輸入起始執(zhí)行指令的序號(0320):n");scanf("%d",&m);/用戶決定的起始執(zhí)行指令printf("*進程中指令訪問次序如下:(由隨機數(shù)產(chǎn)生)*n");for(int i=0;i<320;i+)/進程中的320條指令訪問次序的生成numi=m;/當(dāng)前執(zhí)行的指令數(shù),if(flag%2=0) m=+m%320;/順序執(zhí)行下一條指令if(flag=1) m=rand()%(m-1);/通過隨機數(shù),跳轉(zhuǎn)到低

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

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

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

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

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

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

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

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

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論