页面置换算法FIFO算法.docx

上传人:b****1 文档编号:22986250 上传时间:2023-04-29 格式:DOCX 页数:10 大小:47.96KB
下载 相关 举报
页面置换算法FIFO算法.docx_第1页
第1页 / 共10页
页面置换算法FIFO算法.docx_第2页
第2页 / 共10页
页面置换算法FIFO算法.docx_第3页
第3页 / 共10页
页面置换算法FIFO算法.docx_第4页
第4页 / 共10页
页面置换算法FIFO算法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

页面置换算法FIFO算法.docx

《页面置换算法FIFO算法.docx》由会员分享,可在线阅读,更多相关《页面置换算法FIFO算法.docx(10页珍藏版)》请在冰豆网上搜索。

页面置换算法FIFO算法.docx

页面置换算法FIFO算法

网络教育学院

《操作系统》课程设计

题  目:

 页面置换算法FIFO算法                

学习中心:

   

  

层  次:

          

专  业:

           

年  级:

  年 春/秋季 

学  号:

           

学  生:

   井杰     

辅导教师:

   龙珠      

完成日期:

 2016年1 月 28日

页面置换算法FIFO算法  

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。

当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。

而用来选择淘汰哪一页的规则叫做页面置换算法。

在请求分页存储器管理系统中,我们需要一个页面置换算法,而先进先出算法就是最早出现的一种算法,利用该算法可以实现页面的置换,实现内存的充分利用,使进程可以执行。

先进先出置换算法(FIFO)

最简单的页面置换算法是先入先出(FIFO)法。

这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。

理由是:

最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。

建立一个FIFO队列,收容所有在内存中的页。

被置换页面总是在队列头上进行。

当一个页面被放入内存时,就把它插在队尾上。

这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。

因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。

FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。

当然,导致这种异常现象的页面走向实际上是很少见的。

优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。

该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。

但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。

1.先进先出(FIFO)

该算法实现简单,只需把一个进程已调入内存的页面,按先后顺序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。

1、输入当前要调用的页面号

2、判断该页面是否已在队列内,若在队列内,不执行任何操作

若不在队列内。

则执行以下操作判断队列是否已满,若队列未满,直接把该页面号存入队列 若队列已满,删除并返回队头元素,然后把该页面号存入队

3、输出置换次数,依次输出置换出的页面。

2.先进先出算法思路

在请求分页存储器管理系统设计中,先进先出(FIFO)算法是一种给出页面访问的顺序与分配给作业的主存块数,使用队列作为数据结构编写算法,实现统计缺页次数与页面置换操作,该算法总是先淘汰最先进入内存的页面,即选择在内存中停留时间最久的页面予以淘汰。

3.先进先出算法步骤

1.设置一些页面参数,

intpagenum=0内存页面数

inttotal=0要访问的页面总数

intlacknumber缺页的总数

2.设置一个队列

intseque[20]={0};队列长度设置为20,且初值设为0

3.执行算法

输入1,2,3,4,1,2,5,1,2,3,4,5

以输入-1结束

4.算法数据结构

Array[0][20]

Voidmain()系统主函数

cin>>pagenum键盘输入页号

存储页面号序列page[]

存储装入物理块中的页面memery[]

访问函数void Visit(int)

voidFIFO(void);

打印函数print()

核心函数FIFO()

5.主要函数代码

#include

intchoose;   //选择置换方法

intPageOrder[100]; //页面走向

intOrder=0; //页面计数

intMaxPage;//页面总数

intMaxPhy; //物理块总数

intcount; //命中次数structPageTable //页表结构体

{

intPageNomber;

intPhyNomber;

intSta; //状态位

intVisit; //访问位

intChange; //改变位

};structPageTablep[10];//最多同时进入10个页表voidmain()

{

voidInit();

voidFifo();

voidLru();

Init();

cout<<"请选择置换方法"<

cin>>choose;

if(choose==1)

{

cout<<"物理块变化过程:

"<

Fifo();

cout<

cout<<"命中次数:

"<

else

Lru();

}voidInit()

{

cout<<"请输入页表长度";

cin>>MaxPage;

for(inti=1;i<=MaxPage;i++)

{

p[i].PageNomber=i;

p[i].PhyNomber=0;

p[i].Change=0;

p[i].Sta=0;

p[i].Visit=0;

}

cout<

cin>>MaxPhy;

cout<<"请输入页面走向以0结束"<

intj=0;

PageOrder[0]=1;

while(PageOrder[j]!

=0)

{

j++;

Order++;

cin>>PageOrder[j];

if(j>99)

{

cout<<"超过最大数量,请重新输入,以0结束!

";

continue;

}

}

}voidFifo()

{

intMax(structPageTableM[]);

structPageTablei[10];//模拟物理块

for(intj=0;j

{

i[j].PageNomber=0;

i[j].Visit=0;

}

intb=0;//标志位,标记物理块已满

for(intk=1;k

{

if(b==1)//物理块满,进行页面置换

{

inta=0;//标志位,是否命中

for(intm=0;m

{

if(i[m].PageNomber==PageOrder[k])

{

a=1;

count++;

cout<<"命中"<<"";

break;

}

}

if(a==1)continue;//命中继续循环

intMa=Max(i);//未命中,选择时间最长的物理块进行置换

cout<<"替换"<

i[Ma]=p[PageOrder[k]];

for(intl=0;l

i[l].Visit++;

continue;

}

for(j=0;j

{

if(i[j].PageNomber==0)

{

i[j]=p[PageOrder[k]];

cout<<"进入"<<"";

for(intl=0;l<=j;l++)

i[l].Visit++;

if(j==MaxPhy-1)

b=b+1;

break;

}

}voidLru()

{}intMax(structPageTableM[])//返回最大值

{

inttemp,Max=0;

temp=M[0].Visit;

for(intj=1;j

{

if(temp

{

temp=M[j].Visit;

Max=j;

}

}

return(Max);

}5

5.测试案例

比如设置物理块个数为3,页面序号7 0 1 2 3 0 4 2 3,代码应列出算法置换的具体细节。

时刻

1

2

3

4

5

6

7

8

9

访问顺序

7

0

1

2

3

0

4

2

3

M=3

7

7

7

2

2

2

4

4

4

 

0

0

0

3

3

3

2

2

 

 

1

1

1

0

0

0

3

F

1

2

3

4

5

 

6

7

8

 

 

 

 

 

 

 

 

 

 

接下来我就讲下FIFO这种情况,FIFO就是先进先出的访问方式,根据题目里面的访问顺序:

6012030423,所有首先访问的是7,当第一次访问6的时候,内存中当然是没有的,所以就会发生中断去读取数据,完成中断之后,内存中就有了一个6,接着访问的是0,当然此时内存中也没有0,所以又会发生一次中断,同理,完成中断之后,内存中就有0了,接下来访问的就是第三个数1,很明显,此时内存中也是没有该元素的,所以也会发生中断,完成中断后内存里面就有一个1了。

此时内存中的数据为701。

接下来就要注意思想的转化了,因为题目中说了只有3块存储空间,到目前为止,3块空间都用完了。

所以,在访问第4个数字时(也就是访问2的时候),必须先丢弃一个数据,根据题目要求是FIFO的原理,所以,理所当然就应该丢弃最先访问的7,并去访问新的数据--2,即2替换7的位置,所以也会发生中断,并且中断完成后内存中的数据是201。

接下来又要访问第五个数字,即访问第二个0的时候,此时,内存的数据为201,其中刚好有一个0,所有就不会发生中断,而是继续访问下一个数,即第六个数--4。

此时内存中没有4这个数字,并且空间也全部占满了的,所有又必须丢弃一个数字,当然由于是FIFO,所有肯定会丢弃2,并再发生一次中断去读取4,当中断完成后,内存中的数据为430。

类似推断最后内存的数据为423。

6.算法流程图

由结果可以看出,使用FIFO算法,总是淘汰最先进入内存的页面,即即选择在内存中驻留时间最久的页面予以淘汰。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1