- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储管理模拟程序
存储管理模拟程序
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
文档评论(0)