一、实验名称
存储管理
二、实验内容
设计一个请求页式存储管理方案,并编写模拟程序实现。淘汰算法采用两种不同的算法如: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♪(・ω・)ノ