- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验6虚拟存储管理
实验六 虚拟存储管理
实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
实验内容
通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影
响。页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
计算并输出下属算法在不同内存容量下的命中率。
先进先出的算法(FIFO);
最近最少使用算法(LRU);
开 始
生成地址流
输入算法号S
1≤S≤4
形成地址页号
用户内存空间msize=2
Msize≤32
OPT()
FIFO()
LRU()
LFU()
Msize加1
S=?
是否用其他算法继续
结 束
N
Y
1
2
3
4
Y
N
提示出错,重新输入
系统框图
四.页面置换算法程序代码
#includestdio.h
#includestring.h
#includeiostream.h
const int MAXSIZE=1000;//定义页访问流的最大长度
const int MAXQUEUE=3;//定义可用页面数
typedef struct node
{ int loaded; int hit;
}page;
page pages[MAXQUEUE]; //定义页面表
int queue[MAXSIZE];
int quantity;
//初始化结构函数
void initial()
{
int i;
for(i=0;iMAXQUEUE;i++)
{
pages[i].loaded=-1;
pages[i].hit=0; }
for(i=0;iMAXSIZE;i++)
{
queue[i]=-1;
}
quantity=0;
}
//初始化页面函数
void init()
{
int i;
for(i=0;iMAXQUEUE;i++)
{
pages[i].loaded=-1;
pages[i].hit=0;
}
}
//读入页面流
void readData()
{
FILE *fp;
char fname[20];
int i;
cout请输入页面流文件名:;
cinfname;
if((fp=fopen(fname,r))==NULL)
{
cout错误,文件打不开,请检查文件名;
}
else
{
while(!feof(fp))
{
fscanf(fp,%d ,queue[quantity]);
quantity++;
}
}
cout读入的页访问流:;
for(i=0;iquantity;i++)
{
coutqueue[i] ;
}
}
//FIFO调度算法
void FIFO()
{
int i,j,p,flag;
int absence=0;
p=0;
coutendlendl;
cout先进??出调度算法(FIFO)页面调出流:;
for(i=0;iquantity;i++)
{ flag=0;
for(j=0;jMAXQUEUE;j++)
{
if(pages[j].loaded==queue[i])
{ flag=1; }
}
if(flag==0)
{
if(absence=MAXQUEUE)
{ coutpages[p].loaded ; }
pages[p].loaded=queue[i];
p=(p+1)%MAXQUEUE;
absence++;
}
}
absence-=MAXQUEUE;
coutendl总缺页数:absence+MAXQUEUEendl; }
//最近最少使用调度算法(LRU)
void LRU()
{
int absence=0;
int i,j;
int flag;
for(i=0;iMAXQUEUE;i++)
{ pages[i].loaded=queue[i]; }
coutendlendl;
cout最近最少使用调度算法(LRU)页面调出流:;
for(i=MAXQUEUE;iquantity;i++)
{ flag=-1;
for(j=0;jMAXQUEUE;j++)
{
if(queue[i]==pages[j].loaded)
{ flag=j; }
} //CAUTION pages[0]是队列头
if(flag==-1)
{
/
文档评论(0)