浙江理工大学操作系统实验三页面置换算法详解.docx
《浙江理工大学操作系统实验三页面置换算法详解.docx》由会员分享,可在线阅读,更多相关《浙江理工大学操作系统实验三页面置换算法详解.docx(20页珍藏版)》请在冰豆网上搜索。
浙江理工大学操作系统实验三页面置换算法详解
操作系统实验报告
班级:
计算机科学与技术三班姓名:
李生启学号:
2013329620077
实验三:
页面置换算法
一、实验目的
1、熟悉内存分页管理策略。
2、编写OPT、FIFO、LRU,LFU四种置换算法并模拟实现。
3、锻炼知识的运用能力和实践能力。
二、实验内容
设计主界面,输入一串系列模拟页面请求,实现以下算法:
1)最佳置换算法(OPT):
将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
2)先进先出算法(FIFO):
淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
3)最近最久未使用算法(LRU):
淘汰最近最久未被使用的页面。
4)最不经常使用算法(LFU)
三、代码及运行结果分析
1.代码:
(采用C++,环境:
VS2010)
#include
#include
#include
#include
usingnamespacestd;
voidOPT(intcount)
{
intall[50];
intbracket[3];
intbll[50]={0};
ifstreamfin("abc.txt");
if(fin.is_open())
{
for(inti=0;i{
fin>>all[i];
}
fin.close();
}
bracket[0]=all[0];
bracket[1]=all[1];
bracket[2]=all[2];
for(inti=0;i{
if(i<3)
{
if(i==0)
{
cout<<"当前序列:
"<cout<}
if(i==1)
{
cout<<"当前序列:
"<cout<}
if(i==2)
{
cout<<"当前序列:
"<cout<}
}
if(i>=3)
{
inta_num=count+1;
intb_num=count+1;
intc_num=count+1;
intqi=0;
for(intx=0;x<3;x++)
{
if(bracket[x]==all[i])
{
cout<<"当前序列:
"<cout<qi=6;
break;
}
}
if(qi==0)
{
for(inte=i+1;e{
if(bracket[0]==all[e])
{
a_num=e;break;
}
}
for(inte=i+1;e{
if(bracket[1]==all[e])
{
b_num=e;break;
}
}
for(inte=i+1;e{
if(bracket[2]==all[e])
{
c_num=e;break;
}
}
}
if((a_num>=b_num)&&(a_num>=c_num))bracket[0]=all[i];
elseif((b_num>=a_num)&&(b_num>=c_num))bracket[1]=all[i];
elseif((c_num>=b_num)&&(c_num>=a_num))bracket[2]=all[i];
cout<<"当前序列:
"<cout<}
}
}
voidFIFO(intcount)
{
intbll[50]={0};
intall[50];
inttop=0;
ifstreamfin("abc.txt");
if(fin.is_open())
{
for(inti=0;i{
fin>>all[i];
}
fin.close();
}
for(inti=0;i{
if(top<3)
{
bll[top]=all[i];
top++;
if(top==1)
{
cout<<"当前序列:
"<cout<}
if(top==2)
{
cout<<"当前序列:
"<cout<}
if(top==3)
{
cout<<"当前序列:
"<cout<}
}
if(top>=3)
{
if((all[i]!
=bll[top-1])&&(all[i]!
=bll[top-2])&&(all[i]!
=bll[top-3]))
{
bll[top]=all[i];
top++;
}
cout<<"当前序列:
"<cout<}
}
}
voidLRU(intcount)
{
intbll[50]={0};
intall[50];
inttop=0;
ifstreamfin("abc.txt");
if(fin.is_open())
{
for(inti=0;i{
fin>>all[i];
}
fin.close();
}
for(inti=0;i{
if(top<3)
{
bll[top]=all[i];
top++;
if(top==1)
{
cout<<"当前序列:
"<cout<}
if(top==2)
{
cout<<"当前序列:
"<cout<}
if(top==3)
{
cout<<"当前序列:
"<cout<}
}
if(top>=3)
{
intend[3];
intpoint=0;
bll[top]=all[i];
top++;
end[0]=bll[top-1];
point++;
for(inti=top-2;i>=0;i--)
{
if(point==3)
{
cout<<"当前序列:
"<cout<point=0;
break;
}
elseif((point==1)&&(end[0]!
=bll[i]))
{
end[point]=bll[i];
point++;
}
elseif((point==2)&&(end[0]!
=bll[i])&&(end[1]!
=bll[i]))
{
end[point]=bll[i];
point++;
}
}
}
}
}
voidLFU(intcount)
{
intall[50];
intbll[50]={0};
inttop=0;
intbracket[3];
ifstreamfin("abc.txt");
if(fin.is_open())
{
for(inti=0;i{
fin>>all[i];
}
fin.close();
}
bracket[0]=all[0];
bracket[1]=all[1];
bracket[2]=all[2];
for(inti=0;i{
inta_num=0;
intb_num=0;
intc_num=0;
intqi=0;
if(i<3)
{
if(i==0)
{
cout<<"当前序列:
"<cout<}
if(i==1)
{
cout<<"当前序列:
"<cout<}
if(i==2)
{
cout<<"当前序列:
"<cout<}
}
if(i>=3)
{
for(intx=0;x<3;x++)
{
if(bracket[x]==all[i])
{
cout<<"当前序列:
"<cout<qi=6;
break;
}
}
if(qi==0)
{
for(inte=0;e<=i;e++)
{
if(bracket[0]==all[e])
{
a_num++;
}
}
for(inte=0;e<=i;e++)
{
if(bracket[1]==all[e])
{
b_num++;
}
}
for(inte=0;e<=i;e++)
{
if(bracket[2]==all[e])
{
c_num++;
}
}
}
if((a_num<=b_num)&&(a_num<=c_num))
{
bracket[0]=all[i];
}
elseif((b_num<=a_num)&&(b_num<=c_num))
{
bracket[1]=all[i];
}
elseif((c_num<=b_num)&&(c_num<=a_num))
{
bracket[2]=all[i];
}
cout<<"当前序列:
"<cout<}
}
}
intmain()
{
inta[50];
intcount=0;
cout<<"请输入页面请求序列的个数:
"<cin>>count;
ofstreamout("abc.txt");
cout<<"请输入页面请求序列:
"<if(out.is_open())
{
for(inti=0;i{
cin>>a[i];
out<}
out.close();
}
while(true)
{
intchoose;
cout<<"--------------------------------"<cout<<"最佳置换算法(OPT)--------1"<cout<<"先进先出算法(FIFO)-------2"<cout<<"最近最久未使用算法(LRU)--3"<cout<<"最不经常使用算法(LFU)----4"<cout<<"退出系统-----------------5"<cout<<"--------------------------------"<cout<<"输入要执行的操作;"<cin>>choose;
switch(choose)
{
case1:
OPT(count);break;
case2:
FIFO(count);break;
case3:
LRU(count);break;
case4:
LFU(count);break;
default:
break;
}
}
}
2.运行结果及分析:
1.第一张图为输入的主界面,本程序可以选择输入任意长度页面和任意的页面请求序列,如上选择的是10个页面,页面请求序列如上,同时选择菜单如上。
2.第二张截图如上,为选择菜单中的第一项操作---最佳置换算法(OPT),按1运行,运行结果如图。
3.第三张截图如上,为选择菜单中的第二项操作---先进先出算法(FIFO),按2运行,运行结果如图。
4.第四张截图如上,为选择菜单中的第三项操作---最近最久未使用算法(LRU),按3运行,运行结果如图。
5.第五张截图如上,为选择菜单中的第四项操作---最不经常使用算法(LFU),按4运行,运行结果如图。
6.第六张截图如上,为选择菜单中的第五项操作---退出系统,按5退出,运行结果如图。
四、实验心得
此次实验我很认真并及时的完成任务,在刚做这四个算法时,我开始只会做出两个算法—LRU和FIFO,之后的两个算法通过多次理解定义和看资料,终于明白实现算法的方法,此次实验我使用的是C++语言,我不仅熟悉内存分页管理策略和编写OPT、FIFO、LRU,LFU四种置换算法并模拟实现而且锻炼知识的运用能力和实践能力,并且熟练了大二上学期学习的C++语言,在实验途中遇到很多的困难,但所幸我静下心来一一克服,最终成功,其实编程就是在理论的基础上不断积累编程经验才会更加熟练和理解深入。