久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

頁面置換算法實驗報告(五篇模版)

時間:2019-05-14 11:16:52下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《頁面置換算法實驗報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《頁面置換算法實驗報告》。

第一篇:頁面置換算法實驗報告

計算機體系結構

實驗報告

班級:計科姓名:張華敏學號:

0902班

0909090814

FIFU算法

一,實驗內容:

編寫一段程序來模擬頁面置換算法中的FIFU算法的實現 二,算法設計:

設置一個產生隨機數的函數rand()產生隨機數來模擬程序所需訪問的頁面的標號,如果頁面需要被訪問則把頁面中的一個標志位設為in表示他已經被調入內存,如果再次需要訪問此頁面是只需檢查此頁面的標志位是否為in就可判斷它是否已經存在在內存中了,如果已經存在則可直接使用,如果不存在則需調入,在調入新頁面是先檢查內存空間是否已滿,如果未滿則直接調入,如果已經滿了則需選擇一個頁面將其調出,調出時就把頁面的標志位設為out。選擇頁面的規則是:將進入內存時間最久的頁面調出去,為了達到這一目的,在頁面中設置一個計數器,每當有新頁面調入內存時則將內存中已經存在的頁面計數器自動加一,調出頁面時就選擇那個計數器最大值的頁面,調出后重新將計數器設為零。三,遇到的問題及解決方案:

在做此實驗時遇到了一些小問題,如在C語言中函數名定義為export()則會報錯。在調用有返回值的函數是如果直接int s=use(pag)則會運行出錯,要先分開寫如:int s,s=use(pag).四,源代碼 頭文件.cpp #include #include

int t;//全局變量,用來盛放rand()函數產生的隨機數

enum boolean{in,out};//定義一個枚舉類型 /////////如果把in,out換成 true,false則會處錯誤

typedef struct { int num;//頁面編號 char content;//頁面內容

enum boolean flog;//判斷此頁面是否頁調入,調入為true,否則為false;int count;//頁面計數器

int usebit;//使用位,被使用過值為1,否則為0 }page;

FIFU.cpp #include #include #include #include“頭文件.cpp”

int capacity=3;//設置內存最多可以容納的頁面數

void initialize(page p[])//初始化頁面函數 { for(int i=0;i<5;i++)//初始化頁面,頁面內容分別為小寫字母 abcde,計數器全部為0 {p[i].num=i;p[i].content=i+97;p[i].flog=out;p[i].count=0;} }

int use(page p[]){ t=rand()%5;//產生一個0-5的隨機數,if(p[t].flog==in){ printf(“tt%d頁面命中n”,t);//for(int i=0;i<5;i++)//調入此頁面后其他以在內存中存在的頁面計數器加1 // { // if(p[i].flog==in)// p[i].count++;// } return(1);} else return(0);}

void import(page p[])//調入頁面的函數 { /* int t=rand()%5;//產生一個0-5的隨機數,if(p[t].flog==in)printf(“tt%d頁面命中n”,t);*/ // if(p[t].flog==out)//如果此頁面未被調入內存則立即調入 p[t].flog=in;capacity--;//調入后內存空間減少一葉

for(int i=0;i<5;i++)//調入此頁面后其他以在內存中存在的頁面計數器加1 { if(p[i].flog==in&&p[i].num!=t)p[i].count++;} printf(“頁面%d被調入內存n”,t);}

void port(page p[])//調出頁面的函數,,,,,,,,,,,如果函數名定義為export則處錯誤 { int x=0,y;//x用來暫時存放計數器 中的最大值,y存放此頁面的頁面號 for(int i=0;i<5;i++)//尋找計數器值最大的 頁面 { if(p[i].count>x){ x=p[i].count;y=i;} }

p[y].flog=out;//修改調入符號 p[y].count=0;capacity++;//調入后內存空間增加一葉 printf(“ttt頁面%d被調出內存n”,y);}

main(){ int s;long t3,t1,t2;page pag[5];//定義五個頁面,,,,,,,,,,,如果這個定義在子函數之前那么不用通過參數 子函數便可以直接訪問 t3=time(NULL);initialize(pag);do { t1=time(NULL);s=use(pag);//,,,,,,,,,,,,,,如果這里寫成int s=use(pag)則會運行出錯

//printf(“s=%d capacity=%dn”,s,capacity);if(capacity>0&&s==0)import(pag);else { if(capacity==0&&s==0){ port(pag);import(pag);} } t2=time(NULL);while(t2-t1<1){ t2=time(NULL);} }while(t2-t3<20);system(“pause”);}

五,測試結果:

LFU算法

一,實驗內容:

編寫一段程序來模擬頁面置換算法中的LFU算法的實現 二,算法設計:

設置一個產生隨機數的函數rand()產生隨機數來模擬程序所需訪問的頁面的標號,如果頁面需要被訪問則把頁面中的一個標志位設為in表示他已經被調入內存,如果再次需要訪問此頁面是只需檢查此頁面的標志位是否為in就可判斷它是否已經存在在內存中了,如果已經存在則可直接使用,如果不存在則需調入,在調入新頁面是先檢查內存空間是否已滿,如果未滿則直接調入,如果已經滿了則需選擇一個頁面將其調出,調出時就把頁面的標志位設為out。選擇頁面的規則是:將最近一段時間未被訪問過的頁面調出。為了達到這一目的在頁面中設置一個標志位,如果頁面在近期只要被訪問過則將該標志位設置為1(默認為0),在選擇調出頁面時只需將標志位為0的頁面調出即可。三,遇到的問題及解決方案: 未遇到什么問題

四,實驗感悟:

遇到問題后上網查資料和有效,及時查不到自己想要的但是也可從相關結果中獲得啟發給自己靈感來想到解決問題的方法.四,源代碼

FLU.cpp #include #include #include #include“頭文件.cpp”

int capacity=3;

//設置內存最多可以容納的頁面數

void initialize(page p[])

//初始化頁面函數

{

for(int i=0;i<5;i++)

//初始化頁面,頁面內容分別為小寫字母 abcde,計數器全部為0

{p[i].num=i;

p[i].content=i+97;

p[i].flog=out;

p[i].count=0;

p[i].usebit=0;

}

}

int use(page p[]){

t=rand()%5;

//產生一個0-5的隨機數,if(p[t].flog==in)

{

printf(“tt%d頁面命中n”,t);

p[t].usebit=1;

//for(int i=0;i<5;i++)//調入此頁面后其他以在內存中存在的頁面計數器加1

//

{

//

if(p[i].flog==in)

//

p[i].count++;

//

}

return(1);

}

else

return(0);

}

void import(page p[])//調入頁面的函數

{

int t=rand()%5;

//產生一個0-5的隨機數,//if(p[t].flog==in)

// {

//

printf(“tt%d頁面命中n”,t);

//

p[t].usebit=1;

// }

// if(p[t].flog==out)

//如果此頁面未被調入內存則立即調入

p[t].flog=in;

capacity--;

//調入后內存空間減少一葉

for(int i=0;i<5;i++)//調入此頁面后其他以在內存中存在的頁面計數器加1

{

if(p[i].flog==in&&p[i].num!=t)

p[i].count++;

}

printf(“頁面%d被調入內存n”,t);

}

void port(page p[])

//調出頁面的函數

////////////////////////////////如果函數名定義為export則處錯誤

{

int x=0,y;//x用來暫時存放計數器 中的最大值,y存放此頁面的頁面號

int z=-1;

//用來判斷近期是否有未被訪問過的頁面

int g=0;

for(int i=0;i<5;i++)//尋找計數器值最大的 頁面

{

if(p[i].count>x)

{

x=p[i].count;

y=i;

}

}

for(int i=0;i<5;i++)

{

if(p[i].flog==in&&p[i].usebit==0)

{

z=i;

g++;

}

}

if(z==-1||g==3)//如果所有頁面均為1則按照FIFO算法置換頁面 //如果g=3則表明頁面使用位全為零,此時也按照FIFO算法置換頁面

{

p[y].flog=out;//修改調入符號

p[y].count=0;

capacity++;

//調入后內存空間增加一葉

p[y].usebit=0;

for(int i=0;i<5;i++)//將所有頁面置0

p[i].usebit=0;

printf(“ttt頁面%d被調出內存n”,y);

}

else

//如果有頁面為0則將此頁面置換出來

{

p[z].flog=out;//修改調入符號

p[z].count=0;

capacity++;

//調入后內存空間增加一葉

printf(“ttt頁面%d被調出內存n”,z);

}

}

main(){

int s;

long t3,t1,t2;

page pag[5];//定義五個頁面

///////////////////如果這個定義在子函數之前那么不用通過參數 子函數便可以直接訪問

t3=time(NULL);

initialize(pag);

do

{

t1=time(NULL);

s=use(pag);

if(capacity>0&&s==0)

import(pag);

else

{

if(capacity==0&&s==0)

{

port(pag);

import(pag);

}

}

t2=time(NULL);

while(t2-t1<1)

{

t2=time(NULL);

}

}while(t2-t3<20);

system(“pause”);}

六,實驗結果

總結

通過本次試驗我對各種頁面置換算法有了更深入的了解,也使得自己認識到平常學習到某些東西覺得懂了會了可是一旦實際動手操作起來就會發現總會存在這樣或者那樣的錯誤,只有多動手實際操作才會發現不足發現錯誤并且改正。查漏補缺提高自己的實際動手能力。

第二篇:頁面置換算法實驗報告(精選)

《操作系統--頁面置換算法》

實驗報告

名: 范學升

號:1001050903

級:電科10-1班

業:電子信息科學與技術

一、實驗目的

1.通過模擬實現幾種基本頁面置換的算法,了解虛擬存儲技術的特點。

2.掌握虛擬存儲請求頁式存儲管理中幾種基本頁面置換算法的基本思想,并至少用三種算法來模擬實現。

3.通過對幾種置換算法頁面的比較,來對比他們的優缺點,并通過比較更換頻率來對比它們的效率。

二、實驗內容:

設計一個虛擬存儲區和內存工作區,并使用下述算法來模擬實現頁面的置換: 1.先進先出的算法(FIFO)2.最近最久未使用算法(LRU)3.最佳置換算法(OPT)

三、實驗分析

在進程運行過程中,若其所訪問的頁面不存在內存而需要把它們調入內存,但內存已無空閑時,為了保證該進程能夠正常運行,系統必須從內存中調出一頁程序或數據送磁盤的對換區中。但應調出哪個頁面,需根據一定的算法來確定,算法的好壞,直接影響到系統的性能。

一個好的頁面置換算法,應該有較低的頁面更換頻率。

假設分給一作業的物理塊數為3,頁面數為20個。頁面號為(20個):

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

1.先進先出(FIFO)置換算法的思路

該算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。該算法實現簡單,只需把一個進程已調入內存的頁面,按照先后次序連接成一個隊列,并設置一個替換指針,使它總指向最老的頁面。

2.最近久未使用(LRU)置換算法的思路

最近久未使用置換算法的替換規則,是根據頁面調入內存后的使用情況來進行決策的。該算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經歷的時間,當需淘汰一個頁面的時候選擇現有頁面中其時間值最大的進 行淘汰。

3.最佳(OPT)置換算法的思路

其所選擇的被淘汰的頁面,獎是以后不使用的,或者是在未來時間內不再被訪問的頁面,采用最佳算法,通常可保證獲得最低的缺頁率。

4.數據結構

struct pageInfor { int content;//頁面號 int timer;//被訪問標記 };

class PRA { public:

PRA(void);int findSpace(void);//查找是否有空閑內存

int findExist(int curpage);//查找內存中是否有該頁面 int findReplace(void);//查找應予置換的頁面 void display(void);//顯示 void FIFO(void);//FIFO算法 void LRU(void);//LRU算法

void BlockClear(void);//BLOCK清空,以便用另一種方法重新演示 pageInfor * block;//物理塊 pageInfor * page;//頁面號串 private: };

5.FIFO頁面置換算法

當需要訪問一個新的頁面時,首先調用findExist(i)函數來查看物理塊中是否就有這個頁面,若要查看的頁面物理塊中就有,則調用display函數直接顯示,不需要替換頁面;如果要查看的頁面物理塊中沒有,就需要尋找空閑物理塊放入,若存在有空閑物理塊,則將頁面放入;若沒有空閑物理塊,則調用findReplace函數替換頁面。并將物理塊中所有頁面timer++。

6.LRU頁面置換算法

當需要訪問一個新的頁面,首先調用findExist(i)函數查看物理塊中是否就有這個頁面。

7.OPT頁面置換算法

當需要訪問一個新的頁面,首先調用findExist(i)函數來查看物理塊中是否有這個頁面。

8.尋找置換頁面函數findReplace比較三個物理塊中的時間標記timer,找到時間最久的。

四、源程序結構分析

1. 程序結構

程序共有以下九個部分:

int findSpace(void);//查找是否有空閑內存

int findExist(int curpage);//查找內存中是否有該頁面 int findReplace(void);//查找應予置換的頁面 void display(void);//顯示 void FIFO(void);//FIFO算法 void LRU(void);//LRU算法 void OPT(void);//OPT算法;

void BlockClear(void);//BLOCK清空,以便用另一種方法重新演示 int main()

//主程序

五、實驗結果

1運行后的初始界面 opt算法

3.FIFO算法

4LRU算法

第三篇:虛擬內存頁面置換算法實驗報告

課程名稱:

操作系統原理

實驗項目:

虛擬內存頁面置換算法

室:

地獄 018

名 :

死神

號:

專業班級 :

實驗時間:

2015/12 / 13

實驗成績 評閱教師

一、

實驗目得及要求

通過這次實驗,加深對虛擬內存頁面置換概念得理解,進一步掌握先進先出 FIFO、最佳置換OPI 與最近最久未使用LRU 頁面置換算法得實現方法。結合 Linux 得內層得分析方法查瞧內存得分配過程及 linux kernel 得內存管理機制 二、實驗性質

設計性 三、實驗學時

學時 四、實驗環境

實驗環境1、實驗環境:

C 與C++程序設計學習與實驗系統 2、知識準備:(1)使用 Linux得基本命令;(2)了解 Linux vmstat、free、top等命令查瞧linux系統得內存分配情況;(3)

掌握虛擬內存頁面置換算法 FIFO 等基本算法理論。

五、

實驗內容及步驟

假設有n個進程分別在 T1, … ,Tn時刻到達系統,它們需要得服務時間分別為S1,… ,Sn。分別采用先來先服務 FCFS 與短作業優先 SJF 進程調度算法進行調度,計算每個進程得完成時間、周轉時間與帶權周轉時間,并且統計 n 個進程得平均周轉時間與平均帶權周轉時間。

步驟

通過已知最小物理塊數、頁面個數、頁面訪問序列、及采用置換方式可以得出頁面置換得缺頁次數與缺頁率,及每次缺頁時物理塊中存儲。

1.輸入得形式

?int

PageOrder[MaxNumber];//頁面序列 int

PageNum,LackNum=0,BlockNum;//頁面個數,缺頁次數,最小物理塊數 2、輸出得形式 double

LackPageRate//缺頁率 缺頁個數 每次缺頁時物理塊中存儲

程序所能達到得功能 模擬先進先出 FIFO、最佳置換 OPI與最近最久未使用 LRU頁面置換算法得工作過程.假設內存中分配給每個進程得最小物理塊數為m,在進程運行過程中要訪問得頁面個數為 n,頁面訪問序列為P1, …,Pn,分別利用不同得頁面置換算法調度進程得頁面訪問序列,給出頁面訪問序列得置換過程,計算每種算法缺頁次數與缺頁率。測試數據,包括正確得輸入及其輸出結果與含有錯誤得輸入及其輸出結果。

程序中用到得所有抽象數據類型得定義、主程序得流程以及各程序模塊之間得層次(調用)關系.int

PageOrder[MaxNumber];//頁面序列 int

PageCount[MaxNumber]={0};//計算內存內數據離下一次出現得距離 int

PageNum,LackNum=0,BlockNum;//頁面個數,缺頁次數,最小物理塊數 double

LackPageRate=0; bool found=false;

六、實驗數據及結果分析

運行截圖:

圖6、1

圖6、2

圖6、3 七、實驗總結

這次試驗,讓我加深了對虛擬內存頁面置換算法得理解,進一步掌握先進先出 FIFO、最佳置換 OPI 與最近最久未使用 LRU 頁面置換算法得實現方法。熟悉 Linux需要經過大量得實驗、改進與思考,在編寫代碼得過程中遇到了一些問題要積極面對并通過討論上網或者問老師解決。通過這次試驗我了解了虛擬內存置換算法得一些知識,就是我對于所學習得專業知識得到了更好得鞏固與提升。

附錄 源程序清單 #include <iostream> using namespace std;#define MaxNumber 100 void OPI(int

PageOrder[MaxNumber],int

PageCount[MaxNumber],?

int

PageNum,int LackNum,int BlockNum,double

LackPageRate,bool found)

{

int module[MaxNumber];

int sum=0;

int i,j,k,m;

for(i=0;i

module[i]=PageOrder[i];

;++mus??)++j;i=

cout<〈module[j]<〈”

";

;ldne<〈tuoc?

LackNum=BlockNum;

for(i=BlockNum;i〈PageNum;i++)

found=false;

for(j=0;j<BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

? ??

if(module[j]==PageOrder[i])

{

??

found=true;

?

?

break;

?

?? }

?

if(found==false)//缺頁,選擇替換

{

?

for(j=0;j〈BlockNum;j++)

//計算內存內數據離下一次出現得距離

PageCount[j]=0;

for(k=i+1;k

??? ?

?

if(module[j]!=PageOrder[k])

??

PageCount[j]++;

?

esle?

;kaerb?

?

}

;]0[tnuoCegaP=xam tni?

int kind=0;

值大最出找//)++j;muNkcolB〈j;0=j(rof?

{

?

if(PageCount[j]>max)

?

??

;]j[tnuoCegaP=xam?? ?

?

kind=j;

?

?

module[kind]=PageOrder[i];

?

LackNum++;)++m;3

;”

”<<]m[eludom<〈tuoc??

?;ldne<

?

LackPageRate=(LackNum*1、0)/PageNum;

cout〈〈“該算法缺頁次數為:"<〈LackNum<<endl;

cout<<”該算法缺頁率為:"〈<LackPageRate*100<〈'%”〈〈endl;} /******************************先進先出置換算法*************************************/ void FIFO(int

PageOrder[MaxNumber],int

PageCount[MaxNumber],egaPkcaL

elbuod ,muNkcolB tni,muNkcaL tni,muNegaP

tni?Rate,bool found){

int module[MaxNumber];

int sum=0;

int i,j,m;

for(i=0;i〈BlockNum;i++)//將內存填滿

{

module[i]=PageOrder[i];

;++mus??

PageCount[i]=3-i;)++j;i=<j;0=j(rof?

cout<<module[j]<<"

“;

cout<<endl;

}

LackNum=BlockNum;

for(i=BlockNum;i〈PageNum;i++)

found=false;

for(j=0;j〈BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

{

?

if(module[j]==PageOrder[i])

?

{

?

;eurt=dnuof?? ?

break;

}

}

if(found==false)//缺頁,選擇替換

?

;]0[tnuoCegaP=xam tni?

int kind=0;

值大最出找//)++j;muNkcolB〈j;0=j(rof?

?

if(PageCount[j]>max)

;]j[tnuoCegaP=xam?? ??

kind=j;

???

}

?

for(int k=0;k<BlockNum;k++)//不就是最大值,則要+1

?

{

?

?

if(k!=kind)

PageCount[k]++;

?

?

module[kind]=PageOrder[i];

PageCount[kind]=0;// 替換之后已經查詢得次數改為0

LackNum++;

?

for(m=0; m〈3;m++)

?

;”

”<〈]m[eludom〈

;ldne〈〈tuoc?? }

? } ?

LackPageRate=(LackNum*1、0)/PageNum;

cout〈〈“該算法缺頁次數為:”<<LackNum<

cout<<”該算法缺頁率為:"<

PageOrder[MaxNumber],int

PageCount[MaxNumber],egaPkcaL

elbuod,muNkcolB tni,muNkcaL tni,muNegaP

tni??Rate,bool found){

int module[MaxNumber];

int sum=0;

int i,j,m;

for(i=0;i<BlockNum;i++)//將內存填滿

{

module[i]=PageOrder[i];

?

sum++;

PageCount[i]=3—i;)++j;i=<j;0=j(rof?

cout〈〈module[j]〈〈”

”;

;ldne〈<tuoc??

LackNum=BlockNum;

for(i=BlockNum;i

found=false;

for(j=0;j<BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

{

?

if(module[j]==PageOrder[i])

??

?

found=true;

PageCount[j]=0;//查詢后,更改次數

??

for(int k=0;k〈BlockNum;k++)

?

{

?? ??)j=!k(fi??

PageCount[k]++;

?

}

?

break;

?

?

}

?

if(found==false)//缺頁,選擇替換

?

;]0[tnuoCegaP=xam tni??

int kind=0;

值大最出找//)++j;muNkcolB

??)xam〉]j[tnuoCegaP(fi??

{

?

?;]j[tnuoCegaP=xam?

??

kind=j;

? }

??

for(int k=0;k

?

if(k!=kind)

PageCount[k]++;

??

?

module[kind]=PageOrder[i];

PageCount[kind]=0;// 替換之后未查詢得次數改為0

;++muNkcaL??

for(m=0; m<3;m++)

?

cout〈

”;

?;ldne<〈tuoc? }

? } ?

LackPageRate=(LackNum*1、0)/PageNum;

cout<〈“該算法缺頁次數為:"<

cout〈<”該算法缺頁率為:”〈<LackPageRate*100〈<“%’<<endl;} int main()

{

int

PageOrder[MaxNumber];//頁面序列

int

PageCount[MaxNumber]={0};//計算內存內數據離下一次出現得距離

int

PageNum,LackNum=0,BlockNum;//頁面個數,缺頁次數,最小物理塊數

;0=etaRegaPkcaL

elbuod? bool found=false;

;3ecoihc,2ecoihc,0=1ecoihc tni?

int i=0;)0==1ecoihc(elihw? {

;”:入輸新重:1,入輸不:0;據數入輸新重否是就“〈〈tuoc? cin〉>chioce2;

if(chioce2==1)

{?

cout<<”請輸入頁面個數:”;

;muNegaP >>nic?;“數塊理物小最入輸請”〈〈tuoc? ;muNkcolB>>nic? cout<〈”請輸入頁面序列:”<

for(i=0;i〈PageNum;i++)

;]i[redrOegaP>〉nic? }?;”:URL-3,IPO—2,OFIF-1:法算擇選請"<

if(chioce3==1)

colB,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(OFIF?kNum,LackPageRate,found);

else

if(chioce3==2)

colB ,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(IPO?kNum,LackPageRate, found);

esle?

,muNkcolB ,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(URL?LackPageRate,found);

} *************************************“〈<tuoc?****************************”<<endl;

;"束結:1,續繼:0:束結是就還續繼擇選請"<chioce1;

} }

第四篇:頁面置換算法模擬,實驗報告

中北大學軟件學院 實 驗 報 告

軟件工程

課程名稱

計算機操作系統

輔導教師

成績

實驗日期 2015、11、20 實驗時間實驗名稱 :實驗四

頁面置換算法模擬 2、實驗目得(1)了解內存分頁管理策略(2)掌握調頁策略(3)掌握一般常用得調度算法(4)學會各種存儲分配算法得實現方法。

(5)了解頁面大小與內存實際容量對命中率得影響。

3、實驗要求 編程實現頁面置換算法,最少實現兩種算法,比較算法得優劣,并將調試結果顯示在計算機屏幕上,并檢測機算與筆算得一致性。

(1)采用頁式分配存儲方案,通過分別計算不同算法得命中率來比較算法得優劣,同時也考慮頁面大小及內存實際容量對命中率得影響;(2)實現 OPT 算法(最優置換算法)、LRU 算法(Least Recently)、FIFO 算法(First IN First Out)得模擬;(3)使用某種編程語言模擬頁面置換算法.4、實驗算法描述 (1)FIFO(先進先出)

Y

N

Y

開始 頁面走向存入數組 p[]中,內存塊用page[]表示初始化為 0 當前p[]中第i個元素就是否已在內Page[]就是否有空把 page[]中最先裝入得頁面置換出去、i++ 把 p[i]得內容直接裝入最上面一個空內存塊,i++ 輸出當前內存塊狀態 i++

圖 4-1FIFO算法流程圖

結束

(2)

LRU(最近最久未使用)

Y

N

Y

圖 4—2

LRU 算法流程圖

開始 頁面走向存入數組 p[]中,內存塊用 page[]表示初始化為 0 當前 p[]中第 i 個元素就是否已在內存 Page[]就是否有空把 page[]中最近最久未使用得頁面置換出去、i++ 把 p[i]得內容直接裝入最上面一個空內存塊,i++ 輸出當前內存塊狀態

結束 i++

(3)OPT(最佳置換算法)

Y

N

Y

圖4-3 OPT 流程圖

開始 頁面走向存入數組 p[]中,內存塊用 page[]表示初始化為 0 當前 p[]中第 i 個元素就是否已在內存 Page[]就是否有空把 page[]中以后一段時間都不使用或就是使用時間離現在最遠得換出、i++ 把 p[i]得內容直接裝入最上面一個空內存塊,i++ 輸出當前內存塊狀態

結束 i++

6、實驗代碼 #include <iostream〉 using namespace std;#define Bsize 3 #define Psize 20 struct pageInfor {

號面頁//

;tnetnoc tni? int timer;

//被訪問標記 };class PRA{ public:

PRA(void);

存內閑空有否是就找查//

;)diov(ecapSdnif tni? int findExist(int curpage);

//查找內存中就是否有該頁面

int findReplace(void);

//查找應予置換得頁面

void display(void);

//顯示

法算 OFIF//;)diov(OFIF diov? 法算 URL//;)diov(URL diov? void Optimal(void);//OPTIMAL 算法

void BlockClear(void);//BLOCK 恢復

pageInfor * block;//物理塊

pageInfor * page;//頁面號串 private: };PRA::PRA(void){

int QString[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

block = new pageInfor[Bsize];)++i;ezisB<i;0=i tni(rof? {

;1— = tnetnoc、]i[kcolb? ;0 = remit、]i[kcolb?? }

page = new pageInfor[Psize];)++i;ezisP〈i ;0=i(rof? {

;]i[gnirtSQ = tnetnoc、]i[egap?;0 = remit、]i[egap?? }?} int PRA::findSpace(void)

{

for(int i=0; i

if(block[i]、content == -1)

置位中 KCOLB回返,存內閑空到找//;i nruter?;1— nruter?} int PRA::findExist(int curpage)

{

for(int i=0;i<Bsize; i++))tnetnoc、]egapruc[egap == tnetnoc、]i[kcolb(fi??

置位中 KCOLB 回返,面頁該有中存內到找//;i nruter? ;1— nruter?} int PRA::findReplace(void)

{

;0 = sop tni? for(int i=0;i<Bsize; i++))remit、]sop[kcolb => remit、]i[kcolb(fi??

? pos = i;//找到應予置換頁面,返回 BLOCK中位置

return pos; } void PRA::display(void)

{

for(int i=0;i<Bsize; i++)

if(block[i]、content!=-1)

?;” ”<〈tnetnoc、]i[kcolb〈〈tuoc? ;ldne<<tuoc?} void PRA::Optimal(void){

; noitisop,ecaps,tsixe tni? for(int i=0; i

{?;)i(tsixEdnif = tsixe??)1-=!

tsixe(fi?

{?

;ldne〈〈”頁缺不“<<tuoc? }??

esle?

{?? ?? space = findSpace();

?)1— =!

ecaps(fi? ?

{? ?

;]i[egap = ]ecaps[kcolb?

?

;)(yalpsid??

? }

?

esle?

{?? ?)++k ;ezisB<k ;0=k tni(rof?

? for(int j=i; j<Psize; j++)

?

{???

??)tnetnoc、]j[egap =!tnetnoc、]k[kcolb(fi?

{ 為 REMIT 置設,用會不來將//};0001 = remit、]k[kcolb??一個很大數

??

esle?

??

??

?

? block[k]、timer = j;

?

?? break;

} ??? }?????

? position = findReplace();

?

;]i[egap = ]noitisop[kcolb?

;)(yalpsid??

}?? ? }

}?} void PRA::LRU(void){

int exist,space,position ;

for(int i = 0; i < Psize;i++)

{? ? exist = findExist(i);)1- =!

tsixe(fi?

{

?? cout<<”不缺頁”<

?

block[exist]、timer = —1;//恢復存在得并剛訪問過得BLOCK 中頁面 TIMER 為-1

? }

? else

{? ?? space = findSpace();?)1-=!ecaps(fi? ?

{?;]i[egap = ]ecaps[kcolb?? ?

;)(yalpsid? ?? }

?

esle?

{??

;)(ecalpeRdnif = noitisop??

?

block[position] = page[i];

?

;)(yalpsid?

}??

}?

for(int j=0;j〈Bsize;j++)

;++remit、]j[kcolb?? }?} void PRA::FIFO(void)

{

int exist,space,position ;

for(int i=0;i

{?

exist = findExist(i);

? if(exist!=-1)

{cout<<"不缺頁"<

esle?

space = findSpace();

?)1-=!

ecaps(fi? ?? {

?

block[space] = page[i];

?

? display();

}??

esle?? ?

??

position = findReplace();

??

block[position] = page[i];

;)(yalpsid?? ?? }

}?)++j;ezisB

block[j]、timer++;//BLOCK 中所有頁面TIMER++

}?} void PRA::BlockClear(void){

for(int i=0;i

{?

block[i]、content =-1;

? block[i]、timer = 0;

} void main(void){

;ldne<〈”:法 算 換 置 面 頁“<<tuoc? cout〈〈”頁面號引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"<〈endl;

cout〈〈”選擇<1>應用 LRU 算法”〈<endl;

cout<<”選擇<2〉應用 FIFO 算法”〈

cout<<”選擇<3>應用 Optimal 算法“<〈endl;

;ldne<<"出退>0〈擇選”〈<tuoc? int select;

PRA test;? while(select)

? cin〉>select;)tceles(hctiws?

{?

:0 esac??;kaerb? :1 esac???;ldne<<“:下如果結法算URL”<〈tuoc?

;)(URL、tset??

;)(raelCkcolB、tset??;ldne<<”---—-—--—-—--—-—-—-———“<

? break;

:2 esac?

cout<〈”FIFO 算法結果如下:“<<endl;

test、FIFO();?;)(raelCkcolB、tset?

? cout<〈”-——-------—-—------—--”<〈endl;

?

break;

case 3:

;ldne〈<”:下如果結法算 lamitpO”<

test、Optimal();

?

;)(raelCkcolB、tset??;ldne<<"----—------——--————---"〈〈tuoc??;kaerb?

default:

?

;ldne〈<”號能功確正入輸請“<<tuoc?

;kaerb?? }?? } }

6、實驗結果

7、實驗心得 加深了對操作系統得認識,了解了操作系統中各種資源分配算法得實現,特別就是對虛擬存儲,頁面置換有了深入得了解,并能夠用高級語言進行模擬演示。在這短短得兩周時間里,通過瀏覽、閱讀有關得資料,學到了很多東西,同時也發現僅僅書本得知識就是遠遠不夠得,需要把知識運用到實踐中去,能力才能得到提高。

使用 MFC可視化編程極大得減少了編寫得代碼量,直觀得界面設計,不但便于修改,而且簡化了界面程序代碼得編寫 兩種頁面置換算法 FIFO 與LRU理解起來相當容易,但在實際編程實現得時候需要注意各種細節,需要耐心細致,實際編程中遇到一些細節上得小問題確實需要仔細考慮才行.

第五篇:操作系統 七次實驗報告 常用頁面置換算法模擬實驗

操作系統課程第七次實驗報告

姓名

學號

計算機

任課教師

指導教師

評閱教師

實驗地點

綜合樓B102

實驗時間

2012-9-26

實驗課表現

出勤和個人表現Q1(15+15(組長評分)=30分)

得分:

實驗

總分

(Q1+Q2+Q3+Q4)

實驗完成情況Q2(45分(組長與教師評分的加權平均))

得分:

實驗編號與實驗名稱:

實驗七、常用頁面置換算法模擬實驗

實驗目的:

通過模擬實現請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬存儲技術的特點,掌握虛擬存儲請求頁式存儲管理中幾種基本頁面置換算法的基本思想和實現過程,并比較它們的效率。

實驗內容及要求(詳見實驗講義與實驗指導書):

要求:

1)要求用你熟悉的程序設計語言編寫和調試一個頁面置換模擬程序;要求在主函數中測試。

2)實驗報告中必須包括:設計思想、數據定義(包括詳細說明)、處理流程(詳細算法描述和算法流程圖)、源代碼、運行結果、體會等部分。

3)必須模擬本實驗內容中提到的算法中的至少2種頁面置換算法。

4)

比較不同頁面置換算法的效率

內容:編寫一個程序,使用以下頁面置換算法中的某2種分別模擬一個分頁系統,并統計同一個頁面訪問序列情況下不同頁面置換算法引發的缺頁中斷次數。

1、第二次機會算法(Second

Chance)

2、最近最少使用算法(Least

Recently

Used,LRU)

3、最不常用算法(Not

Frequently

Used,NFU)

4、最近未使用算法(Not

Recently

Used,NRU)

5、時鐘頁面置換算法

6、老化算法(aging)

頁框的數量固定為4,虛擬頁面數為8。實驗輸入為訪問頁面序列,比如0,1,3,2,7,1

實驗用到的軟件(:)

DevC++,Visio

實驗內容及關鍵步驟(代碼)Q3(15分)

得分:

流程圖:輸入頁面訪問序列

取訪問的頁號

查頁表

是否缺頁?

置缺頁標志flag為’*’

按算法不同淘汰一頁面

調入所訪問的頁面

FIFO算法流程圖

LRU算法流程圖:

函數關系解釋圖:

實現結果:

圖1

圖2

代碼:

#include

#include

#define

MEMORY_SIZE

/*物理塊數*/

#define

PROESS_SIZE

/*頁面號引用串個數*/#include

#include

/*全局變量*/

int

mSIZE=4;

int

pSIZE=8;

static

int

memery[4]={0};

/*物理塊中的頁號*/

static

int

page[8]={0};

/*頁面號引用串*/

static

int

temp[8][4]={0};

/*輔助數組*/

/*置換算法函數*/

void

FIFO();

void

LRU();

void

OPT();

void

designBy();

/*輔助函數*/

void

print(unsigned

int

t);

/*主函數*/

int

main()

{

int

i,k,code;

designBy();

system(“color

0A“);

puts(“請依次輸入頁面號(8個):“);

for(i=0;i

scanf(“%1d“,&page[i]);

system(“cls“);

system(“color

0E“);

do{

puts(“輸入的頁面號引用串為:“);

for(k=0;k<=(pSIZE-1)/20;k++)

{

for(i=20*k;(i

{

if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))

printf(“%d\n“,page[i]);

else

printf(“%d

“,page[i]);

}

}

printf(“*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*\n“);

printf(“*

請選擇頁面置換算法:\t\t\t

*\n“);

printf(“*

-----------------------------------------

*\n“);

printf(“*

1.先進先出(FIFO)

2.最近最久未使用(LRU)

*\n“);

printf(“*

3.退出

*\n“);

printf(“*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*\n“);

printf(“請選擇操作:[

]\b\b“);

scanf(“%d“,&code);

switch(code)

{

case

1:

FIFO();

break;

case

2:

LRU();

break;

case

3:

system(“cls“);

system(“color

0A“);

exit(0);

default:

printf(“輸入錯誤,請重新輸入:“);

}

printf(“按任意鍵重新選擇置換算法:>>>“);

getch();

system(“cls“);

}while

(code!=3);

getch();

}

void

print(unsigned

int

t)

{

int

i,j,k,l;

int

flag;

for(k=0;k<=(pSIZE-1)/20;k++)

{

for(i=20*k;(i

{

if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))

printf(“%d\n“,page[i]);

else

printf(“%d

“,page[i]);

}

for(j=0;j

{

for(i=20*k;(i{

if(i>=j)

printf(“

|%d|“,temp[i][j]);

else

printf(“

|

|“);

}

for(i=mSIZE+20*k;(i

{

for(flag=0,l=0;l

if(temp[i][l]==temp[i-1][l])

flag++;

if(flag==mSIZE)/*頁面在物理塊中*/

printf(“

“);

else

printf(“

|%d|“,temp[i][j]);

}

/*每行顯示20個*/

if(i%20==0)

continue;

printf(“\n“);

}

}

printf(“----------------------------------------\n“);

printf(“缺頁次數:%d\t\t“,t+mSIZE);

printf(“缺頁率:%d/%d\n“,t+mSIZE,pSIZE);

printf(“置換次數:%d\t\t“,t);

printf(“訪問命中率:%d%%\n“,(pSIZE-(t+mSIZE))*100/pSIZE);

printf(“----------------------------------------\n“);

}

/*先進先出頁面置換算法*/

void

FIFO()

{

int

memery[10]={0};

int

time[10]={0};

/*記錄進入物理塊的時間*/

int

i,j,k,m;

int

max=0;

/*記錄換出頁*/

int

count=0;

/*記錄置換次數*/

/*前mSIZE個數直接放入*/

for(i=0;i

{

memery[i]=page[i];

time[i]=i;

for(j=0;j

temp[i][j]=memery[j];

}

for(i=mSIZE;i

{

/*判斷新頁面號是否在物理塊中*/

for(j=0,k=0;j

{

if(memery[j]!=page[i])

k++;

}

if(k==mSIZE)

/*如果不在物理塊中*/

{

count++;

/*計算換出頁*/

max=time[0]

for(m=2;m

if(time[m]

max=m;

memery[max]=page[i];

time[max]=i;

/*記錄該頁進入物理塊的時間*/

for(j=0;j

temp[i][j]=memery[j];

}

else

{

for(j=0;j

temp[i][j]=memery[j];

}

}

print(count);

}

/*最近最久未使用置換算法*/

void

LRU()

{

int

memery[10]={0};

int

flag[10]={0};

/*記錄頁面的訪問時間*/

int

i,j,k,m;

int

max=0;

/*記錄換出頁*/

int

count=0;

/*記錄置換次數*/

/*前mSIZE個數直接放入*/

for(i=0;i

{

memery[i]=page[i];

flag[i]=i;

for(j=0;j

temp[i][j]=memery[j];

}

for(i=mSIZE;i

{

/*判斷新頁面號是否在物理塊中*/

for(j=0,k=0;j

{

if(memery[j]!=page[i])

k++;

else

flag[j]=i;

/*刷新該頁的訪問時間*/

}

if(k==mSIZE)

/*如果不在物理塊中*/

{

count++;

/*計算換出頁*/

max=flag[0]

for(m=2;m

if(flag[m]

max=m;

memery[max]=page[i];

flag[max]=i;

/*記錄該頁的訪問時間*/

for(j=0;j

temp[i][j]=memery[j];

}

else

{

for(j=0;j

temp[i][j]=memery[j];

}

}

//

compute();

print(count);

}

/*顯示設計者信息*/

void

designBy()

{

printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n“);

printf(“┃㊣

實驗七:頁面置換算法

㊣┃\n“);

printf(“┃

學號:1001010042

┃\n“);

printf(“┃

姓名:黃浩全

4.9.9.0>┃\n“);

printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n“);

}

實驗過程中遇到的問題解決辦法與實驗體會Q4(需手寫,10分)

得分:

1、在FIFO算法可以很容易用數組實現,而LRU算法可以用數組實現,不過用結構體會更明顯簡單。結構體成員變量可以記錄頁號進入的時間,和最近使用的記錄。相對比數組更容易理解和實現。

2:首先,FIFO(先進先出)算法和LRU(最近未使用算法)兩者之間,FIFO算法明顯會比LRU容易理解,而且比LRU算法較容易實現,但在性能方面,LRU的確在優化方面做的比較理想。再且在考慮頁框和頁表號之間的問題用代碼可以容易模擬,但是真是在物理內存塊中是如何實現,那確實是很難以理解,需要真正理解到內存內部的知識才知道這兩個算法是怎么實現的。

評閱教師特殊評語:

評閱教師:

期:

下載頁面置換算法實驗報告(五篇模版)word格式文檔
下載頁面置換算法實驗報告(五篇模版).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    頁面置換算法模擬

    “計算機操作系統”課程設計大作業 一、題目: 頁面置換算法模擬實驗 二、目的 分別采用最佳(Optimal)置換算法、先進先出(FIFO)頁面置換算法和最近最少使用(LRU)置換算法對......

    頁面替換算法實驗報告

    操作系統頁面替換算法實驗報告 姓名: 沈慧 班級: 計091 學號: 0913022006 頁面替換算法 一.目的和要求 (一)目的 存儲管理的主要功能之一是合理地分配空間。請求頁式管理是一種常......

    實驗5 頁面置換算法

    實驗5 頁面置換算法 一、實驗題目:頁面置換算法(請求分頁) 二、實驗目的: 進一步理解父子進程之間的關系。 1) 理解內存頁面調度的機理。 2) 掌握頁面置換算法的實現方法。 3) 通......

    計算機操作系統實驗4頁面置換算法

    實驗4 頁面置換算法(2學時) 一、實驗目的 通過實驗加強對虛擬存儲管理中頁面置換算法的理解和掌握。 二、實驗內容 編寫程序實現虛擬存儲管理中OPT,FIFO,LRU頁面置換算法。 三......

    計算機操作系統實驗三頁面置換算法模擬實驗

    計算機工程學院實驗報告書課程名:《操作系統原理A》題目:虛擬存儲器管理頁面置換算法模擬實驗班級:學號:姓名:評語:成績:指導教師:批閱時間:年月日一、實驗目的與要求1.目的:請求頁式......

    頁面置換算法模擬實驗 操作系統大作業(含源文件)(合集五篇)

    “計算機操作系統”課程設計大作業 頁面置換算法模擬實驗 (含完整資料,可直接提交) 一、題目: 頁面置換算法模擬實驗 二、目的 分別采用最佳(Optimal)置換算法、先進先出(FI......

    算法實驗報告

    《算法設計與分析》 實驗報告 班級姓名學號年 月日 目錄 實驗一二分查找程序實現…………………………………………………………………03頁 實驗二棋盤覆蓋問題(分治法).…......

    RSA算法實驗報告

    信息安全實驗報告 題 目 RSA算法 姓 名 學 號 專業年級 計算機科學與技術2014級(1)班 指導教師 2016年 12 月 10日 一、 實驗目的 了解非對稱加密機制 理解RSA算法的加解密原......

主站蜘蛛池模板: 免费无码又爽又刺激高潮的视频| 极品人妻被黑人中出种子| 成人在线免费电影| 亚洲欧美自拍偷一区二区| 重口sm一区二区三区视频| 亚洲成a人片在线观看你懂的| 无码精品人妻一区二区三区人妻斩| 色一情一乱一伦一区二区三区小说| 国内精品久久久久久影院8f| 亚洲国产av天码精品果冻传媒| 99精品国产在热久久无毒| 在线观看片免费人成视频无码| 麻豆国产人妻欲求不满| 午夜av无码福利免费看网站| 97久久人人超碰国产精品| 成人无码男男gv在线观看网站| 国产又色又刺激高潮视频| 热久久美女精品天天吊色| 久久久这里只有精品10| 夜夜躁狠狠躁日日躁2022| 女性女同性aⅴ免费观女性恋| 四虎永久在线精品视频免费观看| 久久久国产一区二区三区四区小说| 亚洲综合色aaa成人无码| 大学生高潮无套内谢视频| 97久久超碰精品视觉盛宴| 欧美成人精品第一区二区三区| 欧美日韩国产精品自在自线| 成人乱码一区二区三区av0| 国内偷窥一区二区三区视频| 亚洲午夜久久久久久噜噜噜| 国产无遮挡a片又黄又爽| 久久久无码视频| 一边摸一边抽搐一进一出口述| 天天躁夜夜躁狠狠喷水| 日日摸日日碰夜夜爽亚洲| 国产女人高潮视频在线观看| 无码国产69精品久久久久app| 欧美精品v欧洲高清视频在线观看| 国产乱人伦app精品久久| 少妇无码av无码专区在线观看|