os实验三存储管理Word文件下载.docx
- 文档编号:20060637
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:12
- 大小:41.74KB
os实验三存储管理Word文件下载.docx
《os实验三存储管理Word文件下载.docx》由会员分享,可在线阅读,更多相关《os实验三存储管理Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
第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语言编写可视化程序,能从直观上表达内存分配和回收的全过程,对整体有个深刻的认识。
比如:
画图问题、构建数据结构时出了问题,在编译时的时候遇到重定义问题等等,经过跟别的同学交流和上网查阅资料,一一解决了这些难题,并将为以后的可视化程序的编写积累经验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- os实验三 存储管理 os 实验 存储 管理