实验项目五 存储管理
实验目的
熟悉内存空闲分区的分配方式;
理解动态分区存储管理方式;
掌握动态分区的分配与回收的过程。
实验内容
使用一个链表来模拟内存存储空间,建立内存块来记录内存分配使用情况,通过随机产生进程及其所需要的内存来模拟真实的进程。通过给进程分配内存及回收来实现对动态分区存储管理方法。
编制程序完成上述内容,内存空间大小为100,进程数为5,每个进程所需空间为随机产生,大小为1~20,对5个进程进行内存分配,要求每次操作结束后都能显示当前的内存分配情况。
源程序及运行结果
源程序:
#include
#include
#include
#define LEN sizeof(MEMORY_BLOCK)
typedef struct MEMORY_BLOCK
{
int name;
int address;
int length;
int flag;
struct MEMORY_BLOCK *next;
}MEMORY_BLOCK;
typedef struct MEMORY_BLOCK MEMORY_BLOCK;
void allocation(MEMORY_BLOCK *Header,int name,int length_p);
void show(MEMORY_BLOCK *Header);
void main()
{
int length_p,i;
int processname;
MEMORY_BLOCK *Header,*t;
Header=(MEMORY_BLOCK*)malloc(LEN);//初始化存储空间
Header->name=-1;
Header->address=0;
Header->length=100;
Header->flag=0;
Header->next=NULL;
srand((int)time(0));
show(Header);
for(i=0;i<5;i++)
{
length_p=rand()%20+1; //随机产生进程所需存储空间,至少为1;
allocation(Header,i,length_p);
show(Header);
}
}
void allocation(MEMORY_BLOCK *Header,int name,int length_p)
{
MEMORY_BLOCK *temp,*t,*tt;
int minsize=2; //不可切割的分区阈值
t=Header;
while(t!=0)
{
if(t->length>length_p&&t->flag==0) break;
t=t->next;
}
if(t->length-length_p>minsize) //分割
{
temp=(MEMORY_BLOCK*)malloc(LEN);
temp->name=-1;
temp->flag=0;
temp->length=t->length-length_p;
tem