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