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

上传人:b****7 文档编号:9801397 上传时间:2023-02-06 格式:DOCX 页数:12 大小:175.68KB
下载 相关 举报
操作系统内存管理实验报告.docx_第1页
第1页 / 共12页
操作系统内存管理实验报告.docx_第2页
第2页 / 共12页
操作系统内存管理实验报告.docx_第3页
第3页 / 共12页
操作系统内存管理实验报告.docx_第4页
第4页 / 共12页
操作系统内存管理实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

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

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

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

操作系统内存管理实验报告

实验报告

系别

班级

学号

姓名

时间

地点

计算机科学系

计科1201

12182017

林鑫磊

2014年12月29号

计算机实验室205

课程名称

计算机操作系统

实验名称

内存管理

实验过程

一.实验目的

1.了解内存管理的功能

2.掌握进程可变内存管理的几种内存分配与回收算法

3.掌握可变分区算法中空闲分区的合并方法

二.实验内容

实现下列内存分配算法之一:

首次适应算法、循环首次适应、最佳分配算法、最坏分配算法

三.实验程序

#include

#defineL10

typedefstructLNode

{intstartaddress;

intsize;

intstate;

}LNode;

LNode

P[L]={{0,128,0},{200,256,0},{500,512,0},{1500,1600,0},{5000,150,0}};

intN=5;intf=0;

voidprint()

{inti;

printf("起始地址分区状态\n");

for(i=0;i

printf("%3d%8d%4d\n",P[i].startaddress,

P[i].size,P[i].state);}

voidFirst()

{inti,l=0,m;

printf("\n输入请求分配分区的大小:

");

scanf("%d",&m);

for(i=0;i

{if(P[i].size

continue;

elseif(P[i].size==m)

{P[i].state=1;

l=1;

break;}

else

{

P[N].startaddress=P[i].startaddress+m;

P[N].size=P[i].size-m;

P[i].size=m;P[i].state=1;

l=1;N++;

break;}}

if(l==1||i

{printf("地址成功分配\n\n");

printf("地址分配成功后的状态:

\n");

print();}

else

printf("没有可以分配的地址空间\n");}

voidCirFirst()

{intl=0,m,t=0;

printf("\n输入请求分配分区的大小:

");

scanf("%d",&m);

while(f

{if(P[f].size

{f=f+1;

if(f%N==0)

{f=0;t=1;}

continue;}

if(P[f].size==m&&P[f].state!

=1)

{P[f].state=1;

l=1;f++;

break;}

if(P[f].size>m&&P[f].state!

=1)

{P[N].startaddress=P[f].startaddress+m;

P[N].size=P[f].size-m;

P[f].size=m;

P[f].state=1;

l=1;N++;

f++;break;}}

if(l==1)

{printf("地址成功分配\n\n");

printf("地址分配成功后的状态:

\n");print();}

else

printf("没有可以分配的地址空间\n");}

voidWorst()

{inti,t=0,l=0,m;

inta[L];

printf("\n输入请求分配分区的大小:

");

scanf("%d",&m);

for(i=0;i

{a[i]=0;

if(P[i].size

continue;

elseif(P[i].size==m)

{P[i].state=1;

l=1;break;}

else

a[i]=P[i].size-m;}

if(l==0)

{for(i=0;i

{if(a[i]!

=0)

t=i;}

for(i=0;i

{if(a[i]!

=0&&a[i]>a[t])

t=i;}

P[N].startaddress=P[t].startaddress+m;

P[N].size=P[t].size-m;

P[t].size=m;P[t].state=1;

l=1;N++;}

if(l==1||i

{printf("地址成功分配\n\n");

printf("地址分配成功后的状态:

\n");

print();}

else

printf("没有可以分配的地址空间\n");}

voidBest()

{inti,t=0,l=0,m;

inta[L];

printf("\n输入请求分配分区的大小:

");

scanf("%d",&m);

for(i=0;i

{a[i]=0;

if(P[i].size

continue;

elseif(P[i].size==m)

{P[i].state=1;

l=1;

break;

}

else

a[i]=P[i].size-m;}

if(l==0)

{for(i=0;i

{if(a[i]!

=0)

t=i;}

for(i=0;i

{if(a[i]!

=0&&a[i]

t=i;}

P[N].startaddress=P[t].startaddress+m;

P[N].size=P[t].size-m;

P[t].size=m;P[t].state=1;

l=1;N++;}

if(l==1||i

{printf("地址成功分配\n\n");

printf("地址分配成功后的状态:

\n");

print();}

else

printf("没有可以分配的地址空间\n");}

voidmain()

{intk=0;

printf("动态分区分配算法:

");

while(k!

=5)

{printf("\n~~~~~~~~主菜单~~~~~~~~~");

printf("\n1、首次适应算法\n2、循环首次适应算法");

printf("\n3、最坏适应算法\n4、最佳适应算法");

printf("\n5、退出\n");

printf("请选择算法:

");

scanf("%d",&k);

switch(k)

{case1:

printf("\n初始状态为:

\n");

print();

First();

continue;

case2:

printf("\n初始状态为:

\n");

print();

CirFirst();

continue;

case3:

printf("\n初始状态为:

\n");

print();

Worst();

continue;

case4:

printf("\n初始状态为:

\n");

print();

Best();

continue;

case5:

break;

default:

printf("选择错误,请重新选择。

\n");

}

}

}

四.运行截图

五.实验总结

通过看书学习了解了首次适应算法,循环首次适应算法,最佳分配算法,最坏分配算法的区别,以及他们各自的优缺点,不同的算法给予不同的分配区域,他们各自运行的结果也不同,这一点在代码上可以看出。

个人在代码编写上不是很熟练,所以有部分参考网络上代码,做了大量的提前练习。

以后还需要多加练习代码编程。

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1