存储管理模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储管理模拟实现On March 12, 2022, study standards and apply standards.
一、实验目的
存储管理的主要功能之一是合理地分配空间;请求页式管理是一种常用的虚拟存储管理技术;本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法;
二、实验内容
编程实现页面置换算法,要求输出页面的置换过程,具体可以编程实现OPT、FIFO和LRU算法;
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、分析算法结构;
画出算法的流程图,即设计说明;
根据画出的流程图使用C语言编写相应的代码代码过长,放到最后;
程序主要由main函数和以下几个函数组成:
void initialization;初始化内存数据
void FIFO;FIFO先进先出算法;
void LRU;LRU最久未使用算法;void LFU;LFU最近最久未使用算法:
流程图如下:
页面置换算法整体结构
FIFO页面置换算法
LRU页面置换算法
LFU页面置换算法
2、设计说明及源代码
FIFO算法设计说明:按照所要求的产生随机指令序列,存放在order320这个数组中;
通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即mem _volume4中存放的页面相同,如果相同则不做任何操作,如果不相同,则产生缺页,相应的缺页次数加一,按照fcfs将最先进入内存的页数淘汰,并将该页写到内存中去;
重复上面的操作直到完成这320条指令;
源代码:
pp : 定义控制台应用程序的入口点;
.3fpp : 定义控制台应用程序的入口点;
.3fpp : 定义控制台应用程序的入口点;
//
include ""
int _tmainint argc, _TCHAR argv
{
return 0;
}
include <>
include <>
include <>
define N 5 //定义运行次数
void main
{
int order320,count32={0},compare4={0},mem_volume4={100,100,100,100};
//compare数组中存放了每次要比较的四个内存块中页数的调用次数
int l=0,i=0,j,k=0,cx=0;
int min,num=0,n,sign=0,add=0;
float value=0,sum=0;
srandtimeNULL;
forcx=0;cx<N;cx++{
whilei<320{
orderi=rand%320;
forj=0;j<4;j++
iforderi+1/10==mem_volumej{
n=orderi+1/10;
countn+=1;
sign=1; //相同执行加1操作
}
ifsign
sign=0;
else{
l++;
ifmem_volume3==100{
mem_volume3=orderi+1/10;
n=orderi+1/10;
countn+=1;
}
else{ min=1000;
fornum=0;num<4;num++{
k=mem_volumenum;
comparenum=countk;
ifcomparenum<min{
min=comparenum;
j=num; //通过比较确定最少使用的页数,
}
}
mem_volumej=orderi+1/10;
}
}
i++;
orderi=rand%orderi-1+2;
forj=0;j<4;j++
iforderi/10==mem_volumej{
n=orderi/10;
countn+=1;
sign=1;
}
ifsign
sign=0;
else {
l++;
ifmem_volume2==100{
mem_volume2=orderi+1/10;
n=orderi+1/10;
countn+=1;
}
else{ min=1000;
fornum=0;num<4;num++{
k=mem_volumenum;
comparenum=countk;
ifcomparenum<min{
min=comparenum;
j=num;
}
}
mem_volumej=orderi+1/10;
}
}
i++;
orderi=orderi-1+1;
forj=0;j<4;j++
iforderi/10== mem_volumej{
n=orderi/10;
countn+=1;
sign=1;
}
ifsign
sign=0;
else{
l++;
ifmem_volume1==100{
mem_volume1=orderi+1/10;
n=orderi+1/10;
countn+=1;
}
else{ min=1000;
fornum=0;num<4;num++{
k=mem_volumenum;
comparenum=countk;
ifcomparenum<min{
min=comparenum;
j=num;
}
}
mem_volumej=orderi+1/10;
}
}
i++;
orderi=rand%319-orderi-1-2+orderi-1+2;
forj=0;j<4;j++
iforderi/10==mem_volume0{
n=orderi/10;
countn+=1;
sign=1;
}
ifsign
sign=0;
else {
l++;
ifmem_volume0==100{
mem_volume0=orderi+1/10;
n=orderi+1/10;
countn+=1;
}
else{ min=1000;
fornum=0;num<4;num++{
k=mem_volumenum;
comparenum=countk;
ifcomparenum<min{
min=comparenum;
j=num;
}
}
mem_volumej=orderi+1/10;
}
}
i++;
}
value=l/100;
add=add+l;
sum=sum+value;
}
printf" LFU页面置换算法 \n";
printf" 最后一次指令序列 ";
fori=0;i<320;i++{
ifi%10==0
printf"\n";
printf"%5d",orderi;
}
printf"\n";
printf"\n";
printf"\t%d次的平均缺页数为%d\n\t%d次的平均缺页率为%.3f%%",N,add/10,N,sum/10;
printf"\n";
}
五、实验数据及处理结果
FIFO页面置换算法运行结果:
LRU页面置换算法运行结果:
LFU页面置换算法运行结果:。