实验五 虚拟存储管理
一. 实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
二. 实验内容
通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影 响。页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
命中率=1
-
页面失效次数页地址流长度
计算并输出下属算法在不同内存容量下的命中率。 ● 先进先出的算法(FIFO ); ● 最近最少使用算法(LRU );
三. 系统框图
四.页面置换算法程序代码
#include #include #include
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() { }
//初始化页面函数 void init()
int i;
for(i=0;i
pages[i].loaded=-1; pages[i].hit=0; }
for(i=0;i
queue[i]=-1;
}
//读入页访问流 void readData() {
int i;
for(i=0;i
pages[i].loaded=-1; pages[i].hit=0; }
FILE *fp; char fname[20]; int i;
cout>fname;
if((fp=fopen(fname,"r"))==NULL) { } else { }
cout
while(!feof(fp)) { }
fscanf(fp,"%d ",&queue[quantity]); quantity++;
cout
}
}
cout
//FIFO调度算法 void FIFO() { }
int i,j,p,flag; int absence=0; p=0;
cout
for(j=0;j
coutif(absence>=MAXQUEUE) { cout
if(pages[j].loaded==queue[i]) { flag=1; }
//最近最少使用调度算法(LRU ) void LRU() {
int absence=0; int i,j; int flag;
cout
for(j=0;j
if(queue[i]==pages[j].loaded) { flag=j; }
//缺页处理
else {
if(absence>=MAXQUEUE)
{cout
pages[MAXQUEUE-1].loaded=queue[i]; absence++; }
pages[j]=pages[j+1];
//页面已载入
pages[quantity]=pages[flag];
}
} }
for(j=flag;j
pages[MAXQUEUE-1]=pages[quantity];
pages[j]=pages[j+1];
cout//显示 void version() {
cout
****************/"
cout
void main() { }
五 操作说明
运行程序前先新建一个页面流文件文件(例如a.txt ),在文件中存储的是一系列页号(页号用整数表示,用空格作为分隔符),用来模拟程序执行时的页访问次序。
version(); initial(); readData(); FIFO(); init(); LRU();
六 结果分析
1. 对于如下的页面访问序列; 1,2,3,4,1,2,5,1,2,3,4,5 当内存页面数分别为2、3、4、5时,使用FIFO 和LRU 置换算法模拟页面调度,记录并分析实验结果(分析内存页面的具体调度情况并计算命中率) 。 2. 思考以下问题,并使用实验数据来回答:
● 什么是Belay 现象?本次实验中是否出现了Belay 现象?LRU 算法会存在
Belay 现象吗?FIFO 算法必然会出现Belay 现象吗?
● LRU 算法的性能在哪些情况下优于FIFO ?哪些情况下次于FIFO ?各自的原
因何在?
3. 选择一个页面调度算法,详细地描述其程序的实现过程。
实验五 虚拟存储管理
一. 实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
二. 实验内容
通过计算不同算法的命中率比较算法的优劣。同时也考虑了用户内存容量对命中率的影 响。页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。
命中率=1
-
页面失效次数页地址流长度
计算并输出下属算法在不同内存容量下的命中率。 ● 先进先出的算法(FIFO ); ● 最近最少使用算法(LRU );
三. 系统框图
四.页面置换算法程序代码
#include #include #include
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() { }
//初始化页面函数 void init()
int i;
for(i=0;i
pages[i].loaded=-1; pages[i].hit=0; }
for(i=0;i
queue[i]=-1;
}
//读入页访问流 void readData() {
int i;
for(i=0;i
pages[i].loaded=-1; pages[i].hit=0; }
FILE *fp; char fname[20]; int i;
cout>fname;
if((fp=fopen(fname,"r"))==NULL) { } else { }
cout
while(!feof(fp)) { }
fscanf(fp,"%d ",&queue[quantity]); quantity++;
cout
}
}
cout
//FIFO调度算法 void FIFO() { }
int i,j,p,flag; int absence=0; p=0;
cout
for(j=0;j
coutif(absence>=MAXQUEUE) { cout
if(pages[j].loaded==queue[i]) { flag=1; }
//最近最少使用调度算法(LRU ) void LRU() {
int absence=0; int i,j; int flag;
cout
for(j=0;j
if(queue[i]==pages[j].loaded) { flag=j; }
//缺页处理
else {
if(absence>=MAXQUEUE)
{cout
pages[MAXQUEUE-1].loaded=queue[i]; absence++; }
pages[j]=pages[j+1];
//页面已载入
pages[quantity]=pages[flag];
}
} }
for(j=flag;j
pages[MAXQUEUE-1]=pages[quantity];
pages[j]=pages[j+1];
cout//显示 void version() {
cout
****************/"
cout
void main() { }
五 操作说明
运行程序前先新建一个页面流文件文件(例如a.txt ),在文件中存储的是一系列页号(页号用整数表示,用空格作为分隔符),用来模拟程序执行时的页访问次序。
version(); initial(); readData(); FIFO(); init(); LRU();
六 结果分析
1. 对于如下的页面访问序列; 1,2,3,4,1,2,5,1,2,3,4,5 当内存页面数分别为2、3、4、5时,使用FIFO 和LRU 置换算法模拟页面调度,记录并分析实验结果(分析内存页面的具体调度情况并计算命中率) 。 2. 思考以下问题,并使用实验数据来回答:
● 什么是Belay 现象?本次实验中是否出现了Belay 现象?LRU 算法会存在
Belay 现象吗?FIFO 算法必然会出现Belay 现象吗?
● LRU 算法的性能在哪些情况下优于FIFO ?哪些情况下次于FIFO ?各自的原
因何在?
3. 选择一个页面调度算法,详细地描述其程序的实现过程。