1、实验二 模拟比较页面置换页算法及缺页率 班级: 信息092 学号: 200912030204 姓名: 郭梦瑶 实验日期: 6月6日 一、实验目的和学时 1. 实验目的 (1)掌握先进先出页面置换算法; (2)掌握最近最久未使用页面置换算法; (3)掌握改进的CLOCK页面置换算法,了解其他页面置换算法; (4)熟悉C/C++或其他语言编程。 2、实验学时:6学时 二、实验内容 编写程序,设置不同的页面数,使用不同的页面替换策略算法进行模拟页面替换。先进先出,最近最久未使用页面置换算法等,并计算缺页率。 三、实验环境 1.PC微机 2.Window
2、s 操作系统
3.C/C++或其他语言开发环境
四、实验算法程序及结果
1. 程序运行输出的部分界面如下
2. C语言程序源代码
#include
3、pt[33],lru[33]; struct s2 { int time;}; void address(); float FIFO(int ram);/*先进先出*/ float LRU(int ram);/*最近最久未使用页面置换*/ float OPT(int ram);/*理想型*/ int main() { int i,p[256];/*页号*/ address(); for (k=1; k<=8;) /*页面大小: 1k,2k,4k,8K*/ { printf("the size of a page is %d
4、k\n ",k); printf("the page num is ...\n"); for (i=0; i<256; i++) {p[i]=add[i]/(k*1024); printf("%d ",p[i]); }j=0; for (i=0; i<256; i++) { while (p[i]==p[i+1])i++; page[j]=p[i]; j++;}
5、 printf("\nafter connect the same
pages the page num is:\n");
for (i=0; i 6、f("FIFO=%0.2f%% ",FIFO(ram));
printf("LRU =%0.2f%% ",LRU(ram));
printf("OPT =%0.2f%% ",OPT(ram));
}
k=k*2;
getchar();
}
return 0;
}
void address()
{ int i,x;
add[0]=1000;
srand((int)time(0));
for (i=1; i<=255; i++)
{ x=rand()%1024;
if 7、 ((x>=0)&&(x<512))
add[i]=add[i-1]+1;
if ((x>=512)&&(x<768))
add[i]=rand()%(add[i-1]-1)+1;
if ((x>=768)&&(x<1024))
add[i]=add[i-1]+rand()%(30*1024-add[i-1]-1)+1;
}}
float FIFO(int ram)
{ int absent=0,t=0,i,z,l,yn;
for (i=0; i 8、i].free=1;
fifo[i].tag=0;}
i=0;
while (i 9、ent page*/
l=0;
while ((l 10、
{ t=0;
for (l=0; l 11、i,l,z,now=0;
struct s2 P[250];
for (i=0;i 12、 P[lru[z].page].time=now;
yn=1;
}
if (yn!=1)
{ absent+=1; now+=1;
l=0;
while ((l<=ram)&&(lru[l].free==0))
l++;
if ((l<=ram)&&(lru[l].free==1))
{ lru[l].page=page[i];
P[lru[l].page].time=now;
lru[l].free=0;
}
els 13、e /*there is no ram*/
{ t=0;
for (l=0; l 14、t=0,i,l1,k,l;
for(i=0;i 15、am)&&(opt[l].free==0))l++;
if((l<=ram)&&(opt[l].free==1))
{
opt[l].page=page[i];
opt[l].free=0;
opt[l].tag-=1;
for(l=0;l






