一、实验名称:内存分配与回收
二、实验内容:用首次适应算法实现存储空间的分配,回收作业所占用的存储空间。
三、实验目的:
一个好的计算机系统不仅要有足够的存储容量,较高的存取速度和稳定可靠的存储器,而且能够合理的分配和使用这些主存空间。
当用户提出申请主存空间的要求时,存储管理能够按照一定的策略分析主存的使用情况,找出足够的空间分配给申请者;当作业运行完毕,存储管理要回收作业占用的主存空间。
本实验实现在可变分区存储管理方式下,采用最先适应算法对主存空间进行分配和回收,以加深了解操作系统的存储管理功能。
四、实验过程:
a)基本思想
空闲分区链以地址递增的次序连接。
在分配内存时,从链首开始顺序查找,直至找到一个大小能够满足要求的空闲分区为止;然后再按照作
业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区
仍然留在空闲链中。
若从链首直至链尾都不能找到一个能满足要求的分
区,则此次内存分配失败。
b)主要数据结构
typedef struct FreeLink{
#include <>
#include <>
using namespace std;
typedef struct FreeLink{配内存"<<endl;
cout<<"2.回收内存"<<endl;
cout<<"3.结束操作"<<endl;
cout<<"请输入你的选择:";
cin>>choice;
}while(choice!='1'&&choice!='2'&&choice!='3');
switch(choice){
case '1':allocate(p);print();break;
case '2':huishou(p);print();break;
case '3':clear();return 0;break;
}
}
}
int main(){//主函数
ptr free=(FreeLink *)malloc(sizeof(FreeLink));
top=free;
top->name='*';
top->start=0;
top->size=256;
top->flag=false;
top->prior=NULL;
top->next=NULL;
cout<<endl;
cout<<"************************ 首次适应算法 ************************"<<endl;
cout<<endl;
firstfit();
}
六、实验小结
通过本实验,深刻地理解到了利用可变分区,采用首次适应算法为作业分配内存的过程。
该算法倾向于优先利用内存中低址部分的空闲分区,从而保留了高址部分的大空闲区。
这给为以后的作业分配大的内存空间创造了条件。
其缺点是地低址部分不断被划分,会留下很多难以利用的,很小的空闲区,而每次查找又都是从低地址部分开始,这无疑会增加查找可用的空闲区时的开销。