操作系统第7次实验页面置换.docx

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

操作系统第7次实验页面置换.docx

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

操作系统第7次实验页面置换.docx

操作系统第7次实验页面置换

操作系统课程实验报告

姓名

高梁

学号

1501010024

15计算机1班

任课教师

贺辉

指导教师

贺辉

评阅教师

贺辉

实验地点

木铎楼C302

实验时间

2017/6/4

实验编号与实验名称:

第7次常用页面置换算法模拟实验

实验目的:

通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。

实验内容及要求(详见实验讲义):

1.实验要求:

1)要求用你熟悉的程序设计语言编写和调试一个页面置换模拟程序;要求在主函数中测试。

2)实验报告中必须包括:

设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。

3)必须模拟本实验内容中提到的算法中的至少2种页面置换算法。

4)比较不同页面置换算法的效率

2.实验内容

编写一个程序,使用以下页面置换算法中的某2种分别模拟一个分页系统,并统计同一个页面访问序列情况下不同页面置换算法引发的缺页中断次数。

1、第二次机会算法(SecondChance)

2、最近最少使用算法(LeastRecentlyUsed,LRU)

3、最不常用算法(NotFrequentlyUsed,NFU)

4、最近未使用算法(NotRecentlyUsed,NRU)

5、时钟页面置换算法

6、老化算法(aging)

页框的数量固定为4,虚拟页面数为12。

实验输入为访问页面序列,比如0,1,3,2,7,1

实验用到的软件(:

)Dev-cpp

实验内容、关键步骤(流程图、代码等)及结果分析(70分)

一、算法思想

FIFO算法:

它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。

所以,这种算法的实质是:

当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。

 

LRU算法:

由于利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。

它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。

所以,这种算法的实质是:

当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。

 

二、数据定义

#defineMEMORY_SIZE4/*物理块数*/

#definePROESS_SIZE12/*页面号引用串个数*/

/*全局变量*/

intmSIZE=4;

intpSIZE=12;

staticintmemery[4]={0};/*物理块中的页号*/

staticintpage[12]={0};/*页面号引用串*/

staticinttemp[12][4]={0};/*辅助数组*/

三、处理流程

①FIFO

1.FIFO算法

2.原理简述

a)在分配内存页框数(AP)小于进程页面数(PP)时,当然是最先运行的AP个页面放入内存;

b)这时又需要处理新的页面,则将原来放的内存中的AP个页中最先进入的调出(FIFO),再将新页面放入;

c)以后如果再有新页面需要调入,则都按上述规则进行。

d)算法特点:

内存中的页面按照进入内存先后构成一个队列。

3.图表描述

假设某个进程在硬盘上被划分成5个页面(PP=5),以1、2、3、4、5分别表示,CPU调用它们的顺序(这应该取决于进程本身)为:

1、4、2、5、3、3、2、4、2、5,如果内存可以控制的页框数为3(AP=3),那么在使用FIFO算法时,这3个页框的内存使用情况应该如图1所示。

图1

不难看出,本例共换入页面8次,若用变量diseffect表示页面换入次数,则diseffect=8。

②LRU

2.LRU算法

●原理简述

(1)当内存分配页框数(AP)小于进程页面数(PP)时,把最先执行的AP个页面放入内存。

(2)当需调页面进入内存,而当前分配的内存页框全部不空闲时,选择将其中最长时间没有用到的那一页调出,以空出内存来放置新调入的页面(LRU)。

(3)算法特点:

每个页面都有属性来表示有多长时间未被CPU使用的信息。

●图表描述

这里采用的例子和前面的一样。

假设某个进程在硬盘上被划分成5个页面(PP=5),以1、2、3、4、5分别表示,CPU调用它们的顺序(这应该取决于进程本身)为:

1、4、2、5、3、3、2、4、2、5,而内存可以控制的页框数为3(AP=3),那么在使用LRU算法时,这三个页面的内存使用情况应该如图2所示。

不难看出,本例共换入页面7次,若用变量diseffect表示页面换入次数,则diseffect=7。

 

图2

流程图:

1FIFO

2LRU

四、测试

五、源代码

#include

#include

#include

#include

 

#defineMEMORY_SIZE4/*物理块数*/

#definePROESS_SIZE12/*页面号引用串个数*/

/*全局变量*/

intmSIZE=4;

intpSIZE=12;

staticintmemery[4]={0};/*物理块中的页号*/

staticintpage[12]={0};/*页面号引用串*/

staticinttemp[12][4]={0};/*辅助数组*/

 

//打印

voidprint(unsignedintt)

{

inti,j,k,l;

intflag;

for(k=0;k<=(pSIZE-1)/20;k++)

{

for(i=20*k;(i

{

if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))

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

else

printf("%d",page[i]);

}

for(j=0;j

{

for(i=20*k;(i

{

if(i>=j)

printf("|%d|",temp[i][j]);

else

printf("||");

}

for(i=mSIZE+20*k;(i

{

for(flag=0,l=0;l

if(temp[i][l]==temp[i-1][l])

flag++;

printf("|%d|",temp[i][j]);

}

/*每行显示20个*/

if(i%20==0)

continue;

printf("\n");

}

}

printf("----------------------------------------\n");

printf("缺页次数:

%d\t\t",t+mSIZE);

printf("缺页率:

%d/%d\n",t+mSIZE,pSIZE);

printf("置换次数:

%d\t\t",t);

printf("访问命中率:

%d%%\n",(pSIZE-(t+mSIZE))*100/pSIZE);

printf("----------------------------------------\n");

}

//最近最久未使用置换算法

voidLRU()

{

intmemery[10]={0};

intflag[10]={0};/*记录页面的访问时间*/

inti,j,k,m;

intmax=0;/*记录换出页*/

intcount=0;/*记录置换次数*/

/*前mSIZE个数直接放入*/

for(i=0;i

{

memery[i]=page[i];

flag[i]=i;

for(j=0;j

temp[i][j]=memery[j];

}

for(i=mSIZE;i

{

/*判断新页面号是否在物理块中*/

for(j=0,k=0;j

{

if(memery[j]!

=page[i])

k++;

else

flag[j]=i;/*刷新该页的访问时间*/

}

if(k==mSIZE)/*如果不在物理块中*/

{

count++;

/*计算换出页*/

max=flag[0]

0:

1;

for(m=2;m

if(flag[m]

max=m;

memery[max]=page[i];

flag[max]=i;/*记录该页的访问时间*/

for(j=0;j

temp[i][j]=memery[j];

}

else

{

for(j=0;j

temp[i][j]=memery[j];

}

}

print(count);

}

//先进先出页面置换算法

voidFIFO()

{

intmemery[10]={0};

inttime[10]={0};/*记录进入物理块的时间*/

inti,j,k,m;

intmax=0;/*记录换出页*/

intcount=0;/*记录置换次数*/

/*前mSIZE个数直接放入*/

for(i=0;i

{

memery[i]=page[i];

time[i]=i;

for(j=0;j

temp[i][j]=memery[j];

}

for(i=mSIZE;i

{

/*判断新页面号是否在物理块中*/

for(j=0,k=0;j

{

if(memery[j]!

=page[i])

k++;

}

if(k==mSIZE)/*如果不在物理块中*/

{

count++;

/*计算换出页*/

max=time[0]

0:

1;

for(m=2;m

if(time[m]

max=m;

memery[max]=page[i];

time[max]=i;/*记录该页进入物理块的时间*/

for(j=0;j

temp[i][j]=memery[j];

}

else

{

for(j=0;j

temp[i][j]=memery[j];

}

}

print(count);

}

/***********************main函数*********************************/

intmain()

{

printf("请输入要访问页面的序列,用空格隔开\n");

//test:

701203042303

for(inti=0;i

scanf("%1d",&page[i]);

charop;

while

(1)

{

printf("使用FIFO请按<0>\n使用LRU请按<1>\n请键入'E'或'e'退出\n");

op=getch();

switch(op)

{

case'0':

printf("----------------------------------------\n");

printf("FIFO:

\n");

printf("****************************************\n");

FIFO();

break;

case'1':

printf("----------------------------------------\n");

printf("LRU:

\n");

printf("****************************************\n");

LRU();

break;

case'E':

exit(0);

case'e':

exit(0);

default:

printf("Inputerror\n");

break;

}

}

return0;

}

实验过程中遇到的问题解决办法与实验体会(10分)【请注意:

此处必须如实填写,为空或不适均扣10分】

页面置换算法实验体会:

在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。

但应将哪个页面调出,须根据所选的算法来确定。

通常,把选择换出页面的算法称为页面置换算法。

一个好的页面置换算法,应具有较低的页面更换频率。

从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。

算法实现中遇到的问题:

刚开始选用的数据结构是队列,但是用数组更容易实现,所以换成了数组。

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

当前位置:首页 > 求职职场 > 简历

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

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