操作系统页面调度算法Word文件下载.docx

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

操作系统页面调度算法Word文件下载.docx

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

操作系统页面调度算法Word文件下载.docx

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

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

 

#include<

stdio.h>

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

#defineN9

intcount=0;

intm=0;

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

{

intk;

printf("

发生缺页的面号分别为:

"

);

%d"

b[0]);

for(intn=0;

n<

M;

n++)a[n]=0;

//初始化

a[0]=b[0];

count++;

intj,ii=0;

for(j=1;

j<

N;

j++)

{intf=0;

for(k=0;

k<

=ii;

k++)

{

if(b[j]==a[k]){f=1;

break;

}//包含在中间找到,在末尾找到

}

if(!

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

{

printf("

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<

i++)

flag=0;

for(k=0;

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

flag=1;

if(flag==0)

c[m]=a[0];

m++;

for(k=0;

M-1;

k++)a[k]=a[k+1];

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

count++;

printf("

%3d,"

b[i]);

}

voidmain()

inta[M];

/*定义内存页面数*/

intb[N];

/*定义总页面数*/

intc[N];

/*定义被淘汰的页面号*/

inti;

intn;

请输入作业序号:

\n"

for(i=0;

i++)/*输入作业依次要访问的页号*/

scanf("

%d"

&

b[i]);

n=Bef_ArrFull(a,b,c);

After_ArrFull(a,b,c,n);

//a中页面数满了之后的处理

\n发生缺页的次数=%d\n"

count);

\n缺页中断率=%.2f%%%\n"

(float)count/N*100);

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

a[i]);

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

m;

c[i]);

测试:

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

222345678

23456,7,8,

发生缺页的次数=7

缺页中断率=77.78%

驻留内存的页号分别为:

5,6,7,8,

被淘汰的页号分别为:

2,3,4,Pressanykeytocontinue

343456789

34567,8,9,

6,7,8,9,

3,4,5,Pressanykeytocontinue

2、LRU算法:

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

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

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

structye

intYe_Hao;

intfalg;

//ID,标识使用的频度

};

structyemin;

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

//内存页面数未满之前

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

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

i++)scanf("

b[i].Ye_Hao);

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

a[0].falg=0;

b[0].falg=0;

b[0].Ye_Hao);

intii=0;

intk,j;

{intflag=0;

if(b[j].Ye_Hao==a[k].Ye_Hao){flag=1;

}//包含在中间找到,在末尾找到

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

b[j].Ye_Hao);

//打印缺页的页号

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

a[ii].falg=count;

b[j].falg=count;

//内存中的页面数已满

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

//内存页面数已满之后

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

inttemp=0;

for(intp=j+1;

p<

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)//内存中不存在,发生缺页中断

b[p].Ye_Hao);

min.falg=a[0].falg;

min.Ye_Hao=0;

//存储最近最久未使用的下标号

for(intn=1;

n++)//找到最不经常使用

if(a[n].falg<

min.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;

}

structyea[M];

//定义内存页面数

structyeb[N];

//页面序列

//定义被淘汰的页面号

intj,i;

j=Bfor_ArryFull(b,a,c);

//for(k=0;

k++)printf("

a[k].Ye_Hao);

After_ArryFull(b,a,j,c);

%d,"

a[i].Ye_Hao);

count-M;

}

测试:

①输入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.下面的实验结果证明了这点

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

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

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

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

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

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

当前位置:首页 > PPT模板 > 节日庆典

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

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