操作系统os内存管理实验.docx

上传人:b****6 文档编号:12771429 上传时间:2023-06-08 格式:DOCX 页数:13 大小:114.95KB
下载 相关 举报
操作系统os内存管理实验.docx_第1页
第1页 / 共13页
操作系统os内存管理实验.docx_第2页
第2页 / 共13页
操作系统os内存管理实验.docx_第3页
第3页 / 共13页
操作系统os内存管理实验.docx_第4页
第4页 / 共13页
操作系统os内存管理实验.docx_第5页
第5页 / 共13页
操作系统os内存管理实验.docx_第6页
第6页 / 共13页
操作系统os内存管理实验.docx_第7页
第7页 / 共13页
操作系统os内存管理实验.docx_第8页
第8页 / 共13页
操作系统os内存管理实验.docx_第9页
第9页 / 共13页
操作系统os内存管理实验.docx_第10页
第10页 / 共13页
操作系统os内存管理实验.docx_第11页
第11页 / 共13页
操作系统os内存管理实验.docx_第12页
第12页 / 共13页
操作系统os内存管理实验.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统os内存管理实验.docx

《操作系统os内存管理实验.docx》由会员分享,可在线阅读,更多相关《操作系统os内存管理实验.docx(13页珍藏版)》请在冰点文库上搜索。

操作系统os内存管理实验.docx

操作系统os内存管理实验

xx

xx

《操作系统》实验报告

专业班级

xx

实验地点

xx

学生学号

xx

指导教师

xx

学生姓名

xx

实验时间

xx

实验项目

内存管理

实验类别

操作性()验证性()设计性(√)综合性()其它()

实验目的及要求

实验目的:

存储管理的主要功能之一是合理地分配空间。

本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。

实验要求:

1、过随机数产生一个指令序列,共320条指令。

2、指令序列变换成页地址流

3、计算并输出下述各种算法在不同内存容量下的命中率。

成绩评定表

类别

评分标准

分值

得分

合计

上机表现

积极出勤、遵守纪律

主动完成实验设计任务

30分

需求设计

比较规范、基本正确

功能达到实验要求

30分

实验报告

及时递交、填写规范

内容完整、体现收获

40分

说明:

评阅教师:

日期:

年月日

实验内容

1.目的和要求

存储管理的主要功能之一是合理地分配空间。

请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。

2.实验内容

1.过随机数产生一个指令序列,共320条指令。

其地址按下述原则生成:

①50%的指令是顺序执行的;

②25%的指令是均匀分布在前地址部分;

③25%的指令是均匀分布在后地址部分;

2.指令序列变换成页地址流

3.计算并输出下述各种算法在不同内存容量下的命中率。

实验的代码如下:

#include

#include

#include

//S表示产生的随机数,i表示五路快数

ints,i;

intm,n,h;

intk,g,f;

intsum;

floatr;

//page页数

intp[320];

//执行的指令

inta[320];

//physicalblock用户内存容量(物理块)

intpb[32];

voidinitialization();

voidFIFO();

voidLRU();

voidOPT();

voidline();

voidstart();

voidend();

voidmain()

{

start();

//以计算机当前时间作为随机种子

srand((int)time(NULL));

for(n=0;n<320;n+=3)

{

//随机产生一条指令

s=rand()%320+0;

//顺序执行一条指令

a[n]=s+1;

//执行前地址指令M`

s=rand()%(a[n]+1);

a[n+1]=s+1;

s=rand()%(319-a[n+1])+(a[n+1]+1);

a[n+2]=s;

}

for(n=0;n<320;n++)

//得到指令想对的页数

p[n]=a[n]/10;

printf("物理块数\tFIFO\t\tLRU\t\tLFU\n");

line();

for(i=4;i<=32;i++)

{

printf("\n%2d:

",i);

FIFO();

LRU();

OPT();

}

end();

}

//用户内存及相关数据初始化

voidinitialization()

{

for(n=0;n<32;n++)

pb[n]=-1;

sum=0;

r=0;

k=0;

g=-1;

f=-1;

}

//先进先出置换算法

voidFIFO()

{

//进入内存时间长度数组

inttime[32];

//max表示进入内存时间最久的,即最先进出的

intmax;

initialization();

for(m=0;m

time[m]=m+1;

for(n=0;n<320;n++)

{

k=0;

for(m=0;m

//表示内存中已有调入的页面

if(pb[m]==p[n])

{

g=m;

break;

}

for(m=0;m

//用户内存中空的物理块

if(pb[m]==-1)

{

f=m;

break;

}

if(g!

=-1)

g=-1;

else

{//找到最先进入内存的页面

if(f==-1)

{

max=time[0];

for(m=0;m

if(time[m]>max)

{

max=time[m];

k=m;

}

pb[k]=p[n];

//该物理块中页面停留时间置零

time[k]=0;

//缺页数+1

sum++;

}

else

{

pb[f]=p[n];

time[f]=0;

sum++;

f=-1;

}

}

for(m=0;m

=-1;m++)

//物理块中现有页面停留时间+1

time[m]++;

}

r=1-(float)sum/320;

printf("\t\t%6.4f",r);

}

voidLRU()//最近最少使用算法

{

inttime[32];

intmax;

initialization();

for(m=0;m

time[m]=m+1;

for(n=0;n<320;n++)

{

k=0;

for(m=0;m

if(pb[m]==p[n])

{

g=m;

break;

}

for(m=0;m

if(pb[m]==-1)

{

f=m;

break;

}

if(g!

=-1)

{

time[g]=0;

g=-1;

}

else

{

if(f==-1)

{

max=time[0];

for(m=0;m

if(time[m]>max)

{

k=m;

max=time[m];

}

pb[k]=p[n];

time[k]=0;

sum++;

}

else

{

pb[f]=p[n];

time[f]=0;

sum++;

f=-1;

}

}

for(m=0;m

=-1;m++)

time[m]++;

}

r=1-(float)sum/320;

printf("\t\t%6.4f",r);

}

voidOPT()//最少访问页面算法

{

initialization();

inttime_lru[32],time[32],min,max_lru,t;

for(m=0;m

{

time[m]=0;

time_lru[m]=m+1;

}

for(n=0;n<320;n++)

{

k=0;

t=1;

for(m=0;m

if(pb[m]==p[n])

{

g=m;

break;

}

for(m=0;m

if(pb[m]==-1)

{

f=m;

break;

}

if(g!

=-1)

{

time_lru[g]=0;

g=-1;

}

else

{

if(f==-1)

{

if(n<=20)//将最少使用的间隔时间定位个单位

{

max_lru=time_lru[0];

//在未到达”一定时间”的要求时,先采用LRU进行页面置数

for(m=0;m

if(time_lru[m]>max_lru)

{

k=m;

max_lru=time_lru[m];

}

pb[k]=p[n];

time_lru[k]=0;

sum++;

}

else

{

for(m=0;m

//计算一定时间间隔内物理块中页面使用次数

for(h=n-1;h>=n-51;h--)

if(pb[m]==p[h])

time[m]++;

min=time[0];

for(m=0;m

if(time[m]

{

min=time[m];

k=m;

}

for(m=0;m

//应对出现页面使用次数同样少的情况

if(time[m]==min)

t++;

if(t>1)

//使用次数同样少,将次数相同的页面按照LRU进行页面置换

{

max_lru=time_lru[k];

for(m=0;m

if(time_lru[m]>max_lru)

{

k=m;

max_lru=time_lru[m];

}

}

pb[k]=p[n];

time_lru[k]=0;

sum++;

}

}

else

{

pb[f]=p[n];

time_lru[f]=0;

sum++;

f=-1;

}

}

for(m=0;m

=-1;m++)

time_lru[m]++;

}

r=1-(float)sum/320;

printf("\t\t%6.4f",r);

}

voidline()//美化程序,使程序运行时更加明朗美观

{

printf("-------------------------");

}

voidstart()//表示算法开始

{

line();

printf("\n页面置换算法开始\n");

line();

printf("\n");

}

voidend()//表示算法结束

{

printf("\n");

line();

printf("\n页面置换算法结束\n");

line();

}

实验的结果如下:

 

实验总结:

通过本次模拟请求页式存储管理中页面置换算法,xx对虚拟存储技术的特点以及请求页式管理的页面置换算法有了进一步的了解。

熟悉了FIFO,LRU,OPT的工作流程,及种算法在不同内存容量下的命中率。

我们通过对比可以看出最近最久未使用置换算法比先进先出的置换算法效率要高些。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2