首次适应算法实验报告
- 格式:doc
- 大小:25.00 KB
- 文档页数:6
fqlist[i].end=fqlist[i+1].end;
fqlist[i].capactity=fqlist[i].capactity+fqlist[i+1].capactity;
fqlist[i].flag=fqlist[i+1].flag;
for(int j=i+1;j<number-1;j++)
{
fqlist[j]=fqlist[j+1];
}
i=number;
flag++;
}
else{
fqlist[i].end=fqlist[i+1].end;
fqlist[i].capactity=fqlist[i].capactity+fqlist[i+1].capactity;
fqlist[i].flag=fqlist[i+1].flag;
实 验 报 告
系别
班级
学 号
姓 名
时间
地点
计算机科学系
计科1201
2014/12/29
机房 c105
课程名称
计算机操作系统
实验名称
内存管理
实 验 过 程
一.实验目的
1.了解内存管理的功能;
2.掌握进程可变内存管理的几种内存分配与回收算法;
3.掌握可变分区算法中空闲分区的合并方法;
二.实验内容
实现首次适应算法;
for(int j=i+1;j<number-1;j++)
{
fqlist[j]=fqlist[j+1];
}
}
}
}பைடு நூலகம்
}
flag++;
}
return 0;
}
ame,fqlist[i].start,fqlist[i].end,fqlist[i].capactity);
if(fqlist[i].flag==1){
printf("已使用\n");
count++;
}
else if(fqlist[i].flag==3){
printf("尾部\n");
count++;
}else if(fqlist[i].flag==2){
printf("未使用\n");
}else if(fqlist[i].flag==0){
printf("未使用\n");
scanf("%d",&neicun);
printf("内存大小neicun=%d\n",neicun);
fqlist[0].capactity=neicun;
fqlist[0].start=0;
fqlist[0].end=neicun-1;
fqlist[0].flag=3;lag!=1){apactity>size)ame='n';
fqlist[i].start=sum;
fqlist[i].end=sum+size-1;
fqlist[i].capactity=size;
fqlist[i].flag=1;
fqNum++;apactity;
}
}else{apactity;
}
}
if(flag==1)
printf("已为进程%c分配内存区!\n",jname);
}
}
return 0;
}
...\n");
exit(0);
return 0;
}
//主函数
int main(){
init_neicun();//初始化内存大小
menu();
return 0;
}
四.运行截图
五.实验总结
算法要求空闲链已地址递增的次序连接。分配内存时,从链首开始顺序查找,直到找到第一个满足要求的空间并分配给进程,把分配后余下的空间仍然留在链表中。若从链首至链尾都不满足要求,则分配失败。该算法倾向于优先使用低地址的空间,在不断分割中会产生很多空间碎片,并且每次都是从链首开始查找,这无疑增加了开销。
fqlist[i+1].start=sum+size;
fqlist[i+1].end=fqlist[i].end;
fqlist[i+1].capactity=fqlist[i].capactity-size;
fqlist[i+1].flag=fqlist[i].flag;
}
fqlist[i].name=jname;
else
printf("为进程%c分配内存区失败!\n",jname);
return 0;
}
ame==jname){
fqlist[i].name='n';
fqlist[i].flag=2;lag==0||fqlist[i].flag==2){
if(fqlist[i+1].flag!=1){
if(fqlist[i+1].flag==3)
三.实验程序
#include <>
#include <>
#include <iostream>
#define number 100ame='n';
fqlist[i].start=0;
fqlist[i].end=0;
fqlist[i].capactity=0;
fqlist[i].flag=0;
}
printf("请输入内存大小:");