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