先进先出FIFO页面置换算法2Word文件下载.docx
《先进先出FIFO页面置换算法2Word文件下载.docx》由会员分享,可在线阅读,更多相关《先进先出FIFO页面置换算法2Word文件下载.docx(8页珍藏版)》请在冰点文库上搜索。
![先进先出FIFO页面置换算法2Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/2/d0657f1b-5bd3-42ca-8a15-1f276baca636/d0657f1b-5bd3-42ca-8a15-1f276baca6361.gif)
成绩评定:
页面置换算法中的先进先出算法
一实验目的
了解最佳页面置换算法与先进先出FIFO页面置换算法,并掌握其基本原理
二实验目标
用C++模拟最佳页面置换算法与先进先出FIFO页面置换算法
三实验步骤
第一步,输入系统为进程分配的物理块数(m<
=10)
第二步,输入总页面数(n<
=30)
第三步,输入页面号引用串
第四步,系统自动给出演示数据
第五步,分析数据
第六步,重复一到五步骤四技术难点及解决方案技术难点:
如何找到最久页面解决方案:
建立一个时间数组,做标记
五关键数据和算法流程
代码如下:
#include"
iostream"
iomanip"
//使用setw()时用到的头文件
stdio.h"
stdlib.h"
conio.h"
//使用getchar()时用到的头文件
usingnamespacestd;
#defineMax30//某进程调入内存中的最大页面数
#defineSize10//系统为某进程分配的最大物理块数
voidInit(intBlock[],intm)//初始化物理块
{inti;
for(i=0;
i<
m;
i++)
{
Block[i]=-1;
}
}
voidcreat(intPage[],intn)//输入页面串引用号
n;
cin>
>
Page[i];
voidFIFO(intPage[],intBlock[],intn,intm)
{//max_stay:
比较当前内存中页面驻留的最久时间,count:
统计页面置换次数
//get:
某物理块是否等待驻入新页面(-1:
否)
//flag:
标记当前序号页面是否已驻入内存(-1:
//block_num:
驻留内存时间最长的页面所在的物理块序号
//time[]标记对应序号的物理块中页面驻留时间
inti,j,max_stay=0,count=0;
intget=-1,flag=-1,block_num=-1;
inttime[Size];
i++)//初始化time[]
{time[i]=0;
{for(j=0;
j<
j++)//有空闲物理块时,页面直接驻入内存空闲块
{if(Block[j]==-1)
{
get=j;
//物理块j即将(/等待)驻入新页面
break;
}
}
for(j=0;
j++)//查找序号相同的页面
{if(Block[j]==Page[i])//物理块j中页面与当前期望调入内存的页面相同
flag=j;
j++)//找到驻留内存时间最久的页面置换出
{
if(time[j]>
max_stay)
max_stay=time[j];
block_num=j;
//block_num标记当前序号物理块中页面驻留时间最久
if(flag==-1)//不存在相同页面
{if(get!
=-1)//物理块即将(/等待)驻入新页面
Block[get]=Page[i];
//存入页面
time[get]=0;
//当前物理块重新计时
for(j=0;
=get;
j++)//已驻入页面的驻留时间加1
{
time[j]++;
}
get=-1;
else//页面调度置换,序号block_num的物理块是驻留时间最久的
Block[block_num]=Page[i];
time[block_num]=0;
Size;
j++)
block_num=-1;
max_stay=0;
count++;
else//待调入页面与序号flag的物理块中页面相同
for(j=0;
time[j]++;
flag=-1;
j++)//输出物理块中的页面驻入情况
cout<
<
setw(3)<
Block[j];
cout<
endl;
if(n>
m)
count=count+m;
cout<
"
缺页中断次数为:
count<
voidmain()
{intn,m,Page[Max],Block[Size];
*******先进先出FIFO页面置换算法*******"
--------------------------------------"
*******(默认:
-1表示物理块空闲)*******"
endl<
请输入系统为进程分配的物理块数(m<
=10):
;
while
(1)
{cin>
if(m>
Size||m<
1)
警告:
输入的数据错误!
请重新输入物理块数:
elsebreak;
Init(Block,m);
请输入总页面数(n<
=30):
cin>
\n请输入页面号引用串:
creat(Page,n);
FIFO算法过程如下:
FIFO(Page,Block,n,m);
getchar();
//直接执行exe文件时做停留查看结果之用