编写程序来模拟计算机LRU算法,操作系统-页式虚拟存储管理程序模拟.doc
實 驗3: 頁式虛擬存儲管理程序模擬
實驗目的: 編寫程序來模擬計算機的兩種調度方式:
(1)先進先出算法
(2)最近最少使用算法
程序設計
FIFO()
FIFO()
LRU()
Msize加1
S=?
用戶內存空間msize=2
Msize≤32
是否用其他算法繼續
結 束
N
Y
1
2
Y
N
提示出錯,重新輸入
輸入算法號S
1≤S≤4
開 始
生成地址流
形成地址頁號
FIFO頁面置換算法
1在分配內存頁面數(AP)小于進程頁面數(PP)時,當然是最先運行的AP個頁面放入內存。
2這時有需要處理新的頁面,則將原來內存中的AP個頁面最先進入的調出(是以稱為FIFO),然后將新頁面放入。
3以后如果再有新頁面需要調入,則都按2的規則進行。
算法特點:所使用的內存頁面構成一個隊列。
LRU頁面置換算法
1當分配內存頁面數(AP)小于進程頁面數(PP)時,當然是把最先執行的AP個頁面放入內存。
2當需要調頁面進入內存,而當前分配的內存頁面全部不空閑時,選擇將其中最長時間沒有用到的那個頁面調出,以空出內存來放置新調入的頁面(稱為LRU)。
算法特點:每個頁面都有屬性來表示有多長時間未被CPU使用的信息。
結果分析
#include
#include
using namespace std;
const int MaxNum=320;//指令數
const int M=5;//內存容量
int PageOrder[MaxNum];//頁面請求
int Simulate[MaxNum][M];//頁面訪問過程
int PageCount[M],LackNum;//PageCount用來記錄LRU算法中最久未使用時間,LackNum記錄缺頁數
float PageRate;//命中率
int PageCount1[32];
bool IsExit(int i)//FIFO算法中判斷新的頁面請求是否在內存中
{ bool f=false;
for(int j=0;j
{if(Simulate[i-1][j]==PageOrder[i])//在前一次頁面請求過程中尋找是否存在新的頁面請求
{ f=true; }
}
return f;
}
int IsExitLRU(int i)//LRU算法中判斷新的頁面請求是否在內存中
{int f=-1;
for(int j=0;j
{if(Simulate[i-1][j]==PageOrder[i])
{ f=j; }
}
return f;
}
int Compare()//LRU算法找出內存中需要置換出來的頁面
{ int p,q;
p=PageCount[0];
q=0;
for(int i=1;i
{if(p
{p=PageCount[i];
q=i; }
}
return q;
}
void Init() //初始化頁框
{for(int k=0;k
{int n=rand()%320;//隨機數產生320次指令
PageOrder[k]=n/10;//根據指令產生320次頁面請求}
for(int i=0;i
{ for(int j=0;j
{ Simulate[i][j]=-1; }
}
for(int q=0;q
{PageCount[q]=0; }
}
void OutPut()//輸出
{int i,j;
cout<
for(j=0;j
{cout<
cout<
cout<
for(i=0;i<10;i++)
{for(j=0;j
{if(Simulate[i][j]==-1)
cout<
else
cout<
}
cout<
}
cout<
cout<
cout<
}
void FIFO()//FIFO算法
{int j,x=0,y=0;
LackNum=0,
Init();
for(j=0;j
總結
以上是生活随笔為你收集整理的编写程序来模拟计算机LRU算法,操作系统-页式虚拟存储管理程序模拟.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深圳快测计算机技术有限公司,口罩快速检测
- 下一篇: 算盘与电子计算机的区别之一是,算盘与电子