操作系统页面调度算法.docx

上传人:b****6 文档编号:4505780 上传时间:2022-12-01 格式:DOCX 页数:11 大小:66.29KB
下载 相关 举报
操作系统页面调度算法.docx_第1页
第1页 / 共11页
操作系统页面调度算法.docx_第2页
第2页 / 共11页
操作系统页面调度算法.docx_第3页
第3页 / 共11页
操作系统页面调度算法.docx_第4页
第4页 / 共11页
操作系统页面调度算法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

操作系统页面调度算法.docx

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

操作系统页面调度算法.docx

操作系统页面调度算法

实验报告参考格式

(实验一)

实验项目名称:

操作系统页面调度算法教师评分:

一、实验目的和要求

目的:

对操作系统中使用的页面调度算法进行设计。

要求:

对教材中所讲述的几种页面调度算法进行深入的分析,通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

二、实验环境

1、PC兼容机

2、Windows2000/XP系统

三、实验内容

1、设计两个程序模拟实现一个作业在内存中执行的页面置换,并计算缺页中断次数。

3、编制两种页面置换算法:

1)FIFO页面置换算法;2)LRU页面置换算法

四、实验原理:

1、FIFO页面置换算法:

总是选择在内存中驻留时间最长的一页将其淘汰。

2、LRU页面置换算法:

选择最近一段时间内最长时间没有被访问过的页面予以淘汰。

五、实验操作过程及实验结果记录

1、FIFO页面置换算法:

此算法的思想是按照作业到来的顺序进行处理,以下是源代码,代码已经调试,可上机运行。

 

#include

#defineM4/*m为系统分配给作业的主存中的页面数*/

#defineN9

intcount=0;

intm=0;

intBef_ArrFull(inta[M],intb[N],intc[N])//a中未满之前的处理

{

intk;

printf("发生缺页的面号分别为:

");

printf("%d",b[0]);

for(intn=0;n

a[0]=b[0];

count++;

intj,ii=0;

for(j=1;j

{intf=0;

for(k=0;k<=ii;k++)

{

if(b[j]==a[k]){f=1;break;}//包含在中间找到,在末尾找到

}

if(!

f)//未找到值发生中断

{

printf("%d",b[j]);//打印缺页的页号

count++;

a[++ii]=b[j];

}

if(ii==3)break;//内存中的页面数已满

}

returnj;

}

voidAfter_ArrFull(inta[M],intb[N],intc[N],intj)//a中页面数满了之后的处理

{

inti,flag;

intk;

for(i=j+1;i

{

flag=0;

for(k=0;k

if(a[k]==b[i])

flag=1;

if(flag==0)

{

c[m]=a[0];

m++;

for(k=0;k

a[M-1]=b[i];

count++;

printf("%3d,",b[i]);

}

}

}

 

voidmain()

{

inta[M];/*定义内存页面数*/

intb[N];/*定义总页面数*/

intc[N];/*定义被淘汰的页面号*/

inti;

intn;

printf("请输入作业序号:

\n");

for(i=0;i

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

n=Bef_ArrFull(a,b,c);

After_ArrFull(a,b,c,n);//a中页面数满了之后的处理

printf("\n发生缺页的次数=%d\n",count);

printf("\n缺页中断率=%.2f%%%\n",(float)count/N*100);

printf("\n驻留内存的页号分别为:

");

for(i=0;i

printf("%3d,",a[i]);

printf("\n被淘汰的页号分别为:

");

for(i=0;i

printf("%3d,",c[i]);

}

测试:

请输入作业序号(9个作业):

222345678

发生缺页的面号分别为:

23456,7,8,

发生缺页的次数=7

缺页中断率=77.78%

驻留内存的页号分别为:

5,6,7,8,

被淘汰的页号分别为:

2,3,4,Pressanykeytocontinue

 

测试:

请输入作业序号(9个作业):

343456789

发生缺页的面号分别为:

34567,8,9,

发生缺页的次数=7

缺页中断率=77.78%

驻留内存的页号分别为:

6,7,8,9,

被淘汰的页号分别为:

3,4,5,Pressanykeytocontinue

 

 

2、LRU算法:

此算法的思想是为每一个页面分配一个使用频度falg,用以表明该页号的使用频度,在发生缺页中断时,利用循环来遍历数组a的每个页面的使用频度,找到最小的频度所对应的页面号,并把他的下标值和标号分别存入结构体min的Ye_Hao和falg中。

以下是详细的实现过程,代码已经调试,可直接运行。

#include

#defineM4/*m为在主存中的页面数*/

#defineN9

structye

{

intYe_Hao;

intfalg;//ID,标识使用的频度

};

intcount=0;

structyemin;//内存中使用频度最低的页面

 

//内存页面数未满之前

intBfor_ArryFull(structyeb[N],structyea[M],intc[N])

{

inti;

printf("请输入作业序号(9个页面并用空格隔开):

\n");

for(i=0;i

printf("发生缺页的面号分别为:

\n");

a[0].Ye_Hao=b[0].Ye_Hao;

a[0].falg=0;

b[0].falg=0;

printf("%d",b[0].Ye_Hao);

intii=0;

intk,j;

count++;

for(j=1;j

{intflag=0;

for(k=0;k<=ii;k++)

{

if(b[j].Ye_Hao==a[k].Ye_Hao){flag=1;break;}//包含在中间找到,在末尾找到

}

if(!

flag)//未找到值发生中断

{

printf("%d",b[j].Ye_Hao);//打印缺页的页号

count++;

a[++ii].Ye_Hao=b[j].Ye_Hao;

a[ii].falg=count;

b[j].falg=count;

}

if(ii==3)break;//内存中的页面数已满

}

returnj;//j表示内存页面数满之后,下一个是第几个进入内存

}

 

//内存页面数已满之后

voidAfter_ArryFull(structyeb[N],structyea[M],intj,intc[N])

{

inti;

inttemp=0;

for(intp=j+1;p

{

for(i=0;i

{

if(b[p].Ye_Hao==a[i].Ye_Hao)

{

a[i].falg=b[p-1].falg+1;

b[p].falg=a[i].falg;

break;

}

}

if(i==4)//内存中不存在,发生缺页中断

{

printf("%d",b[p].Ye_Hao);

min.falg=a[0].falg;

min.Ye_Hao=0;//存储最近最久未使用的下标号

for(intn=1;n

{

if(a[n].falg

{

min.falg=a[n].falg;

min.Ye_Hao=n;

}

}

c[temp++]=a[min.Ye_Hao].Ye_Hao;

a[min.Ye_Hao].Ye_Hao=b[p].Ye_Hao;

a[min.Ye_Hao].falg=b[p-1].falg+1;

b[p].falg=a[min.Ye_Hao].falg;

count++;

}

}

}

 

voidmain()

{

structyea[M];//定义内存页面数

structyeb[N];//页面序列

intc[N];//定义被淘汰的页面号

intj,i;

j=Bfor_ArryFull(b,a,c);

//for(k=0;k

After_ArryFull(b,a,j,c);

printf("\n发生缺页的次数=%d\n",count);

printf("\n缺页中断率=%.2f%%%\n",(float)count/N*100);

printf("\n驻留内存的页号分别为:

");

for(i=0;i

printf("%d,",a[i].Ye_Hao);

printf("\n被淘汰的页号分别为:

");

for(i=0;i

printf("%3d,",c[i]);

}

测试:

①输入123234567↙

理论上分析可知在a满时,a数组中的元素应为1,2,3,4发生4次中断,在所有作业请求都进入时,驻留在a中的页面应为5,6,7,4,被淘汰的页面号应为1,2,3,图示可以证明这一点。

 

②输入2,3,2,3,4,5,3,6,7↙

理论分析可知发生的中断页号应为2,3,4,5,6,7,一共发生6次中断

驻留的内存页号分别为:

6,3,7,5。

被淘汰的页号为2,4.下面的实验结果证明了这点

 

 

六、实验结论(可写个人体会,或相关理论知识)

通过本次实验,我对页面置换的过程了解的更加清楚。

最近最久未使用算法的详细实现过程更清晰

六、实验过程中所遇问题思考与讨论(根据个人具体情况选做)

(以后的实验报告可参考本模板)

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

当前位置:首页 > 经管营销 > 销售营销

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

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