操作系统实验5 页面置换算法.docx

上传人:b****5 文档编号:8636546 上传时间:2023-02-01 格式:DOCX 页数:9 大小:128.39KB
下载 相关 举报
操作系统实验5 页面置换算法.docx_第1页
第1页 / 共9页
操作系统实验5 页面置换算法.docx_第2页
第2页 / 共9页
操作系统实验5 页面置换算法.docx_第3页
第3页 / 共9页
操作系统实验5 页面置换算法.docx_第4页
第4页 / 共9页
操作系统实验5 页面置换算法.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

操作系统实验5 页面置换算法.docx

《操作系统实验5 页面置换算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验5 页面置换算法.docx(9页珍藏版)》请在冰豆网上搜索。

操作系统实验5 页面置换算法.docx

操作系统实验5页面置换算法

 

操作系统实验报告

 

计算机0703班

200729

 

实验5页面置换算法

1、实验题目:

页面置换算法(请求分页)

2、实验目的:

进一步理解父子进程之间的关系。

1)理解内存页面调度的机理。

2)掌握页面置换算法的实现方法。

3)通过实验比较不同调度算法的优劣。

4)培养综合运用所学知识的能力。

页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。

将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。

3、实验内容及要求

这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序。

程序涉及一个父进程和两个子进程。

父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series[]中,作为内存页面访问的序列。

两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存页面进行调度。

要求:

1)每个子进程应能反映出页面置换的过程,并统计页面置换算法的命中或缺页情况。

设缺页的次数为diseffect。

总的页面访问次数为total_instruction。

缺页率=disaffect/total_instruction

命中率=1-disaffect/total_instruction

2)将为进程分配的内存页面数mframe作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。

四、程序流程图

5、程序源代码、文档注释及文字说明

#include

#include

#include

#include

#include

#include

#include

#include

main()

{

intp1,p2;inti,j,k,t,m,kk,r1,r2;inttemp1,temp2,temp3;

intdiseffect1=0;intdiseffect2=0;

intk1=0;intk2=0;intf1=0;intf2=0;floatf;

intAccess_series[8];

structone_frame{

intpage_no;

charflag;

};

intmframe=5;

structone_frameM_Frame[5];

for(i=0;i

printf("yemian:

");

for(i=0;i<8;i++)//产生随机数

{Access_series[i]=rand()%8+1;

printf("%d",Access_series[i]);}printf("\n");}

while((p1=fork())==-1);

if(p1==0)

{

for(j=0;j<8;j++)

{r1=Access_series[j];//读入一个逻辑页面

for(k=0;k

{if(r1!

=M_Frame[k].page_no)continue;

else

{printf("havefound!

\n");for(i=0;i

printf("%d",M_Frame[i]);printf("\n");f1=1;break;}}

if(f1==0)

{diseffect1++;//若不存在,发生缺页,则失效率加1

if(k1

{

M_Frame[k1].page_no=r1;//分配一个空的物理页面

M_Frame[k1].flag='Y';

k1++;

for(i=0;i<8;i++)printf("%d",Access_series[i]);printf("\n");

printf("diseffect!

");printf("%d\n",diseffect1);

for(i=0;i

printf("%d",M_Frame[i]);printf("\n");

}

else

{temp1=M_Frame[0].page_no;//物理页面表已满

for(i=1;i<5;i++)

M_Frame[i-1]=M_Frame[i];M_Frame[4].page_no=r1;//淘汰最早进入的M_Frame[0]

//并将所读的逻辑页面调入

for(i=0;i<8;i++)printf("%d",Access_series[i]);printf("\n");

printf("diseffect!

%d\n",diseffect1);

printf("lose%d\n",temp1);

for(i=0;i

printf("%d",M_Frame[i]);printf("\n");

}

}

f1=0;

}

f=diseffect1/8.0;//统计缺页率

printf("diseffectrateofFIFO%f\n",f);

exit(0);

}

wait(0);

for(i=0;i

while((p2=fork())==-1);//创建子进程2

if(p2==0)

{

for(m=0;m<8;m++)

{

r2=Access_series[m];//读入逻辑页

for(kk=0;kk

{

if(r2!

=M_Frame[kk].page_no)//首先在物理页面中查找

continue;

else{

printf("havefound!

\n");//找到

for(t=kk+1;t

M_Frame[t-1].page_no=M_Frame[t].page_no;

M_Frame[t-1].page_no=r2;

for(i=0;i

printf("%d",M_Frame[i].page_no);printf("\n");

f2=1;

break;}

}

if(f2==0)//没有找到,发生缺页

{

diseffect2++;//缺页率加1

if(k2

{

M_Frame[k2].page_no=r2;//选择空页面分配

M_Frame[k2].flag='Y';k2++;

for(i=0;i<8;i++)printf("%d",Access_series[i]);printf("\n");

printf("diseffect!

%d\n",diseffect2);

for(i=0;i

printf("%d",M_Frame[i]);printf("\n");

}

else{//淘汰最近最久未访问的M_Frame[0]

temp3=M_Frame[0].page_no;

for(i=1;i

M_Frame[i-1].page_no=M_Frame[i].page_no;

M_Frame[mframe-1].page_no=r2;//将当前页调入

for(i=0;i<8;i++)printf("%d",Access_series[i]);printf("\n");

printf("diseffect%d\n",diseffect2);;

printf("lose%d\n",temp3);

for(i=0;i

printf("%d",M_Frame[i]);printf("\n");

}

}

f2=0;

}

f=diseffect2/8.0;//统计失效率

printf("diseffectrateofLRU%f\n",f);exit(0);

}

}

6、运行结果及其说明

FIFO:

8,7,2,4缺页调入,2,8命中,3缺页调入,5缺页淘汰8,调入5;

LRU:

8,7,2,4缺页调入,访问2,把2移到数组尾,访问8,把8移到数组尾,3缺页调入,5缺页,淘汰7,调入5。

七、回答以下问题:

父进程、子进程之间的并发执行的过程

通过完成实验,根据你的体会,阐述虚拟存储器的原理。

写出FIFO算法中出现Belady现象的内存页面访问序列。

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

当前位置:首页 > PPT模板 > 中国风

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

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