《存储管理模拟实现》由会员分享,可在线阅读,更多相关《存储管理模拟实现(6页珍藏版)》请在金锄头文库上搜索。
1、YOUR LO存储管理模拟实现一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚 拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设 计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。二、实验内容编程实现页面置换算法,要求输出页面的置换过程,具体可以编程实现OPT、FIFO 和LRU算法。1. 过随机数产生一个指令序列,共320条指令。其地址按下述原则生成: 50%的指令是顺序执行的; 25%的指令是均匀分布在前地址部分; 25%的指令是均匀分布在后地址部分;#具体的实施方法是:A. 在0, 319的指令地址之间随机选区一起点M;B.
2、顺序执行一条指令,即执行地址为M+1的指令;C. 在前地址0, M+1中随机选取一条指令并执行,该指令的地址为M;D. 顺序执行一条指令,其地址为M +1;E. 在后地址M +2, 319中随机选取一条指令并执行;F. 重复AE,直到执行320次指令。2. 指令序列变换成页地址流设:(1)页面大小为1K:(2)用户内存容量为4页到32页;(3)用户虚存容量为32K。在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存 放方式为:第0条一第9条指令为第0页(对应虚存地址为0, 9);第10条一笫19条指令为第1页(对应虚存地址为10, 19);OOOOOOOOOOOOOOO
3、OOOOOO笫310条一第319条指令为笫31页(对应虚存地址为310, 319):按以上方式,用户指令可组成32页。3. 计算并输出下述各种算法在不同内存容量下的命中率。A. FIFO先进先出的算法B. LRU最近最少使用算法C. LFU最少访问页面算法三、实验要求1、需写出设汁说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤1、分析算法结构;画出算法的流程图,即设计说明;根据画出的流程图使用C语言编写相应的代码(代码过长,放到最后);程序主要由main函数和以下儿个函数组成:void initialization();初始化内存数据void FIFO() ;FIFO先进先出算法;
4、void LRU() ;LRU最久未使用算法;void LFU() ;LFU最近最久未使用算法:流程图如下:页面置换算法整体结构 FIFO页面置换算法 LRU页面置换算法LFU页面置换算法2、设计说明及源代码FIFO算法设计说明:按照所要求的产生随机指令序列,存放在order 320这个数 组中。通过循环产生这些随机指令,每产生一条都要进行下列判断:是否和内存中即mem .volume4中存放的页面相同,如果相同则不做任何操作,如果不相同,则产生缺 页,相应的缺页次数加一,按照fcfs将最先进入内存的页数淘汰,并将该页写到内存 中去。重复上面的操作直到完成这320条指令。源代码:PP :定义控
5、制台应用程序的入口点。.3fpp :定义控制台应用程序的入口点。.3fpp :定义控制台应用程序的入口点。/#include ”int _tmain(int argc, _TCHAR* argv)return 0;#include #include #include #define X 5/定义运行次数void main()intorder320, count32 = 0, compare4 = 0, mem_volume4 = 100, 100, 100, 100; /compare数组中存放了每次要比较的四个内存块中页数的调用次数 int 1=0, i=0, j, k=0, ex二0;in
6、t min, num=0, n, sign二0, add=0;float value二0, sunFO;srand(time(NULL);for(cx=0;cxN;cx+)while(i320) order i =rand () %320; for(j=0;j4;j+) if(orderi+1)/10=mem_volumej)n= (orderi+1)/10;countn+=l;signal; /相同执行加1操作if(sign)sign=0;else1+;if(mem_volume3=100)memvolume3二(orderi+l)/10;n=(orderi+l)/10;countn+=l;
7、else min二1000;for(num=0;num4;num+) k=mem_volumenum; comparenum=countk; if(comparenummin) min=comparenum;j二num;通过比较确定最少使用的页数, memvolume j = (order i+l)/10;i+;orderi=rand()%(orderil+2);for(j=0;j4;j+)i f(orderi/10=mem_volumej) n=orderi/10;countn+=l; signal;if(sign)sign=0;else 1+;if(mem_volume2=100)mem_
8、volume2=(orderi+l)/10; n= (orderi+1)/10;countn+=l; else min=1000;for(num=0;num4;num+) k=mem_volumenum; comparenum=countk; if(comparenummin) min=comparenum; j二num; mem_volumej=(orderi+l)/10;i+;orderi=order i-1+1; for(j=0;j4;j+)if (order i/10 mem_volumejl) n=orderi/10;countn+=l; signal;if(sign)sign=0;
9、else1+;if (mem_volume 1 =100) mem_volumel = (order i+l) /10; n= (order i+l)/10;countn+=l;else min=1000;for(num=0;num4;num+) k=mem_volumenum; comparenum=countk; if(comparenummin) min=comparenum; j二num; mem_volumej=(orderi+l)/10;i+;order i=rand()%(319-order iT-2) + (order il+2); for(j=0;j4;j+)if(order
10、i/10=mem_volume0)n=orderi/10;countn+=l; sign=l;if (sign)sign=0;else 1+;if(mem.volume0=100)mem_volume0=(orderi+l)/10; n= (orderi+1)/10;countn+=l;else min二1000;for(num=0;num4;num+) k=mem_volumenum; comparenum=countk; if(comparenummin) min=comparenum; j=num; mem_volumej=(orderi+l)/10;i+; value=l/*100;a
11、dd=add+l;sum=sum+value;printf (和*LFU 页面置换算法*9(OC*睿睿欢欢*睿*9(OC*I1 ) printf (z,* *欢* *水水*最后一次扌旨 令丿宇 歹ij*欢*欢*欢)for(i=0;i320;i+)if(i%10=0) printf(n);printf(“5d, orderi); printffW);An);printfCW 次的平均缺页数为%dnt%d次的平均缺页率 为. 3f%,z, X, add/10, N, sum/10);printf Cn);五、实验数据及处理结果 FIFO页面置换算法运行结果:LRU页面置换算法运行结果: LFU页面置换算法运行结果: