动态分区分配方式首次适应算法Word格式文档下载.docx
《动态分区分配方式首次适应算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态分区分配方式首次适应算法Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
#defineERROR0//出错
#defineMAX_length640//最大内存空间为640KB
typedefintStatus;
typedefstructfreearea//定义一个空闲区说明表结构
{
intID;
longsize;
longaddress;
intstate;
}ElemType;
typedefstructDuLNode//doublelinkedlist
{
ElemTypedata;
structDuLNode*prior;
//前趋指针
structDuLNode*next;
//后继指针
}DuLNode,*DuLinkList;
DuLinkListblock_first;
//头结点
DuLinkListblock_last;
//尾结点
Statusalloc();
//内存分配
Statusfree(int);
//内存回收
StatusFirst_fit(int,int);
//首次适应算法
voidshow();
//查看分配
StatusInitblock();
//开创空间表
StatusInitblock()//开创带头结点的内存空间链表
block_first=(DuLinkList)malloc(sizeof(DuLNode));
block_last=(DuLinkList)malloc(sizeof(DuLNode));
block_first->
prior=NULL;
next=block_last;
block_last->
prior=block_first;
next=NULL;
data.address=0;
data.size=MAX_length;
data.ID=0;
data.state=Free;
returnOK;
}
//-----------------------分配主存-------------------------
Statusalloc()
intID,request;
cout<
<
"
请输入作业(分区号):
;
cin>
>
ID;
请输入需要分配的主存大小(单位:
KB):
request;
if(request<
0||request==0)
{
cout<
分配大小不合适,请重试!
endl;
returnERROR;
}
if(First_fit(ID,request)==OK)
分配成功!
else
内存不足,分配失败!
//------------------首次适应算法-----------------------
StatusFirst_fit(intID,intrequest)//传入作业名及申请量
//为申请作业开辟新空间且初始化
DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));
temp->
data.ID=ID;
data.size=request;
data.state=Busy;
DuLNode*p=block_first->
next;
while(p)
if(p->
data.state==Free&
&
p->
data.size==request)
{
//有大小恰好合适的空闲块
p->
returnOK;
break;
}
data.size>
request)
//有空闲块能满足需求且有剩余
temp->
prior=p->
prior;
next=p;
data.address=p->
data.address;
prior->
next=temp;
prior=temp;
data.address=temp->
data.address+temp->
data.size;
data.size-=request;
p=p->
returnERROR;
//-----------------------主存回收--------------------
Statusfree(intID)
DuLNode*p=block_first;
data.ID==ID)
data.ID=Free;
if(p->
data.state==Free)//与前面的空闲块相连
{
p->
data.size+=p->
next=p->
next->
}
data.state==Free)//与后面的空闲块相连
if(p->
next==NULL)p->
else{
prior=p;
分区:
ID<
回收成功"
//
//---------------显示主存分配情况------------------
voidshow()
++++++++++++++++++++++++++++++++++++++++++++\n"
+++++主存分配情况++++++\n"
分区号:
data.ID==Free)
cout<
Free"
else
p->
data.ID<
起始地址:
分区大小:
data.size<
KB"
状态:
data.state==Free)
空闲"
已分配"
//-----------------------主函数---------------------------
voidmain()
Initblock();
intchoice;
inti;
for(i=0;
i++)
{cout<
++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"
+++++++++++++++动态分区分配方式的模拟一+++++++++++++++++\n"
++++++++++++++++++++首次适应算法++++++++++++++++++++++++\n"
++++++++++++++++++++++++++++++++++++++++++++\n"
++1:
分配内存2:
回收内存++\n"
++3:
查看分配0:
退出++\n"
请输入您的操作:
cin>
choice;
if(choice==1)//分配内存
alloc();
elseif(choice==2)//内存回收
{intID;
请输入您要释放的分区号:
free(ID);
elseif(choice==3)//显示主存
show();
elseif(choice==0)//退出
else//输入操作有误
输入有误,请重试!
continue;
四、案例测试
初始空闲区
作业1进入空闲区后的状态
作业2进入空闲区后的状态
作业3进入空闲区后的状态
作业4进入空闲区后的状态
100k
20K
1K
50k
14k
60k
0k
18k
180k
45k