_/*首次适应算法
参数:request表示申请存储大小(KB)
*/
Status First_fit(int request)
{ //创建申请存储链表信息块
DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode));
temp->data.size=request;
temp->data.state=Busy;
//p为查找分配存储块
DuLNode *p=block_first->next;
DuLNode *q=NULL;
while(p)
{
if(p->data.state==Free && (p->data.size>=request))
{ //查找空闲分区
if(q==NULL)
q=p;
}
p=p->next;
}
if(q==NULL) return ERROR;
p=block_first->next;
while(p)
{
if(p->data.state==Free && p->data.size==request)
{
//待补全 当前存储块可分配,设置分配标志
} else if(p->data.state==Free && p->data.size>request)
{
//待补全 分割当前存储块 (修改空闲链表,链入新空闲分区块)
}
p=p->next;
}
return OK;
}
二、最佳适应算法
要求:将空闲分区按容量从小到大形成空闲分区链。
算法过程:将能满足要求、又是最小的空闲分区分配
/*最佳适应算法
参数:request表示申请存储大小(KB)
*/
Status Best_fit(int request)
{
DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode));
temp->data.size=request;
temp->data.state=Busy;
DuLNode *p=block_first->next;
DuLNode *q=NULL;
while(p)
{
if(p->data.state==Free && (p->data.size>=request))
{
//查找最小分区
if(q==NULL)
{ //待补全
}
else if(q->data.size > p->data.size)
{ //待补全
q=p;
}
}
p=p->next;
}
if(q==NULL) return ERROR;
else if(q->data.size==request)
{
//待补全 如果当前空闲块等于申请大小直接分配
return OK;
} else
{
//待补全 如果空闲块大于申请大小分割当前块,添加分配项
return OK;
}
}
三、最坏适应算法
要求:将空闲分区按容量从大到小形成空闲分区链。
算法过程:总是从空闲分区表首开始顺序查找,直到找到第一个能满足其大小要求的空闲分区为止。然后,在按照大小,从该分区化出一块内存 空间分给请求者,余下的空闲分区仍留在空闲分区表中。
/*最坏适应算法
参数:request表示申请存储大小(KB)
*/
Status Worst_fit(int request)
{
DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode));
temp->data.size=request;
temp->data.state=Busy;
DuLNode *p=block_first->next;
DuLNode *q=NULL;
while(p)
{
if(p->data.state==Free && (p->data.size>=request))
{ //查找最大空闲分区
if(q==NULL)
{ //待补全
}
else if(q->data.size < p->data.size)
{
//待补全
}
}
p=p->next;
}
if(q==NULL) return ERROR;
else if(q->data.size==request)
{ //待补全
return OK;
}
else
{ //待补全
return OK;
}
}_