一、實驗名稱
存儲管理
二、實驗內容
設計一個請求頁式存儲管理方案,並編寫模擬程序實現。淘汰算法採用兩種不同的算法如:FIFO和LRU,並比較它們的不同之處。
三、實驗原理和設計思路
不同的置換算法,可使同一組進程發生的缺頁率不同,如果採用的置換算法不當,會大大降低CPU的使用高效率。
FIFO算法優先置換最先進入內存的頁。LRU每次選擇離當前時間被訪問最遠的頁置換。
四、核心代碼
// 框架採用Houchaoqun_XMU提供的源代碼
//海轟根據實驗具體要求進行了改進
void FIFO()
{
cout<<"------------------ FIFO算法------------------ "<<endl;
cout<<"頁面置換情況如下:"<<endl;
initial();
bool isInQueue;
int point = 0;
for (int i = MinBlockNum;i<PageNum;i++)
{
isInQueue = false;
for (int k = 0;k<MinBlockNum;k++)
{
if (VirtualQueue[k] == PageOrder[i]) //如果當前頁面在隊列中
{
isInQueue = true;
}
}
if (!isInQueue) //如果當前頁面不在隊列中,則進行相應的處理
{
LackPageNum++; //缺頁數加1
VirtualQueue[point] = PageOrder[i];
display(PageOrder[i],!isInQueue);// 填滿之後的輸出
point++;
if (point == MinBlockNum)
{
point = 0; //當point指向隊尾後一位的時候,將point重新指向隊首
}
}
else
{
display(PageOrder[i],!isInQueue);
}
}
}
void LRU()
{
cout<<"------------------LRU算法------------------ "<<endl;
cout<<"頁面置換情況如下:"<<endl;
initial();
bool isInQueue;
int point,k; //指向最長時間未被訪問的下標
for(int i = MinBlockNum;i<PageNum;i++)
{
isInQueue = false;
for (k = 0;k<MinBlockNum;k++)
{
if (VirtualQueue[k] == PageOrder[i]) //如果當前頁面在隊列中
{
isInQueue = true;
}
}
if (!isInQueue)
{
LackPageNum++;
point = 0;
for (int j = 1;j<MinBlockNum;j++)
{
if (LRUtime[point]<LRUtime[j])
{
point = j;
}
}
for (int s = 0;s<MinBlockNum;s++)//其餘頁面對應的時間要+1
{
if (VirtualQueue[s] != VirtualQueue[point])
{
LRUtime[s]++;
}
}
VirtualQueue[point] = PageOrder[i];
LRUtime[point] = 0;
display(PageOrder[i],!isInQueue);
}//if
else //負責更新當前對應頁面的時間
{
for (int s = 0;s<MinBlockNum;s++)//其餘頁面對應的時間要+1
{
if (VirtualQueue[s] != PageOrder[i])
{
LRUtime[s]++;
}
else
LRUtime[s] = 0;
}
display(PageOrder[i],!isInQueue);
}
}//for
}
五、結果截圖(部分)
雨聽
青苔入鏡 檐下風鈴 搖晃曾經 回憶 無從剪接
微信搜索【海轟Pro】
相互學習,共同進步!
海轟會不間斷更新源碼的 Thanks♪(・ω・)ノ