存储管理的模拟实现实验报告.docx
- 文档编号:18060778
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:18
- 大小:144.81KB
存储管理的模拟实现实验报告.docx
《存储管理的模拟实现实验报告.docx》由会员分享,可在线阅读,更多相关《存储管理的模拟实现实验报告.docx(18页珍藏版)》请在冰点文库上搜索。
存储管理的模拟实现实验报告
南昌大学实验报告
---(5)存储管理的模拟实现
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合■设计□创新实验日期:
实验成绩:
一、实验目的
存储管理的主要功能之一是合理地分配空间。
请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
二、实验内容
1.过随机数产生一个指令序列,共320条指令。
其地址按下述原则生成:
①50%的指令是顺序执行的;
②25%的指令是均匀分布在前地址部分;
③25%的指令是均匀分布在后地址部分;
#具体的实施方法是:
A.在[0,319]的指令地址之间随机选区一起点M;
B.顺序执行一条指令,即执行地址为M+1的指令;
C.在前地址[0,M+1]中随机选取一条指令并执行,该指令的地址为M’;
D.顺序执行一条指令,其地址为M’+1;
E.在后地址[M’+2,319]中随机选取一条指令并执行;
F.重复A—E,直到执行320次指令。
2.指令序列变换成页地址流
设:
(1)页面大小为1K;
(2)用户内存容量为4页到32页;
(3)用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条—第9条指令为第0页(对应虚存地址为[0,9]);
第10条—第19条指令为第1页(对应虚存地址为[10,19]);
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
第310条—第319条指令为第31页(对应虚存地址为[310,319]);
按以上方式,用户指令可组成32页。
3.计算并输出下述各种算法在不同内存容量下的命中率。
A.FIFO先进先出的算法
B.LRU最近最少使用算法
C.LFU最少访问页面算法
三、实验要求
1、需写出设计说明;
2、设计实现代码及说明
3、运行结果;
四、主要实验步骤
1、分析算法结构;
2、画出算法的流程图,即设计说明;
3、根据画出的流程图使用C语言编写相应的代码(代码过长,放到最后);
程序主要由main函数和以下几个函数组成:
voidinitialization();初始化内存数据
voidFIFO();FIFO先进先出算法;
voidLRU();LRU最久未使用算法;
voidLFU();LFU最近最久未使用算法;
4、检查代码,将编出的代码编译、链接,验证其正确性。
页面置换算法整体结构
FIFO页面置换算法
LRU页面置换算法
LFU页面置换算法
五、实验数据及处理结果
六、实验体会或对改进实验的建议
我做实验的时候,主要的难度是在几个特殊情况的处理上,如LRU内存中的页面都是之前没有调用过的,那怎么办,还有就是LFU中还没有达到“一定时间间隔”的条件时怎么办?
另外就是由于实验使用的是系统产生的随机数,所以难以验证实验结果的正确性。
七、参考资料
《计算机操作系统》
《计算机操作系统实验指导书》
《C程序设计》
《C语言程序设计_现代方法》
《计算机操作系统教程习题解答与实验指导(第二版)》
八、实验代码
#include
#include
#include
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;
}
for(n=0;n<320;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()//用户内存及相关数据初始化
{
for(n=0;n<32;n++)
pb[n]=-1;
sum=0;
r=0;
k=0;
g=-1;
f=-1;
}
voidFIFO()//先进先出置换算法
{
inttime[32];//定义进入内存时间长度数组
intmax;//max表示进入内存时间最久的,即最先进去的
initialization();
for(m=0;m
time[m]=m+1;
for(n=0;n<320;n++)
{
k=0;
for(m=0;m
if(pb[m]==p[n])//表示内存中已有当前要调入的页面
{
g=m;
break;
}
for(m=0;m
if(pb[m]==-1)//用户内存中存在空的物理块
{
f=m;
break;
}
if(g!
=-1)
g=-1;
else
{
if(f==-1)//找到最先进入内存的页面
{
max=time[0];
for(m=0;m
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;
sum++;
f=-1;
}
}
for(m=0;m
=-1;m++)
time[m]++;//物理块中现有页面停留时间+1
}
r=1-(float)sum/320;
printf("\t\t%6.4f",r);
}
voidLRU()//最近最少使用算法
{
inttime[32];
intmax;
initialization();
for(m=0;m
time[m]=m+1;
for(n=0;n<320;n++)
{
k=0;
for(m=0;m
if(pb[m]==p[n])
{
g=m;
break;
}
for(m=0;m
if(pb[m]==-1)
{
f=m;
break;
}
if(g!
=-1)
{
time[g]=0;
g=-1;
}
else
{
if(f==-1)
{
max=time[0];
for(m=0;m
if(time[m]>max)
{
k=m;
max=time[m];
}
pb[k]=p[n];
time[k]=0;
sum++;
}
else
{
pb[f]=p[n];
time[f]=0;
sum++;
f=-1;
}
}
for(m=0;m
=-1;m++)
time[m]++;
}
r=1-(float)sum/320;
printf("\t\t%6.4f",r);
}
voidLFU()//最少访问页面算法
{
inttime_lru[32],time[32],min,max_lru,t;
initialization();
for(m=0;m
{
time[m]=0;
time_lru[m]=m+1;
}
for(n=0;n<320;n++)
{
k=0;
t=1;
for(m=0;m
if(pb[m]==p[n])
{
g=m;
break;
}
for(m=0;m
if(pb[m]==-1)
{
f=m;
break;
}
if(g!
=-1)
{
time_lru[g]=0;
g=-1;
}
else
{
if(f==-1)
{
if(n<=20)//将最少使用的间隔时间定位个单位
{
max_lru=time_lru[0];//在未达到“一定时间”的要求时,先采用LRU进行页面置换
for(m=0;m
if(time_lru[m]>max_lru)
{
k=m;
max_lru=time_lru[m];
}
pb[k]=p[n];
time_lru[k]=0;
sum++;
}
else
{
for(m=0;m
for(h=n-1;h>=n-51;h--)
if(pb[m]==p[h])
time[m]++;
min=time[0];
for(m=0;m
if(time[m] { min=time[m]; k=m; } for(m=0;m if(time[m]==min) t++; if(t>1)//若使用次数同样少,将次数相同的页面按照LRU进行页面置换 { max_lru=time_lru[k]; for(m=0;m if(time_lru[m]>max_lru) { k=m; max_lru=time_lru[m]; } } pb[k]=p[n]; time_lru[k]=0; sum++; } } else { pb[f]=p[n]; time_lru[f]=0; sum++; f=-1; } } for(m=0;m =-1;m++) time_lru[m]++; } r=1-(float)sum/320; printf("\t\t%6.4f",r); } voidline()//美化程序,使程序运行时更加明朗美观 { printf("------------------------------------------------------------------"); } voidstart()//表示算法开始 { line(); printf("\n页面置换算法开始\n"); printf("——DesignedbyGGY\n"); line(); printf("\n\n"); } voidend()//表示算法结束 { printf("\n"); line(); printf("\n页面置换算法结束,谢谢使用\n"); line(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 管理 模拟 实现 实验 报告