《頁面置換算法模擬 實驗資料報告材料》由會員分享,可在線閱讀,更多相關(guān)《頁面置換算法模擬 實驗資料報告材料(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、word
中北大學(xué)軟件學(xué)院
實 驗 報 告
專 業(yè) 軟件工程
課程名稱 計算機(jī)操作系統(tǒng)
學(xué) 號
姓 名
輔導(dǎo)教師 靜 成績
實驗日期
實驗時間
1實驗名稱 :實驗四 頁面置換算法模擬
2、實驗?zāi)康?
〔1〕了解存分頁管理策略
〔2〕掌握調(diào)頁策略
〔3〕掌握一般常用的調(diào)度算法
〔4〕學(xué)會各種存儲分配算法的實現(xiàn)方法。
〔5〕了解頁面大小和存實際容量對命中率的影響。
3、實驗
2、要求
編程實現(xiàn)頁面置換算法,最少實現(xiàn)兩種算法,比擬算法的優(yōu)劣,并將調(diào)試結(jié)果顯示在計算機(jī)屏幕上,并檢測機(jī)算和筆算的一致性。
〔1〕采用頁式分配存儲方案,通過分別計算不同算法的命中率來比擬算法的優(yōu)劣,同時也考慮頁面大小與存實際容量對命中率的影響;
〔2〕實現(xiàn)OPT 算法 (最優(yōu)置換算法)?、LRU 算法 (Least Recently)?、 FIFO 算法 (First IN First Out)的模擬;
〔3〕使用某種編程語言模擬頁面置換算法。
4、實驗算法描述
〔1〕FIFO〔先進(jìn)先出〕
開始
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
3、
當(dāng)前p[]中第i個元素是否已在內(nèi)存中
i++
Y
Page[]是否有空
N
N
把p[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中最先裝入的頁面置換出去.i++
Y
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-1FIFO算法流程圖
開始
〔2〕 LRU〔最近最久未使用〕
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個元素是否已在內(nèi)存
i++
Y
N
Page[]是否有空
Y
4、 N
把p[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中最近最久未使用的頁面置換出去.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-2 LRU算法流程圖
〔3〕OPT〔最優(yōu)置換算法〕
開始
頁面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個元素是否已在內(nèi)存
i++
Y
Page[]是否有空
N
Y N
把p
5、[i]的內(nèi)容直接裝入最上面一個空內(nèi)存塊,i++
把page[]中以后一段時間都不使用或是使用時間離現(xiàn)在最遠(yuǎn)的換出.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-3 OPT 流程圖
6、實驗代碼
#include
using namespace std;
#define Bsize 3
#define Psize 20
struct pageInfor
{
int content; //頁面號
int timer; //
6、被訪問標(biāo)記
};
class PRA{
public:
PRA(void);
int findSpace(void); //查找是否有空閑存
int findExist(int curpage); //查找存中是否有該頁面
int findReplace(void); //查找應(yīng)予置換的頁面
void display(void); //顯示
void FIFO(void);//FIFO算法
void LRU(void);//LRU算法
void Optimal(void);//OPTIMAL算法
v
7、oid 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};
block = new pageInfor[Bsize];
for(int i=0; i
8、ge = new pageInfor[Psize];
for(i=0; i
9、i=0; i= block[pos].timer)
pos = i;//找到應(yīng)予置換頁面,返回BLOCK中位置
return pos;
}
void PRA::di
10、splay(void)
{
for(int i=0; i
11、
else
{
space = findSpace();
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
for(int k=0; k
12、IMER為一個很大數(shù)
else
{
block[k].timer = j;
break;
}
}
position = findReplace();
block[position] = page[i];
display();
}
}
}
}
void PRA::LRU(void)
{
int exist,space,position ;
for(int i = 0; i < Psize; i++)
{
exist = find
13、Exist(i);
if(exist != -1)
{
cout<<"不缺頁"<
14、on] = page[i];
display();
}
}
for(int j=0; j
15、
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
position = findReplace();
block[position] = page[i];
display();
}
}
for(int j=0; j
16、r(int i=0; i應(yīng)用LRU算法"<應(yīng)用FIFO算法"<應(yīng)用Optimal算法"<
17、<<"選擇<0>退出"<>select;
switch(select)
{
case 0:
break;
case 1:
cout<<"LRU算法結(jié)果如下:"<
18、;
test.FIFO();
test.BlockClear();
cout<<"----------------------"<
19、
6、實驗結(jié)果
7、實驗心得
加深了對操作系統(tǒng)的認(rèn)識,了解了操作系統(tǒng)中各種資源分配算法的實現(xiàn),特別是對虛擬存儲,頁面置換有了深入的了解,并能夠用高級語言進(jìn)展模擬演示。在這短短的兩周時間里,通過瀏覽、閱讀有關(guān)的資料,學(xué)到了很多東西,同時也發(fā)現(xiàn)僅僅書本的知識是遠(yuǎn)遠(yuǎn)不夠的,需要把知識運用到實踐中去,能力才能得到提高。
使用MFC可視化編程極大的減少了編寫的代碼量,直觀的界面設(shè)計,不但便于修改,而且簡化了界面程序代碼的編寫
兩種頁面置換算法FIFO和LRU理解起來相當(dāng)容易,但在實際編程實現(xiàn)的時候需要注意各種細(xì)節(jié),需要耐心細(xì)致,實際編程中遇到一些細(xì)節(jié)上的小問題確實需要仔細(xì)考慮才行。
14 / 14