实验四虚拟存储器管理实验
◆实验名称:存储器管理实验
◆仪器、设备:计算机
◆参考资料:操作系统实验指导书
◆实验目的:
设计一个请求页式存储管理方案,并编写模拟程序实现。
◆实验内容:
编写程序用来模拟虚拟页式存储管理中的页面置换
要求:
1.快表页面固定为4块
2.从键盘输入N个页面号
3.输出每次物理块中的页面号和缺页次数,缺页率
◆实验原理、数据(程序)记录:
#define PAGES 4 /* 物理块数*/
#define N 16 /*最多输入的页面号*/
int pages[PAGES][2]; /*page[i][0]保存页面号,page[i][1]保存页面存留时间*/
int queue[N]; /*页面号数组*/
void initialise(void) /*------------初始化:快表和页面号数组++++++++++++++*/ {
int i;
for(i=0;i<N;i++)
queue[i]=-1;
for(i=0;i<PAGES;i++)
{
pages[i][0]=-1;
pages[i][1]=0;
}
}
int is_page_exist(int page) /*若还有空页,返回空页序号的相反数-1若存在,返回该页的序
号若不存在,返回需要替换页面序号的相反数-1*/
{
int max;
int replace;
int i=0;
max=pages[0][1];
replace=0;
for(;i<PAGES;i++)
pages[i][1]++;
i=0;
while(i<PAGES&&pages[i][0]!=-1&&pages[i][0]!=page)
{
if(max<pages[i][1])
{
max=pages[i][1];
replace=i;
}
i++;
}
if(i==PAGES)
return (0-replace-1);
else if(pages[i][0]==page)
return i;
else
return (0-i-1);
}
int input_pages(void) /**************输入页面号*****************/ {
int i=0;
int num;
printf("请输入1~16个页面:【输入0 结束】\n");
scanf("%d",&num);
while(num&&i<N)
{
if(num>0&&num<=N)
{
queue[i]=num;
i++;
scanf("%d",&num);
}
else
printf("输入错误数据~!\n");
}
return i;
}
void display_pages(void) /* 输出物理块中的页面号*/
{
int i=0;
for(;i<PAGES;i++)
if (pages[i][0]!= -1) printf("%5d ",pages[i][0]);
printf("\n");
}
void LRU(int * lack_page) /* 核心算法,LRU算法*/
{
int i=0;
int temp;
* lack_page=0;
while(queue[i]!=-1)
{
temp=is_page_exist(queue[i]);
if(temp>-1) /*若已经存在,修改相应序号的属性值*/
pages[temp][1]=1;
else /*若不存在,修改返回序号的内容,并修改属性值*/ {
(* lack_page)++;
pages[0-temp-1][0]=queue[i];
pages[0-temp-1][1]=1;
}
printf("第%2d个页面访问时物理块中的页面号:",i+1);
display_pages();
i++;
}
}
int main(void)
{
int lack=0;
float totle_page=0;
initialise();
totle_page=(float)input_pages();
LRU(&lack);
printf("缺页数为:%d\n",lack);
printf("缺页率为:%0.3f\n",lack/totle_page);
}
◆实验结果及分析
输入数据:1 2 4 3 1 4 5 6
输出结果:
第1个页面访问时物理块中的页面号:1
第2个页面访问时物理块中的页面号:1 2
第3个页面访问时物理块中的页面号:1 2 4
第4个页面访问时物理块中的页面号:1 2 4 3
第5个页面访问时物理块中的页面号:1 2 4 3
第6个页面访问时物理块中的页面号:1 2 4 3
第7个页面访问时物理块中的页面号:1 5 4 3
第8个页面访问时物理块中的页面号:1 5 4 6
缺页次数:6
缺页率:0.750
通过实验,实现了利用LRU算法进行虚拟存储管理的模拟。