《頁(yè)面置換算法模擬 實(shí)驗(yàn)資料報(bào)告材料》由會(huì)員分享,可在線閱讀,更多相關(guān)《頁(yè)面置換算法模擬 實(shí)驗(yàn)資料報(bào)告材料(14頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、word
中北大學(xué)軟件學(xué)院
實(shí) 驗(yàn) 報(bào) 告
專 業(yè) 軟件工程
課程名稱 計(jì)算機(jī)操作系統(tǒng)
學(xué) 號(hào)
姓 名
輔導(dǎo)教師 靜 成績(jī)
實(shí)驗(yàn)日期
實(shí)驗(yàn)時(shí)間
1實(shí)驗(yàn)名稱 :實(shí)驗(yàn)四 頁(yè)面置換算法模擬
2、實(shí)驗(yàn)?zāi)康?
〔1〕了解存分頁(yè)管理策略
〔2〕掌握調(diào)頁(yè)策略
〔3〕掌握一般常用的調(diào)度算法
〔4〕學(xué)會(huì)各種存儲(chǔ)分配算法的實(shí)現(xiàn)方法。
〔5〕了解頁(yè)面大小和存實(shí)際容量對(duì)命中率的影響。
3、實(shí)驗(yàn)
2、要求
編程實(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è)面大小與存實(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)先出〕
開(kāi)始
頁(yè)面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
3、
當(dāng)前p[]中第i個(gè)元素是否已在內(nèi)存中
i++
Y
Page[]是否有空
N
N
把p[i]的內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++
把page[]中最先裝入的頁(yè)面置換出去.i++
Y
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-1FIFO算法流程圖
開(kāi)始
〔2〕 LRU〔最近最久未使用〕
頁(yè)面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個(gè)元素是否已在內(nèi)存
i++
Y
N
Page[]是否有空
Y
4、 N
把p[i]的內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++
把page[]中最近最久未使用的頁(yè)面置換出去.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-2 LRU算法流程圖
〔3〕OPT〔最優(yōu)置換算法〕
開(kāi)始
頁(yè)面走向存入數(shù)組p[]中,內(nèi)存塊用page[]表示初始化為0
當(dāng)前p[]中第i個(gè)元素是否已在內(nèi)存
i++
Y
Page[]是否有空
N
Y N
把p
5、[i]的內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++
把page[]中以后一段時(shí)間都不使用或是使用時(shí)間離現(xiàn)在最遠(yuǎn)的換出.i++
輸出當(dāng)前內(nèi)存塊狀態(tài)
完畢
圖4-3 OPT 流程圖
6、實(shí)驗(yàn)代碼
#include
using namespace std;
#define Bsize 3
#define Psize 20
struct pageInfor
{
int content; //頁(yè)面號(hào)
int timer; //
6、被訪問(wèn)標(biāo)記
};
class PRA{
public:
PRA(void);
int findSpace(void); //查找是否有空閑存
int findExist(int curpage); //查找存中是否有該頁(yè)面
int findReplace(void); //查找應(yīng)予置換的頁(yè)面
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;//頁(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];
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)予置換頁(yè)面,返回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為一個(gè)很大數(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<<"不缺頁(yè)"<
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、實(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ì)考慮才行。
14 / 14