os实验三存储管理Word文件下载.docx

上传人:b****6 文档编号:20060637 上传时间:2023-01-16 格式:DOCX 页数:12 大小:41.74KB
下载 相关 举报
os实验三存储管理Word文件下载.docx_第1页
第1页 / 共12页
os实验三存储管理Word文件下载.docx_第2页
第2页 / 共12页
os实验三存储管理Word文件下载.docx_第3页
第3页 / 共12页
os实验三存储管理Word文件下载.docx_第4页
第4页 / 共12页
os实验三存储管理Word文件下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

os实验三存储管理Word文件下载.docx

《os实验三存储管理Word文件下载.docx》由会员分享,可在线阅读,更多相关《os实验三存储管理Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。

os实验三存储管理Word文件下载.docx

第0条—第9条指令为第0页(对应虚存地址为[0,9]);

第10条—第19条指令为第1页(对应虚存地址为[10,19]);

第310条—第319条指令为第31页(对应虚存地址为[310,319]);

按以上方式,用户指令可组成32页。

3.计算并输出下述各种算法在不同内存容量下的命中率。

A.FIFO先进先出的算法

B.LRR最近最少使用算法

C.OPT最佳淘汰算法(先淘汰最不常用的页地址)

D.LFR最少访问页面算法

E.NUR最近最不经常使用算法

3.实验环境

VC语言实现

4.实验提示

提示:

A.命中率=1-页面失效次数/页地址流长度

B.本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

C.关于随机数产生方法,采用VC系统提供函数RAND()和RANDOMIZE()来产生。

5.实验运行结果

试验输出如下(输出包括了用户内存从3K到32K的各种不同情况)

代码:

#include<

stdio.h>

stdlib.h>

time.h>

ints,i;

//s表示产生的随机数,i表示物理块数

intm,n,h;

//循环专用

intk,g,f;

//临时数据

intsum;

//缺页次数

floatr;

//rate命中率

intp[320];

//page页数

inta[320];

//执行的指令

intpb[32];

//physicalblock用户内存容量(物理块)

voidinitialization();

voidFIFO();

voidLRU();

voidLFU();

voidline();

voidstart();

voidend();

voidmain()

{

start();

srand((int)time(NULL));

//以计算机当前时间作为随机数种子

for(n=0;

n<

320;

n+=3)

{

s=rand()%320+0;

//随机产生一条指令

a[n]=s+1;

//顺序执行一条指令

s=rand()%(a[n]+1);

//执行前地址指令M`

a[n+1]=s+1;

s=rand()%(319-a[n+1])+(a[n+1]+1);

a[n+2]=s;

}

n++)

p[n]=a[n]/10;

//得到指令相对的页数

printf("

物理块数\tFIFO\t\tLRU\t\tLFU\n"

);

line();

for(i=4;

i<

=32;

i++)

printf("

\n%2d:

"

i);

FIFO();

LRU();

LFU();

end();

}

voidinitialization()//用户内存及相关数据初始化

32;

pb[n]=-1;

sum=0;

r=0;

k=0;

g=-1;

f=-1;

voidFIFO()//先进先出置换算法

inttime[32];

//定义进入内存时间长度数组

intmax;

//max表示进入内存时间最久的,即最先进去的

initialization();

for(m=0;

m<

i;

m++)

time[m]=m+1;

k=0;

for(m=0;

if(pb[m]==p[n])//表示内存中已有当前要调入的页面

{

g=m;

break;

}

if(pb[m]==-1)//用户内存中存在空的物理块

f=m;

if(g!

=-1)

g=-1;

else

{

if(f==-1)//找到最先进入内存的页面

max=time[0];

for(m=0;

if(time[m]>

max)

{

max=time[m];

k=m;

}

pb[k]=p[n];

time[k]=0;

//该物理块中页面停留时间置零

sum++;

//缺页数+1

else

pb[f]=p[n];

time[f]=0;

f=-1;

}

i&

&

pb[m]!

=-1;

time[m]++;

//物理块中现有页面停留时间+1

r=1-(float)sum/320;

\t\t%6.4f"

r);

voidLRU()//最近最少使用算法

for(m=0;

if(pb[m]==p[n])

if(pb[m]==-1)

time[g]=0;

if(f==-1)

for(m=0;

if(time[m]>

pb[k]=p[n];

time[k]=0;

sum++;

voidLFU()//最少访问页面算法

inttime_lru[32],time[32],min,max_lru,t;

time[m]=0;

time_lru[m]=m+1;

t=1;

time_lru[g]=0;

if(n<

=20)//将最少使用的间隔时间定位个单位

{

max_lru=time_lru[0];

//在未达到"

一定时间"

的要求时,先采用LRU进行页面置换

for(m=0;

if(time_lru[m]>

max_lru)

{

k=m;

max_lru=time_lru[m];

}

pb[k]=p[n];

time_lru[k]=0;

sum++;

}

else

m++)//计算一定时间间隔内物理块中的页面使用次数

for(h=n-1;

h>

=n-51;

h--)

if(pb[m]==p[h])

time[m]++;

min=time[0];

if(time[m]<

min)

min=time[m];

m++)//应对出现页面使用次数同样少的情况

if(time[m]==min)

t++;

if(t>

1)//若使用次数同样少,将次数相同的页面按照LRU进行页面置换

max_lru=time_lru[k];

for(m=0;

time[m]==min;

if(time_lru[m]>

{

k=m;

max_lru=time_lru[m];

}

time_lru[k]=0;

time_lru[f]=0;

time_lru[m]++;

voidline()//美化程序,使程序运行时更加明朗美观

------------------------------------------------------------------"

voidstart()//表示算法开始

\n页面置换算法开始\n"

--Designedbylipeilong\n"

\n\n"

voidend()//表示算法结束

\n"

\n页面置换算法结束,\n"

6、小结

在做程序之前一定要认真审题,然后还要查阅书籍,掌握需要用到的知识。

这个程序一改往日的纯DOS运行环境,利用c语言编写可视化程序,能从直观上表达内存分配和回收的全过程,对整体有个深刻的认识。

比如:

画图问题、构建数据结构时出了问题,在编译时的时候遇到重定义问题等等,经过跟别的同学交流和上网查阅资料,一一解决了这些难题,并将为以后的可视化程序的编写积累经验。

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

当前位置:首页 > 总结汇报

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

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