文档详情

存储管理模拟程序.doc

发布:2017-11-30约7.32千字共10页下载文档
文本预览下载声明
存储管理模拟程序 1. 设计目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 2. 设计内容 (1)通过输入或由程序产生程序执行时的页号序列,共32个页号。页号序列按下述原则生成:页号序列应具有一定随机性。(如:50%的顺序访问); (2)计算并输出下述各种算法在不同内存容量(4~32内存页面)下的命中率。 ①先进先出的算法(FIFO) ②最近最少使用算法(LRU) ③最佳淘汰算法(OPT):先淘汰最不常用的页地址 ④最少访问页面算法(LFR) 其中和为选择内容 命中率 = 1 - (页面失效次数/页地址流长度) 3.程序设计: 本程序首先用rand()函数定义和产生地址流序列,并针对不同的算法计算出相应的命中率。 I 根据实验内容将函数分成五个模块:1主程序模块,主要包括页面结构数组及页面控制结构定义,将指令流转换成页地址流 2 三个置换算法程序模块:FIFO算法模块,LRU算法模块,OPT算法模块,LFU算法模块 II 总程序模块流程图如下: 4.源程序如下: #include stdio.h #includemath.h #define maxsize 32 ##include stdlib.h define vpf 200 void FIFO(int a[]); void LRU(int a[]); void OPT(int a[]); void LFU(int a[]); int count[maxsize]; //int b[pf]; int a[vpf]; void main() // 定义主函数。 { for(int i=0;i200;i++) //用随机数产生页地址流 a[i]=rand()%32; FIFO(a); LFU(a); OPT(a); LRU(a); } void LFU(int a[]) //LFU算法 { for(int n=4;n33;n++) //不同的页面数计算命中率 { int num=0; int same=0; int min; int minpage=0; int dis=0; int i=0; int k=0; int sum=n; //空白页面数 int num2=2; //设置清零时间间隔 int b[maxsize]; for (k=0;kn;k++) //页面数组,计数数组初始化 { b[k]=-1; count[k]=0;} for (i=0;ivpf;i++) {num=0; for (k=0;kn;k++) //测试是否命中 { if(a[i]==b[k]) { same=k; num++; } } if(num!=0) //命中页面计数器加1 count[same]++; else { dis++; //未命中,缺页次数加1 if(sum==0) //无空白页面 { min=201; for(k=0;kn;k++) //找出计数器值最小的页面替换 { if(mincount[k]) { min=count[k]; minpage=k; } } b[minpage]=a[i]; if(num2==0) //每两次缺页计数器清零 for(k=0;kn;k++) {count[k]=0; num2=3;} count[minpage]=1; num2--; //count[minpage]=0; } else { //有空白页面 {b[n-sum]=a[i]; if(num2==0) //每两次缺页计数器清零 for(k=0;kn;k++) {count[k]=0; num2=3;} num2--; count[n-sum]=1; sum--;} } } } printf(%d,n); printf( page
显示全部
相似文档