操作系统实验:存储管理
一、实验目的
1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。
2、掌握请求页式存储管理中页面置换算法的模拟设计方法。
3、通过随机产生页面访问序列开展有关算法的测试及性能比较。
二、实验内容
设计一个虚拟存储区和内存工作区,并使用下述方法计算访问命中率。
①先进先出的算法(FIFO);
②最近最少少使用算法(LRU);
③最佳淘汰算法(OPT):选淘汰最不常用的页地址;
④最少访问页面算法(LFR);
⑤最近最不经常使用算法(NUR).
(其中③④为选择内容)
命中率= 1 - 页面失效次数 / 页地址流长度
三、设计原理(或方案)及相关算法
1.fifo算法流程图
2.Lru算法流程图
3.opt算法流程图
运行结果及分析:
分析:通过多次运行结果发现,OPT算法淘汰页面最少,命中率始终最高,FIFO算法和LRU算法命中率差不多,但是淘汰页面大有不同。
源程序:
-
-
-
-
-
-
int IsInBuf(int buf[],int x)//返回某个数X有没有在缓冲区buf[]中
-
{
-
int i,j=-1;
-
for(i=0;i<B;i )
-
{
-
if(buf[i]==x)
-
{
-
j=i;
-
break;
-
}else if(buf[i]==-1)
-
{
-
buf[i]=x;
-
j=i;
-
break;
-
}
-
-
}
-
return j;
-
}
-
int oldest(int list[],int buf[],int f[],int start)//返回最近最久未使用的页面的位置
-
{
-
int i,j;
-
for(i=0;i<B;i )
-
{
-
for(j=start;j<N;j )
-
{
-
if(buf[i]==list[j])break;
-
}
-
f[i]=j;
-
}
-
return oldest2(f);
-
}
-
int oldest2(int f[])//返回最长时间不使用的页面的位置
-
{
-
int i,j=0,max=-1;
-
for(i=0;i<B;i )
-
{
-
if(f[i]>max){max=f[i];j=i;}
-
f[i] ;
-
}
-
return j;
-
}
-
void main()
-
{
-
int list[N];
-
int buf[B],f[B],i,j,k,max,min;
-
int old=0;
-
int change=0;
-
printf("本程序假设内存为程序分配的内存块数是4!\n");
-
srand((int)time(NULL));//生成一系列随机数并初始化环境
-
for(i=0;i<B;i )buf[i]=f[i]=-1;
-
printf("产生的随机数列为:\n");
-
for(i=0;i<N;i )
-
{
-
list[i]=(int)rand()%10;//产生随机数列
-
printf("-",list[i]);
-
}
-
printf("\n");
-
printf("\nOPT淘汰页面的序列为:\n");
-
change=0;
-
for(i=0;i<B;i )buf[i]=f[i]=-1;
-
for(i=0;i<N;i )
-
{
-
j=IsInBuf(buf,list[i]);
-
if(j==-1)
-
{
-
old=oldest(list,buf,f,i);
-
printf("-",buf[old]);
-
buf[old]=list[i];
-
f[old]=0;
-
change ;
-
}
-
else
-
{
-
printf("");
-
}
-
}
-
printf("\nOPT算法的命中率为:%f\n",1-(float)change/320);
-
printf("\nFIFO淘汰页面的序列为:\n");
-
change=0;
-
for(i=0;i<B;i )buf[i]=-1;
-
for(i=0;i<N;i )
-
{
-
j=IsInBuf(buf,list[i]);
-
if(j==-1)
-
{
-
if(buf[old]==-1)printf("");
-
else printf("-",buf[old]);
-
buf[old]=list[i];
-
old=(old 1)%(int)B;
-
change ;
-
}
-
else
-
printf("");
-
}
-
printf("\nFIFO算法的命中率为:%f\n",1-(float)change/320);
-
printf("\nLRU淘汰页面的序列为:\n");
-
change=0;
-
for(i=0;i<B;i )buf[i]=f[i]=-1;
-
for(i=0;i<N;i )
-
{
-
j=IsInBuf(buf,list[i]);
-
old=oldest2(f);
-
if(j==-1)
-
{
-
printf("-",buf[old]);
-
buf[old]=list[i];
-
f[old]=0;
-
change ;
-
}
-
else
-
{
-
f[j]=0;
-
printf("");
-
}
-
-
}
-
printf("\nLRU算法的命中率为:%f\n",1-(float)change/320);
-
}
-
-
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbgibe
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13