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

頁(yè)面替換算法實(shí)驗(yàn)報(bào)告

時(shí)間:2019-05-14 08:44:22下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫寫幫文庫(kù)小編為你整理了多篇相關(guān)的《頁(yè)面替換算法實(shí)驗(yàn)報(bào)告》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫(kù)還可以找到更多《頁(yè)面替換算法實(shí)驗(yàn)報(bào)告》。

第一篇:頁(yè)面替換算法實(shí)驗(yàn)報(bào)告

操作系統(tǒng)頁(yè)面替換算法實(shí)驗(yàn)報(bào)告

姓名: 沈慧 班級(jí): 計(jì)091 學(xué)號(hào): 0913022006

頁(yè)面替換算法

一.目的和要求

(一)目的

存儲(chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常用的虛擬存儲(chǔ)管理技術(shù)。

本實(shí)驗(yàn)的目的是通過(guò)請(qǐng)求頁(yè)式管理中頁(yè)面置換算法的模擬設(shè)計(jì),來(lái)了解虛擬存儲(chǔ)技術(shù)的特點(diǎn),掌握請(qǐng)求頁(yè)式管理的頁(yè)面置換算法。

(二)要求

模擬頁(yè)式虛擬存儲(chǔ)管理中硬件的地址轉(zhuǎn)換和缺頁(yè)中斷,并用最佳頁(yè)面替換算法(OPT)、最近最少使用頁(yè)面替換算法(LRU)、先進(jìn)先出調(diào)度算法(FIFO)處理缺頁(yè)中斷。

二、算法描述

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

該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。該算法實(shí)現(xiàn)簡(jiǎn)單,只需把一個(gè)進(jìn)程已調(diào)入內(nèi)存的頁(yè)面,按照先后次序連接成一個(gè)隊(duì)列,并設(shè)置一個(gè)替換指針,使它總指向最老的頁(yè)面。

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

最近久未使用置換算法的替換規(guī)則,是根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況來(lái)進(jìn)行決策的。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間,當(dāng)需淘汰一個(gè)頁(yè)面的時(shí)候選擇現(xiàn)有頁(yè)面中其時(shí)間值最大的進(jìn) 行淘汰。

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

其所選擇的被淘汰的頁(yè)面,獎(jiǎng)是以后不使用的,或者是在未來(lái)時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面,采用最佳算法,通常可保證獲得最低的缺頁(yè)率。

三、方案設(shè)計(jì)

1、數(shù)據(jù)結(jié)構(gòu) class RAMPAGE { protected: int *RAM;//內(nèi)存各塊,存放各頁(yè)

int ramcount;//內(nèi)存塊數(shù)

int *PAGE;//接收用戶要訪問(wèn)的各頁(yè)

int pagecount;//頁(yè)數(shù)

int *CHANGEPAGE;//存放淘汰的各頁(yè) int maxpage;//頁(yè)的最大頁(yè)號(hào)

int shortage;//缺頁(yè)的數(shù)量 public: RAMPAGE();//初始化

void input();//用戶輸入

void FIFO();//FIFO算法 void LRU();//LRU算法 void OPT();//OPT算法

~RAMPAGE();//釋放空間

};

三、測(cè)試與運(yùn)行

1、輸入要測(cè)試的數(shù)據(jù)

2、采用FIFO方法進(jìn)行頁(yè)面置換

3、采用LRU算法進(jìn)行頁(yè)面置換

4、采用OPT算法進(jìn)行頁(yè)面置換

源程序代碼:

#include #include #include using namespace std;class RAMPAGE { protected: int *RAM;//內(nèi)存各塊,存放各頁(yè) int ramcount;//內(nèi)存塊數(shù)

int *PAGE;//接收用戶要訪問(wèn)的各頁(yè)

int pagecount;//頁(yè)數(shù)

int *CHANGEPAGE;//存放淘汰的各頁(yè) int maxpage;//頁(yè)的最大頁(yè)號(hào)

int shortage;//缺頁(yè)的數(shù)量 public: RAMPAGE();//初始化

void input();//用戶輸入

void FIFO();//FIFO算法 void LRU();//LRU算法 void OPT();//OPT算法

~RAMPAGE();//釋放空間 };RAMPAGE::RAMPAGE(){ ramcount=0;//內(nèi)存塊數(shù)

pagecount=0;//頁(yè)數(shù)

maxpage=0;//頁(yè)的最大頁(yè)號(hào) } void RAMPAGE::input()//用戶輸入 { cout<<“請(qǐng)輸入內(nèi)存塊數(shù):”;cin>>ramcount;//用戶輸入塊數(shù)

RAM=new int [ramcount];//內(nèi)存各塊,存放各頁(yè) cout<<“請(qǐng)輸入給定的頁(yè)面:以#結(jié)尾”<>page;//用戶輸入頁(yè)號(hào)

PAGE2[i]=page;//該頁(yè)進(jìn)入預(yù)分配空間

if(page>maxpage)maxpage=page;//找出最大頁(yè) i++;} pagecount=i;//記錄用戶輸入的頁(yè)數(shù) CHANGEPAGE=new int[pagecount];PAGE=new int[pagecount];//接收用戶要訪問(wèn)的各頁(yè)

for(i=0;i

} delete [] PAGE2;//釋放預(yù)申請(qǐng)空間 }

void RAMPAGE::FIFO(){ cout<<“使用FIFO算法:”<=maxpage||ramcount>=pagecount){ cout<<“缺頁(yè)次數(shù):”<<0<int j=0,k=0,l=0;//j記錄內(nèi)存序號(hào),k記錄淘汰頁(yè)空間序號(hào),l記錄未被寫入的內(nèi)存塊號(hào)

cout<<“內(nèi)存各塊存儲(chǔ)變化:”<in=0;for(j=0;j

}

if(in==0)//頁(yè)不在內(nèi)存塊

{

shortage++;

if(RAM[ramcount-1]!=-1)//最后一個(gè)內(nèi)存塊標(biāo)記為-1,表示它未被寫入過(guò)頁(yè)號(hào)

{

CHANGEPAGE[k]=RAM[l];//!-1,則要進(jìn)行淘汰,記錄要被淘汰的頁(yè)號(hào)

k++;

}

RAM[l]=PAGE[i];//新頁(yè)寫入塊,將該塊初次寫入

l++;

if(l==ramcount)l=0;}

}

for(j=0;j

{cout<

cout<<“缺頁(yè)次數(shù):”<

cout<

}

void RAMPAGE::LRU(){ cout<<“使用LRU算法:”<=maxpage||ramcount>=pagecount){ cout<<“缺頁(yè)次數(shù):”<<0<

int i=0;for(i=0;icout<<“內(nèi)存各塊存儲(chǔ)變化:”<for(j=0;j

if(PAGE[i]==RAM[j])

{

in=1;

break;

}

}

if(in==0&&RAM[ramcount-1]!=-1){

shortage++;

for(j=0;j

RAM2[j]=0;

for(j=0;j

{

for(p=i-1;p>=0;p--)

{ RAM2[j]++;//RAM2[]存儲(chǔ)當(dāng)前內(nèi)存中各頁(yè)的權(quán)值(距該頁(yè)上次被訪問(wèn)待了多長(zhǎng)時(shí)間)

if(RAM[j]==PAGE[p])break;

}

}

int max=0;for(j=0;j

{

if(RAM2[j]>max)

max=RAM2[j];//max標(biāo)記最大的權(quán)值

}

for(j=0;j

{

if(max==RAM2[j])break;//定位max對(duì)應(yīng)的最大權(quán)值頁(yè)號(hào)的存儲(chǔ)塊號(hào)

}

CHANGEPAGE[k]=RAM[j];//將該塊中的頁(yè)號(hào)放入淘汰序列

RAM[j]=PAGE[i];//要訪問(wèn)的頁(yè)寫入內(nèi)存塊好

k++;// 淘汰數(shù)加1

}

if(in==0&&RAM[ramcount-1]==-1){

shortage++;

RAM[l]=PAGE[i];

l++;} }

for(j=0;j

cout<<“缺頁(yè)次數(shù):”<

for(int m=0;m

void RAMPAGE::OPT(){ cout<<“使用OPT算法:”<=maxpage||ramcount>=pagecount){ cout<<“缺頁(yè)次數(shù):”<<0<

int i=0;for(i=0;icout<<“內(nèi)存各塊存儲(chǔ)變化:”<for(j=0;j

in=0;for(j=0;j

if(PAGE[i]==RAM[j])

{

in=1;

break;

}

}

if(in==0&&RAM[ramcount-1]!=-1){

shortage++;

for(j=0;j

RAM2[j]=0;

for(j=0;j

{

for(p=i+1;p

{ RAM2[j]++;//RAM2[]存儲(chǔ)當(dāng)前內(nèi)存中各頁(yè)的權(quán)值(距該頁(yè)下次被訪問(wèn)要待多長(zhǎng)時(shí)間)

if(RAM[j]==PAGE[p])break;

}

}

int max=0;for(j=0;j

{

if(RAM2[j]>max)

max=RAM2[j];

}

for(j=0;j

{

if(max==RAM2[j])break;

}

CHANGEPAGE[k]=RAM[j];

RAM[j]=PAGE[i];

k++;

}

if(in==0&&RAM[ramcount-1]==-1){

shortage++;

RAM[l]=PAGE[i];

l++;} }

for(j=0;j

cout<<“缺頁(yè)次數(shù):”<

for(int m=0;m

delete []PAGE;//釋放訪問(wèn)各頁(yè)空間

delete []CHANGEPAGE;//釋放淘汰頁(yè)空間 }

int main(){

率: RAMPAGE *task;

again: cout<<“說(shuō)明:”<input();cout<<“**************************************************************”<

cout<<“輸入 1 or 2 or 3選擇算法:”;int number;cin>>number;switch(number){ case 1: task->FIFO();break;case 2: task->LRU();break;case 3: task->OPT();break;default : cout<<“選擇出錯(cuò)!”<

cout<<“繼續(xù)其他算法(1 or 2 or 3),0 跳過(guò):”;cin>>number;switch(number){ case 1: task->FIFO();break;case 2: task->LRU();break;case 3: task->OPT();break;default : cout<<“跳過(guò)算法!”<

cout<<“***************************************************************”<

cout<<“繼續(xù)其他算法(1 or 2 or 3),0 跳過(guò):”;cin>>number;switch(number){ case 1: task->FIFO();break;case 2: task->LRU();break;case 3: task->OPT();break;

default : cout<<“跳過(guò)算法!”<

cout<<“***************************************************************”<

delete task;cout<<“結(jié)束程序/繼續(xù)新任務(wù)?(y / n): ”;char goon;cin>>goon;if(goon=='y'){ system(“CLS”);

goto again;} return 0;}

第二篇:頁(yè)面置換算法實(shí)驗(yàn)報(bào)告(精選)

《操作系統(tǒng)--頁(yè)面置換算法》

實(shí)驗(yàn)報(bào)告

名: 范學(xué)升

學(xué)

號(hào):1001050903

級(jí):電科10-1班

業(yè):電子信息科學(xué)與技術(shù)

一、實(shí)驗(yàn)?zāi)康?/p>

1.通過(guò)模擬實(shí)現(xiàn)幾種基本頁(yè)面置換的算法,了解虛擬存儲(chǔ)技術(shù)的特點(diǎn)。

2.掌握虛擬存儲(chǔ)請(qǐng)求頁(yè)式存儲(chǔ)管理中幾種基本頁(yè)面置換算法的基本思想,并至少用三種算法來(lái)模擬實(shí)現(xiàn)。

3.通過(guò)對(duì)幾種置換算法頁(yè)面的比較,來(lái)對(duì)比他們的優(yōu)缺點(diǎn),并通過(guò)比較更換頻率來(lái)對(duì)比它們的效率。

二、實(shí)驗(yàn)內(nèi)容:

設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法來(lái)模擬實(shí)現(xiàn)頁(yè)面的置換: 1.先進(jìn)先出的算法(FIFO)2.最近最久未使用算法(LRU)3.最佳置換算法(OPT)

三、實(shí)驗(yàn)分析

在進(jìn)程運(yùn)行過(guò)程中,若其所訪問(wèn)的頁(yè)面不存在內(nèi)存而需要把它們調(diào)入內(nèi)存,但內(nèi)存已無(wú)空閑時(shí),為了保證該進(jìn)程能夠正常運(yùn)行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁(yè)程序或數(shù)據(jù)送磁盤的對(duì)換區(qū)中。但應(yīng)調(diào)出哪個(gè)頁(yè)面,需根據(jù)一定的算法來(lái)確定,算法的好壞,直接影響到系統(tǒng)的性能。

一個(gè)好的頁(yè)面置換算法,應(yīng)該有較低的頁(yè)面更換頻率。

假設(shè)分給一作業(yè)的物理塊數(shù)為3,頁(yè)面數(shù)為20個(gè)。頁(yè)面號(hào)為(20個(gè)):

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

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

該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。該算法實(shí)現(xiàn)簡(jiǎn)單,只需把一個(gè)進(jìn)程已調(diào)入內(nèi)存的頁(yè)面,按照先后次序連接成一個(gè)隊(duì)列,并設(shè)置一個(gè)替換指針,使它總指向最老的頁(yè)面。

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

最近久未使用置換算法的替換規(guī)則,是根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況來(lái)進(jìn)行決策的。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間,當(dāng)需淘汰一個(gè)頁(yè)面的時(shí)候選擇現(xiàn)有頁(yè)面中其時(shí)間值最大的進(jìn) 行淘汰。

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

其所選擇的被淘汰的頁(yè)面,獎(jiǎng)是以后不使用的,或者是在未來(lái)時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面,采用最佳算法,通常可保證獲得最低的缺頁(yè)率。

4.?dāng)?shù)據(jù)結(jié)構(gòu)

struct pageInfor { int content;//頁(yè)面號(hào) int timer;//被訪問(wèn)標(biāo)記 };

class PRA { public:

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

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

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

5.FIFO頁(yè)面置換算法

當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面時(shí),首先調(diào)用findExist(i)函數(shù)來(lái)查看物理塊中是否就有這個(gè)頁(yè)面,若要查看的頁(yè)面物理塊中就有,則調(diào)用display函數(shù)直接顯示,不需要替換頁(yè)面;如果要查看的頁(yè)面物理塊中沒(méi)有,就需要尋找空閑物理塊放入,若存在有空閑物理塊,則將頁(yè)面放入;若沒(méi)有空閑物理塊,則調(diào)用findReplace函數(shù)替換頁(yè)面。并將物理塊中所有頁(yè)面timer++。

6.LRU頁(yè)面置換算法

當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面,首先調(diào)用findExist(i)函數(shù)查看物理塊中是否就有這個(gè)頁(yè)面。

7.OPT頁(yè)面置換算法

當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面,首先調(diào)用findExist(i)函數(shù)來(lái)查看物理塊中是否有這個(gè)頁(yè)面。

8.尋找置換頁(yè)面函數(shù)findReplace比較三個(gè)物理塊中的時(shí)間標(biāo)記timer,找到時(shí)間最久的。

四、源程序結(jié)構(gòu)分析

1. 程序結(jié)構(gòu)

程序共有以下九個(gè)部分:

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

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

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

//主程序

五、實(shí)驗(yàn)結(jié)果

1運(yùn)行后的初始界面 opt算法

3.FIFO算法

4LRU算法

第三篇:頁(yè)面置換算法實(shí)驗(yàn)報(bào)告

計(jì)算機(jī)體系結(jié)構(gòu)

實(shí)驗(yàn)報(bào)告

班級(jí):計(jì)科姓名:張華敏學(xué)號(hào):

0902班

0909090814

FIFU算法

一,實(shí)驗(yàn)內(nèi)容:

編寫一段程序來(lái)模擬頁(yè)面置換算法中的FIFU算法的實(shí)現(xiàn) 二,算法設(shè)計(jì):

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

在做此實(shí)驗(yàn)時(shí)遇到了一些小問(wèn)題,如在C語(yǔ)言中函數(shù)名定義為export()則會(huì)報(bào)錯(cuò)。在調(diào)用有返回值的函數(shù)是如果直接int s=use(pag)則會(huì)運(yùn)行出錯(cuò),要先分開(kāi)寫如:int s,s=use(pag).四,源代碼 頭文件.cpp #include #include

int t;//全局變量,用來(lái)盛放rand()函數(shù)產(chǎn)生的隨機(jī)數(shù)

enum boolean{in,out};//定義一個(gè)枚舉類型 /////////如果把in,out換成 true,false則會(huì)處錯(cuò)誤

typedef struct { int num;//頁(yè)面編號(hào) char content;//頁(yè)面內(nèi)容

enum boolean flog;//判斷此頁(yè)面是否頁(yè)調(diào)入,調(diào)入為true,否則為false;int count;//頁(yè)面計(jì)數(shù)器

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

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

int capacity=3;//設(shè)置內(nèi)存最多可以容納的頁(yè)面數(shù)

void initialize(page p[])//初始化頁(yè)面函數(shù) { for(int i=0;i<5;i++)//初始化頁(yè)面,頁(yè)面內(nèi)容分別為小寫字母 abcde,計(jì)數(shù)器全部為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;//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),if(p[t].flog==in){ printf(“tt%d頁(yè)面命中n”,t);//for(int i=0;i<5;i++)//調(diào)入此頁(yè)面后其他以在內(nèi)存中存在的頁(yè)面計(jì)數(shù)器加1 // { // if(p[i].flog==in)// p[i].count++;// } return(1);} else return(0);}

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

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

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

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

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

//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”);}

五,測(cè)試結(jié)果:

LFU算法

一,實(shí)驗(yàn)內(nèi)容:

編寫一段程序來(lái)模擬頁(yè)面置換算法中的LFU算法的實(shí)現(xiàn) 二,算法設(shè)計(jì):

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

四,實(shí)驗(yàn)感悟:

遇到問(wèn)題后上網(wǎng)查資料和有效,及時(shí)查不到自己想要的但是也可從相關(guān)結(jié)果中獲得啟發(fā)給自己靈感來(lái)想到解決問(wèn)題的方法.四,源代碼

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

int capacity=3;

//設(shè)置內(nèi)存最多可以容納的頁(yè)面數(shù)

void initialize(page p[])

//初始化頁(yè)面函數(shù)

{

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

//初始化頁(yè)面,頁(yè)面內(nèi)容分別為小寫字母 abcde,計(jì)數(shù)器全部為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;

//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),if(p[t].flog==in)

{

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

p[t].usebit=1;

//for(int i=0;i<5;i++)//調(diào)入此頁(yè)面后其他以在內(nèi)存中存在的頁(yè)面計(jì)數(shù)器加1

//

{

//

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

//

p[i].count++;

//

}

return(1);

}

else

return(0);

}

void import(page p[])//調(diào)入頁(yè)面的函數(shù)

{

int t=rand()%5;

//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),//if(p[t].flog==in)

// {

//

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

//

p[t].usebit=1;

// }

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

//如果此頁(yè)面未被調(diào)入內(nèi)存則立即調(diào)入

p[t].flog=in;

capacity--;

//調(diào)入后內(nèi)存空間減少一葉

for(int i=0;i<5;i++)//調(diào)入此頁(yè)面后其他以在內(nèi)存中存在的頁(yè)面計(jì)數(shù)器加1

{

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

p[i].count++;

}

printf(“頁(yè)面%d被調(diào)入內(nèi)存n”,t);

}

void port(page p[])

//調(diào)出頁(yè)面的函數(shù)

////////////////////////////////如果函數(shù)名定義為export則處錯(cuò)誤

{

int x=0,y;//x用來(lái)暫時(shí)存放計(jì)數(shù)器 中的最大值,y存放此頁(yè)面的頁(yè)面號(hào)

int z=-1;

//用來(lái)判斷近期是否有未被訪問(wèn)過(guò)的頁(yè)面

int g=0;

for(int i=0;i<5;i++)//尋找計(jì)數(shù)器值最大的 頁(yè)面

{

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)//如果所有頁(yè)面均為1則按照FIFO算法置換頁(yè)面 //如果g=3則表明頁(yè)面使用位全為零,此時(shí)也按照FIFO算法置換頁(yè)面

{

p[y].flog=out;//修改調(diào)入符號(hào)

p[y].count=0;

capacity++;

//調(diào)入后內(nèi)存空間增加一葉

p[y].usebit=0;

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

p[i].usebit=0;

printf(“ttt頁(yè)面%d被調(diào)出內(nèi)存n”,y);

}

else

//如果有頁(yè)面為0則將此頁(yè)面置換出來(lái)

{

p[z].flog=out;//修改調(diào)入符號(hào)

p[z].count=0;

capacity++;

//調(diào)入后內(nèi)存空間增加一葉

printf(“ttt頁(yè)面%d被調(diào)出內(nèi)存n”,z);

}

}

main(){

int s;

long t3,t1,t2;

page pag[5];//定義五個(gè)頁(yè)面

///////////////////如果這個(gè)定義在子函數(shù)之前那么不用通過(guò)參數(shù) 子函數(shù)便可以直接訪問(wèn)

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”);}

六,實(shí)驗(yàn)結(jié)果

總結(jié)

通過(guò)本次試驗(yàn)我對(duì)各種頁(yè)面置換算法有了更深入的了解,也使得自己認(rèn)識(shí)到平常學(xué)習(xí)到某些東西覺(jué)得懂了會(huì)了可是一旦實(shí)際動(dòng)手操作起來(lái)就會(huì)發(fā)現(xiàn)總會(huì)存在這樣或者那樣的錯(cuò)誤,只有多動(dòng)手實(shí)際操作才會(huì)發(fā)現(xiàn)不足發(fā)現(xiàn)錯(cuò)誤并且改正。查漏補(bǔ)缺提高自己的實(shí)際動(dòng)手能力。

第四篇:虛擬內(nèi)存頁(yè)面置換算法實(shí)驗(yàn)報(bào)告

學(xué)

機(jī)

實(shí)

驗(yàn)

報(bào)

課程名稱:

操作系統(tǒng)原理

實(shí)驗(yàn)項(xiàng)目:

虛擬內(nèi)存頁(yè)面置換算法

實(shí)

驗(yàn)

室:

地獄 018

名 :

死神

學(xué)

號(hào):

專業(yè)班級(jí) :

實(shí)驗(yàn)時(shí)間:

2015/12 / 13

實(shí)驗(yàn)成績(jī) 評(píng)閱教師

一、

實(shí)驗(yàn)?zāi)康眉耙?/p>

通過(guò)這次實(shí)驗(yàn),加深對(duì)虛擬內(nèi)存頁(yè)面置換概念得理解,進(jìn)一步掌握先進(jìn)先出 FIFO、最佳置換OPI 與最近最久未使用LRU 頁(yè)面置換算法得實(shí)現(xiàn)方法。結(jié)合 Linux 得內(nèi)層得分析方法查瞧內(nèi)存得分配過(guò)程及 linux kernel 得內(nèi)存管理機(jī)制 二、實(shí)驗(yàn)性質(zhì)

設(shè)計(jì)性 三、實(shí)驗(yàn)學(xué)時(shí)

學(xué)時(shí) 四、實(shí)驗(yàn)環(huán)境

實(shí)驗(yàn)環(huán)境1、實(shí)驗(yàn)環(huán)境:

C 與C++程序設(shè)計(jì)學(xué)習(xí)與實(shí)驗(yàn)系統(tǒng) 2、知識(shí)準(zhǔn)備:(1)使用 Linux得基本命令;(2)了解 Linux vmstat、free、top等命令查瞧linux系統(tǒng)得內(nèi)存分配情況;(3)

掌握虛擬內(nèi)存頁(yè)面置換算法 FIFO 等基本算法理論。

五、

實(shí)驗(yàn)內(nèi)容及步驟

假設(shè)有n個(gè)進(jìn)程分別在 T1, … ,Tn時(shí)刻到達(dá)系統(tǒng),它們需要得服務(wù)時(shí)間分別為S1,… ,Sn。分別采用先來(lái)先服務(wù) FCFS 與短作業(yè)優(yōu)先 SJF 進(jìn)程調(diào)度算法進(jìn)行調(diào)度,計(jì)算每個(gè)進(jìn)程得完成時(shí)間、周轉(zhuǎn)時(shí)間與帶權(quán)周轉(zhuǎn)時(shí)間,并且統(tǒng)計(jì) n 個(gè)進(jìn)程得平均周轉(zhuǎn)時(shí)間與平均帶權(quán)周轉(zhuǎn)時(shí)間。

步驟

通過(guò)已知最小物理塊數(shù)、頁(yè)面?zhèn)€數(shù)、頁(yè)面訪問(wèn)序列、及采用置換方式可以得出頁(yè)面置換得缺頁(yè)次數(shù)與缺頁(yè)率,及每次缺頁(yè)時(shí)物理塊中存儲(chǔ)。

1.輸入得形式

?int

PageOrder[MaxNumber];//頁(yè)面序列 int

PageNum,LackNum=0,BlockNum;//頁(yè)面?zhèn)€數(shù),缺頁(yè)次數(shù),最小物理塊數(shù) 2、輸出得形式 double

LackPageRat(yī)e//缺頁(yè)率 缺頁(yè)個(gè)數(shù) 每次缺頁(yè)時(shí)物理塊中存儲(chǔ)

程序所能達(dá)到得功能 模擬先進(jìn)先出 FIFO、最佳置換 OPI與最近最久未使用 LRU頁(yè)面置換算法得工作過(guò)程.假設(shè)內(nèi)存中分配給每個(gè)進(jìn)程得最小物理塊數(shù)為m,在進(jìn)程運(yùn)行過(guò)程中要訪問(wèn)得頁(yè)面?zhèn)€數(shù)為 n,頁(yè)面訪問(wèn)序列為P1, …,Pn,分別利用不同得頁(yè)面置換算法調(diào)度進(jìn)程得頁(yè)面訪問(wèn)序列,給出頁(yè)面訪問(wèn)序列得置換過(guò)程,計(jì)算每種算法缺頁(yè)次數(shù)與缺頁(yè)率。測(cè)試數(shù)據(jù),包括正確得輸入及其輸出結(jié)果與含有錯(cuò)誤得輸入及其輸出結(jié)果。

程序中用到得所有抽象數(shù)據(jù)類型得定義、主程序得流程以及各程序模塊之間得層次(調(diào)用)關(guān)系.int

PageOrder[MaxNumber];//頁(yè)面序列 int

PageCount[MaxNumber]={0};//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離 int

PageNum,LackNum=0,BlockNum;//頁(yè)面?zhèn)€數(shù),缺頁(yè)次數(shù),最小物理塊數(shù) double

LackPageRate=0; bool found=false;

六、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析

運(yùn)行截圖:

圖6、1

圖6、2

圖6、3 七、實(shí)驗(yàn)總結(jié)

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

附錄 源程序清單 #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++)//遍歷已存儲(chǔ),判斷就是否缺頁(yè)

? ??

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

{

??

found=true;

?

?

break;

?

?? }

?

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

{

?

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

//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離

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(luò);

?

?

module[kind]=PageOrder[i];

?

LackNum++;)++m;3

;”

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

?;ldne<

?

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

cout〈〈“該算法缺頁(yè)次數(shù)為:"<〈LackNum<<endl;

cout<<”該算法缺頁(yè)率為:"〈<LackPageRat(yī)e*100<〈'%”〈〈endl;} /******************************先進(jìn)先出置換算法*************************************/ 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++)//將內(nè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++)//遍歷已存儲(chǔ),判斷就是否缺頁(yè)

{

?

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

?

{

?

;eurt=dnuof?? ?

break;

}

}

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

?

;]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;// 替換之后已經(jīng)查詢得次數(shù)改為0

LackNum++;

?

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

?

;”

”<〈]m[eludom〈

;ldne〈〈tuoc?? }

? } ?

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

cout〈〈“該算法缺頁(yè)次數(shù)為:”<<LackNum<

cout<<”該算法缺頁(yè)率為:"<

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++)//將內(nè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++)//遍歷已存儲(chǔ),判斷就是否缺頁(yè)

{

?

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

??

?

found=true;

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

??

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

?

{

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

PageCount[k]++;

?

}

?

break;

?

?

}

?

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

?

;]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;// 替換之后未查詢得次數(shù)改為0

;++muNkcaL??

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

?

cout〈

”;

?;ldne<〈tuoc? }

? } ?

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

cout<〈“該算法缺頁(yè)次數(shù)為:"<

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

{

int

PageOrder[MaxNumber];//頁(yè)面序列

int

PageCount[MaxNumber]={0};//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離

int

PageNum,LackNum=0,BlockNum;//頁(yè)面?zhèn)€數(shù),缺頁(yè)次數(shù),最小物理塊數(shù)

;0=etaRegaPkcaL

elbuod? bool found=false;

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

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

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

if(chioce2==1)

{?

cout<<”請(qǐng)輸入頁(yè)面?zhèn)€數(shù):”;

;muNegaP >>nic?;“數(shù)塊理物小最入輸請(qǐng)”〈〈tuoc? ;muNkcolB>>nic? cout<〈”請(qǐng)輸入頁(yè)面序列:”<

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

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

if(chioce3==1)

colB,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(OFIF?kNum,LackPageRat(yī)e,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;

;"束結(jié):1,續(xù)繼:0:束結(jié)是就還續(xù)繼擇選請(qǐng)"<chioce1;

} }

第五篇:頁(yè)面置換算法模擬,實(shí)驗(yàn)報(bào)告

中北大學(xué)軟件學(xué)院 實(shí) 驗(yàn) 報(bào) 告

業(yè)

軟件工程

課程名稱

計(jì)算機(jī)操作系統(tǒng)

學(xué)

號(hào)

輔導(dǎo)教師

成績(jī)

實(shí)驗(yàn)日期 2015、11、20 實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)名稱 :實(shí)驗(yàn)四

頁(yè)面置換算法模擬 2、實(shí)驗(yàn)?zāi)康?1)了解內(nèi)存分頁(yè)管理策略(2)掌握調(diào)頁(yè)策略(3)掌握一般常用得調(diào)度算法(4)學(xué)會(huì)各種存儲(chǔ)分配算法得實(shí)現(xiàn)方法。

(5)了解頁(yè)面大小與內(nèi)存實(shí)際容量對(duì)命中率得影響。

3、實(shí)驗(yàn)要求 編程實(shí)現(xiàn)頁(yè)面置換算法,最少實(shí)現(xiàn)兩種算法,比較算法得優(yōu)劣,并將調(diào)試結(jié)果顯示在計(jì)算機(jī)屏幕上,并檢測(cè)機(jī)算與筆算得一致性。

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

Y

N

Y

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

圖 4-1FIFO算法流程圖

結(jié)束

(2)

LRU(最近最久未使用)

Y

N

Y

圖 4—2

LRU 算法流程圖

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

結(jié)束 i++

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

Y

N

Y

圖4-3 OPT 流程圖

開(kāi)始 頁(yè)面走向存入數(shù)組 p[]中,內(nèi)存塊用 page[]表示初始化為 0 當(dāng)前 p[]中第 i 個(gè)元素就是否已在內(nèi)存 Page[]就是否有空把 page[]中以后一段時(shí)間都不使用或就是使用時(shí)間離現(xiàn)在最遠(yuǎn)得換出、i++ 把 p[i]得內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++ 輸出當(dāng)前內(nèi)存塊狀態(tài)

結(jié)束 i++

6、實(shí)驗(yàn)代碼 #include <iostream〉 using namespace std;#define Bsize 3 #define Psize 20 struct pageInfor {

號(hào)面頁(yè)//

;tnetnoc tni? int timer;

//被訪問(wèn)標(biāo)記 };class PRA{ public:

PRA(void);

存內(nèi)閑空有否是就找查//

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

//查找內(nèi)存中就是否有該頁(yè)面

int findReplace(void);

//查找應(yīng)予置換得頁(yè)面

void display(void);

//顯示

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

void BlockClear(void);//BLOCK 恢復(fù)

pageInfor * block;//物理塊

pageInfor * page;//頁(yè)面號(hào)串 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回返,存內(nèi)閑空到找//;i nruter?;1— nruter?} int PRA::findExist(int curpage)

{

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

置位中 KCOLB 回返,面頁(yè)該有中存內(nèi)到找//;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;//找到應(yīng)予置換頁(yè)面,返回 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〈〈”頁(yè)缺不“<<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 置設(shè),用會(huì)不來(lái)將//};0001 = remit、]k[kcolb??一個(gè)很大數(shù)

??

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<<”不缺頁(yè)”<

?

block[exist]、timer = —1;//恢復(fù)存在得并剛訪問(wèn)過(guò)得BLOCK 中頁(yè)面 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<<"不缺頁(yè)"<

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 中所有頁(yè)面TIMER++

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

for(int i=0;i

{?

block[i]、content =-1;

? block[i]、timer = 0;

} void main(void){

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

cout〈〈”選擇<1>應(yīng)用 LRU 算法”〈<endl;

cout<<”選擇<2〉應(yīng)用 FIFO 算法”〈

cout<<”選擇<3>應(yīng)用 Optimal 算法“<〈endl;

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

PRA test;? while(select)

? cin〉>select;)tceles(hctiws?

{?

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

;)(URL、tset??

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

? break;

:2 esac?

cout<〈”FIFO 算法結(jié)果如下:“<<endl;

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

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

?

break;

case 3:

;ldne〈<”:下如果結(jié)法算 lamitpO”<

test、Optimal();

?

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

default:

?

;ldne〈<”號(hào)能功確正入輸請(qǐng)“<<tuoc?

;kaerb?? }?? } }

6、實(shí)驗(yàn)結(jié)果

7、實(shí)驗(yàn)心得 加深了對(duì)操作系統(tǒng)得認(rèn)識(shí),了解了操作系統(tǒng)中各種資源分配算法得實(shí)現(xiàn),特別就是對(duì)虛擬存儲(chǔ),頁(yè)面置換有了深入得了解,并能夠用高級(jí)語(yǔ)言進(jìn)行模擬演示。在這短短得兩周時(shí)間里,通過(guò)瀏覽、閱讀有關(guān)得資料,學(xué)到了很多東西,同時(shí)也發(fā)現(xiàn)僅僅書本得知識(shí)就是遠(yuǎn)遠(yuǎn)不夠得,需要把知識(shí)運(yùn)用到實(shí)踐中去,能力才能得到提高。

使用 MFC可視化編程極大得減少了編寫得代碼量,直觀得界面設(shè)計(jì),不但便于修改,而且簡(jiǎn)化了界面程序代碼得編寫 兩種頁(yè)面置換算法 FIFO 與LRU理解起來(lái)相當(dāng)容易,但在實(shí)際編程實(shí)現(xiàn)得時(shí)候需要注意各種細(xì)節(jié),需要耐心細(xì)致,實(shí)際編程中遇到一些細(xì)節(jié)上得小問(wèn)題確實(shí)需要仔細(xì)考慮才行.

下載頁(yè)面替換算法實(shí)驗(yàn)報(bào)告word格式文檔
下載頁(yè)面替換算法實(shí)驗(yàn)報(bào)告.doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    操作系統(tǒng) 七次實(shí)驗(yàn)報(bào)告 常用頁(yè)面置換算法模擬實(shí)驗(yàn)

    操作系統(tǒng)課程第七次實(shí)驗(yàn)報(bào)告姓名學(xué)號(hào)系計(jì)算機(jī)任課教師指導(dǎo)教師評(píng)閱教師實(shí)驗(yàn)地點(diǎn)綜合樓B102實(shí)驗(yàn)時(shí)間2012-9-26實(shí)驗(yàn)課表現(xiàn)出勤和個(gè)人表現(xiàn)Q1(15+15(組長(zhǎng)評(píng)分)=30分)得分:實(shí)驗(yàn)總分(......

    頁(yè)面置換算法模擬

    “計(jì)算機(jī)操作系統(tǒng)”課程設(shè)計(jì)大作業(yè) 一、題目: 頁(yè)面置換算法模擬實(shí)驗(yàn) 二、目的 分別采用最佳(Optimal)置換算法、先進(jìn)先出(FIFO)頁(yè)面置換算法和最近最少使用(LRU)置換算法對(duì)......

    算法實(shí)驗(yàn)報(bào)告

    《算法設(shè)計(jì)與分析》 實(shí)驗(yàn)報(bào)告 班級(jí)姓名學(xué)號(hào)年 月日 目錄 實(shí)驗(yàn)一二分查找程序?qū)崿F(xiàn)…………………………………………………………………03頁(yè) 實(shí)驗(yàn)二棋盤覆蓋問(wèn)題(分治法).…......

    實(shí)驗(yàn)5 頁(yè)面置換算法

    實(shí)驗(yàn)5 頁(yè)面置換算法 一、實(shí)驗(yàn)題目:頁(yè)面置換算法(請(qǐng)求分頁(yè)) 二、實(shí)驗(yàn)?zāi)康模? 進(jìn)一步理解父子進(jìn)程之間的關(guān)系。 1) 理解內(nèi)存頁(yè)面調(diào)度的機(jī)理。 2) 掌握頁(yè)面置換算法的實(shí)現(xiàn)方法。 3) 通......

    RSA算法實(shí)驗(yàn)報(bào)告

    信息安全實(shí)驗(yàn)報(bào)告 題 目 RSA算法 姓 名 學(xué) 號(hào) 專業(yè)年級(jí) 計(jì)算機(jī)科學(xué)與技術(shù)2014級(jí)(1)班 指導(dǎo)教師 2016年 12 月 10日 一、 實(shí)驗(yàn)?zāi)康?了解非對(duì)稱加密機(jī)制 理解RSA算法的加解密原......

    銀行家算法實(shí)驗(yàn)報(bào)告

    計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告 何美西109253030212 一、 實(shí)驗(yàn)名稱:銀行家算法 二、 實(shí)驗(yàn)?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過(guò)編寫一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資......

    銀行家算法實(shí)驗(yàn)報(bào)告

    計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)報(bào)告 一、 實(shí)驗(yàn)名稱:銀行家算法 二、 實(shí)驗(yàn)?zāi)康模恒y行家算法是避免死鎖的一種重要方法,通過(guò)編寫一個(gè)簡(jiǎn)單的銀行家算法程序,加深了解有關(guān)資源申請(qǐng)、避免死鎖等概......

    PRIM算法實(shí)驗(yàn)報(bào)告

    篇一:prim算法實(shí)驗(yàn)報(bào)告算法實(shí)驗(yàn)報(bào)告學(xué)院:xxx 班級(jí):xxx 學(xué)號(hào):xxx 姓名:xxx prim 篇二:prim最小生成樹(shù)算法實(shí)驗(yàn)報(bào)告 算法分析與設(shè)計(jì)之prim 學(xué)院:軟件學(xué)院 學(xué)號(hào):201421031059 姓名:呂呂......

主站蜘蛛池模板: 国产精品高潮呻吟av久久无吗| 亚洲v天堂v手机在线| 国产熟妇另类久久久久| 国产亚洲精品久久久久妲己| 风流少妇又紧又爽又丰满| 无码国产精品一区二区免费式直播| 亚洲欧美成人一区二区三区| 国产亚洲精品美女久久久| 成人无码免费一区二区三区| 亚洲精品久久久久久久久久久捆绑| a级大胆欧美人体大胆666| 精品国内综合一区二区| 亚洲狠狠婷婷综合久久| 国产成人福利美女观看视频| 一区二区三区高清av专区| 中文字幕乱码无码人妻系列蜜桃| 亚洲精品久久国产高清情趣图文| 国内精品久久久久久无码不卡| 国产精品无码av一区二区三区| 亚洲日韩亚洲另类激情文学| 狂野欧美性猛xxxx乱大交| 国产精品嫩草影院av| а天堂8中文最新版在线官网| 色一情一乱一伦一视频免费看| 亚洲日韩欧美在线观看一区二区三区| 巨胸美乳无码人妻视频| 伊人天天狠天天添日日拍| 亚洲国产精品久久久天堂麻豆宅男| 亚州性无码不卡免费视频| 精品一区heyzo在线播放| 天天鲁一鲁摸一摸爽一爽| 野花社区在线www日本| 高清无码午夜福利在线观看| 台湾无码av一区二区三区| 国产精品午夜无码av体验区| 午夜成人片在线观看免费播放| 亚洲狼人伊人中文字幕| 欧美极品美女| 日韩毛片免费无码无毒视频观看| 国产97在线 | 日韩| 国产亚洲一区二区手机在线观看|