- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储管理实验实验报告
实验三 存储管理
实验报告:
程序流程:
先进先出(FIFO)页面置换算法
这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
最近最久未使用(LRU)置换算法
FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
源码详细注释:
#includestdio.h
#includetime.h
#includestdlib.h
main()
{
//定义变量,数组(fifo)
int i,j,k,m,n,max,ChangeNumber;
int counter=0;
int times[3]={0};
short PageNumber[20];
short PageTable[3]={0};
//定义变量,数组(lur)
int k2,m,n,min,ChangeNumber2;
int counter2=0;
int times2[3]={0};
short PageTable2[3]={0};
//是以当前时间为种子,产生随意数
srand(time(NULL));
for(i=0;i20;i++)
{
PageNumber[i]=rand()%10+1;
printf(%d ,PageNumber[i]);
}
printf(\n);
//物理块存储不重复的页面引用号(fifo)
PageTable[0]=PageNumber[0];
for(n=1;n20;n++)
{
if(PageTable[0]!=PageNumber[n])
{
PageTable[1]=PageNumber[n];
break;
}
}
for(k=2;k20;k++)
{
if((PageTable[0]!=PageNumber[k])(PageTable[1]!=PageNumber[k]))
{
PageTable[2]=PageNumber[k];
n=k;
m=k;
break;
}
}
counter=3;
//物理块存储不重复的页面引用号(lur)
PageTable2[0]=PageNumber[0];
for(n=1;n20;n++)
{
if(PageTable2[0]!=PageNumber[n])
{
PageTable2[1]=PageNumber[n];
break;
}
}
for(k2=2;n20;n++)
{
if((PageTable2[0]!=PageNumber[k2])(PageTable2[1]!=PageNumber[k2]))
{
PageTable2[2]=PageNumber[k2];
n=k2;
break;
}
}
//time标记(fifo)
for(j=0,m;j3;j++,m--)
{
times[j]=m;
}
for(n=k;n20;n++)
{
//FIFO PageNumber——与物理块中不重复 if((PageNumber[n]!=PageTable[0])(PageNumber[n]!=PageTable[1])(PageNumber[n]!=PageTable[2]))
{//time标记判断策略,时间最长
if(times[0]=times[1])
{
max=times[0];
}
else max=times[1];
if(max=
文档评论(0)