《頁面置換算法模擬 實驗報告》由會員分享,可在線閱讀,更多相關(guān)《頁面置換算法模擬 實驗報告(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。
中北大學(xué)軟件學(xué)院
實 驗 報 告
專 業(yè) 軟件工程
課程名稱 計算機(jī)操作系統(tǒng)
學(xué) 號
姓 名
輔導(dǎo)教師 張 靜 成績
實驗日期
2015.11.20
實驗時間
1實驗名稱 :實驗四 頁面置換算法模擬
2、實驗?zāi)康?
(1)了解內(nèi)存分頁管理
2、策略
(2)掌握調(diào)頁策略
(3)掌握一般常用的調(diào)度算法
(4)學(xué)會各種存儲分配算法的實現(xiàn)方法。
(5)了解頁面大小和內(nèi)存實際容量對命中率的影響。
3、實驗要求
編程實現(xiàn)頁面置換算法,最少實現(xiàn)兩種算法,比較算法的優(yōu)劣,并將調(diào)試結(jié)果顯示在計算機(jī)屏幕上,并檢測機(jī)算和筆算的一致性。
(1)采用頁式分配存儲方案,通過分別計算不同算法的命中率來比較算法的優(yōu)劣,同時也考慮頁面大小及內(nèi)存實際容量對命中率的影響;
(2)實現(xiàn)OPT 算法 (最優(yōu)置換算法)?、LRU 算法 (Least Recently)?、 FIFO 算法 (First IN First Out)的模擬;
(3)使用某種編程語
3、言模擬頁面置換算法。
4、實驗算法描述
(1)FIFO(先進(jìn)先出)
開始
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個元素是否已在內(nèi)存中
i++
Y
Page[]是否有空
N
4、 N
把p[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中最先裝入的頁面置換出去.i++
Y
輸出當(dāng)前內(nèi)存塊狀態(tài)
結(jié)束
圖4-1FIFO算法流程圖
開始
(2) LRU(最近最久未使用)
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個元素是否已在內(nèi)存
i++
Y
5、 N
Page[]是否有空
Y N
把p[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中最近最久未使用的頁面置換出去.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
結(jié)束
圖4-2 LRU算法流程圖
(3)OPT(最佳置換算法)
開始
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個元素是否已在內(nèi)存
i++
6、 Y
Page[]是否有空
N
Y N
把p[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中以后一段時間都不使用或是使用時間離現(xiàn)在最遠(yuǎn)的換出.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
結(jié)束
圖4-3 OPT 流程圖
6、實驗代碼
#include
using namespace std;
#defin
7、e Bsize 3
#define Psize 20
struct pageInfor
{
int content; //頁面號
int timer; //被訪問標(biāo)記
};
class PRA{
public:
PRA(void);
int findSpace(void); //查找是否有空閑內(nèi)存
int findExist(int curpage); //查找內(nèi)存中是否有該頁面
int findReplace(void); //查找應(yīng)予置換的頁面
8、
void display(void); //顯示
void FIFO(void);//FIFO算法
void LRU(void);//LRU算法
void Optimal(void);//OPTIMAL算法
void BlockClear(void);//BLOCK恢復(fù)
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};
9、
block = new pageInfor[Bsize];
for(int i=0; i
10、
if(block[i].content == -1)
return i;//找到空閑內(nèi)存,返回BLOCK中位置
return -1;
}
int PRA::findExist(int curpage)
{
for(int i=0; i
11、t i=0; i= block[pos].timer)
pos = i;//找到應(yīng)予置換頁面,返回BLOCK中位置
return pos;
}
void PRA::display(void)
{
for(int i=0; i
12、e,position ;
for(int i=0; i
13、 for(int j=i; j
14、y();
}
}
}
}
void PRA::LRU(void)
{
int exist,space,position ;
for(int i = 0; i < Psize; i++)
{
exist = findExist(i);
if(exist != -1)
{
cout<<"不缺頁"<
15、!= -1)
{
block[space] = page[i];
display();
}
else
{
position = findReplace();
block[position] = page[i];
display();
}
}
for(int j=0; j
16、 i
17、();
}
}
for(int j=0; j
18、,3,2,1,2,0,1,7,0,1"<應(yīng)用LRU算法"<應(yīng)用FIFO算法"<應(yīng)用Optimal算法"<退出"<>select;
switch(select)
{
case 0:
break;
case 1:
cout<<"LRU算法結(jié)果如下:"<
19、test.LRU();
test.BlockClear();
cout<<"----------------------"<
20、ockClear();
cout<<"----------------------"<