动态分区分配方式首次适应算法Word格式文档下载.docx

上传人:b****5 文档编号:19871800 上传时间:2023-01-11 格式:DOCX 页数:8 大小:16.27KB
下载 相关 举报
动态分区分配方式首次适应算法Word格式文档下载.docx_第1页
第1页 / 共8页
动态分区分配方式首次适应算法Word格式文档下载.docx_第2页
第2页 / 共8页
动态分区分配方式首次适应算法Word格式文档下载.docx_第3页
第3页 / 共8页
动态分区分配方式首次适应算法Word格式文档下载.docx_第4页
第4页 / 共8页
动态分区分配方式首次适应算法Word格式文档下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

动态分区分配方式首次适应算法Word格式文档下载.docx

《动态分区分配方式首次适应算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态分区分配方式首次适应算法Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。

动态分区分配方式首次适应算法Word格式文档下载.docx

#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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1