文档介绍:#include<>
#include<>
全局变量
floatminsize=5;
intcount1=0;
intcount2=0;
=1;
free_table[k].address=ads;
4/11
free_table[k].length=len;
}
else//将已做的切割分派撤除
{
free_table[k].address=ads;
free_table[k].length+=len;
}
cout<<"内存分派区已满,分派失败!\n";
return0;
}
}
else
{
cout<<"无法为该作业找到合适分区!\n";
return0;
}
returnprocess_name;
}
intrecycle(intprocess_name)
{
inty=0;
5/11
floatrecycle_address,recycle_length;
inti,j,k;//j栏是下邻安闲区,k栏是上栏安闲区
intx;
在内存分派表中找到要回收的作业
while(y<=n-1&&used_table[y].flag!=process_name)
{y=y+1;}
if(y<=n-1)//找到作业后,将该栏的标志置为‘0’
{
recycle_address=used_table[y].address;
recycle_length=used_table[y].length;
used_table[y].flag=0;
count2++;
}
else//未能找到作业,回收失败
{
cout<<"该作业不存在!\n";
return0;
}
j=k=-1;
i=0;
while(!(i>=m||(k!=-1&&j!=-1)))//改正安闲分区表
6/11
{
if(free_table[i].flag==1)
{if((free_table[i].address+free_table[i].length)==recycle_address)
k=i;//判断是否有上毗邻
if((recycle_address+recycle_length)==free_table[i].address)
j=i;//判断是否有下毗邻
}
i=i+1;
}
归并安闲区
if(k!=-1)//回收区有上毗邻
{
if(j!=-1){//回收区也有下毗邻,和上下领接归并
free_table[k].length+=free_table[j].length+recycle_length;
free_table[j].flag=0;//将第j栏的标记置为‘0’
}
else//不存在下毗邻,和上毗邻归并
free_table[k].length+=recycle_length;
}
elseif(j!=-1)
{//只有下毗邻,和下毗邻归并
7/11
free_table[j].length+=recycle_length;
free_table[j].address=recycle_address;
}
else
{//上下毗邻都没有
x=0;
while(free_table[x].flag!=0)
x=x+1;//在安闲区表中查找一个状态为‘的0’栏目
if(x<=m-1)
{//找到后,在安闲分区中登记回收的内存
free_table[x].address=recycle_address;
free_table[x].length=recycle_length;
free_table[x].