计算机操作系统实验模拟比较页面置换页算法及缺页率()
成绩
计算机操作系统实验
模拟比较页面置换页算法及缺页率
学 号200510020220姓 名乔 峰班 级信息052
实验名称: 模拟比较页面置换页算法及缺页率
实验目的: (1)掌握先进先出页面置换算法;
(2)掌握最近未用页面置换算法;
(3)了解最近最久未使用页面置换算法以及其他页面置换算法;
(4)熟悉C/C++编程。
实验学时: 6学时
实验内容: 编写程序,设置不同的页面数,使用不同的页面替换策略算法进行模拟页面替换。先进先出,最近未用页面置换算法等,并计算缺页率。
实验环境:
(1).PC微机
(2).Windows 操作系统
(3).C/C++开发环境
实验原理及算法参考程序段:
#include
#include
#include
#include
#include
int add[256]/*地址*/,page[256]/*页面*/;
int k,j,ram,t;
float rate;/*缺页率*/
struct s1
{ int page;
int free;
int tag;
} fifo[33],opt[33],lru[33];
struct s2
{ int time;
};
void address();
float FIFO(int ram);/*先进先出*/
float LRU(int ram);/*最近最久未使用页面置换*/
void address() /*产生指令地址*/
{ int i;
add[0]=1000;
for (i=1; i<=255; i++)
{ int x=random(1024);
if ((x>=0)&&(x<512))
add[i]=add[i-1]+1;
if ((x>=512)&&(x<768))
add[i]=random(add[i-1]-1)+1;
if ((x>=768)&&(x<1024))
add[i]=add[i-1]+random(30*1024-add[i-1]-1)+1;
}
}
float FIFO(int ram)
{ int absent=0,t=0,i,z,l,yn;
for (i=0; i
{ fifo[i].page=-1;
fifo[i].free=1;
fifo[i].tag=0;
}
i=0;
while (i
{ yn=0;
for (z=0; z
if (fifo[z].page==page[i])
{yn=1;
for (z=0; z
if (fifo[z].free==0)
fifo[z].tag+=1;
}
if (yn!=1)
{ absent+=1; /*count the absent page*/
l=0;
while ((l
l++;
if ((l
{ fifo[l].page=page[i];
fifo[l].free=0;
for (l=0; l
if (fifo[l].free==0 )
fifo[l].tag+=1;
}
else /*there is no free ram*/
{ t=0;
for (l=0; l
if ( fifo[l].tag
t=l;
fifo[t].page=page[i];
fifo[t].free=0;
fifo[t].tag=1;
l=0;
}
}
i++;
}
rate=(float)absent/j*100;
return rate;
}
float LRU(int ram)
{ int absent=0,yn,t,i,l,z,now=0;