操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx

上传人:b****3 文档编号:7138975 上传时间:2023-05-08 格式:DOCX 页数:17 大小:141.40KB
下载 相关 举报
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第1页
第1页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第2页
第2页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第3页
第3页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第4页
第4页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第5页
第5页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第6页
第6页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第7页
第7页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第8页
第8页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第9页
第9页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第10页
第10页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第11页
第11页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第12页
第12页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第13页
第13页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第14页
第14页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第15页
第15页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第16页
第16页 / 共17页
操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx

《操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。

操作系统存储管理动态分区分配及回收算法Word格式文档下载.docx

4、定义acceptment1过程,实现FirstFitAlgorithm的回收算法

5、定义acceptment2过程,实现BestFitAlgorithm的回收算法

6、定义print过程,打印空闲区队列

(三)执行

程序首先申请一整块空闲区,其首址为0,大小为32767;

然后,提示用户使用哪种分

配算法,再提示是分配还是回收;

分配时要求输入申请区的大小,回收时要求输入释放区的

首址和大小。

实验代码

#include<

>

iostream>

usingnamespacestd;

#defineMAX_SIZE32767

typedefstructnode

{

intid;

intadr;

intsize;

structnode*next;

}Node;

Node*head1,*head2,*back1,*back2,*assign;

intrequest;

intcheck(intadd,intsiz,charc)

Node*p,*head;

intcheck=1;

if(add<

0||siz<

0)

check=0;

/*地址和大小不能为负*/

if(c=='

f'

||c=='

F'

head=head1;

else

head=head2;

p=head->

next;

while((p!

=NULL)&

&

check)

if(((add<

p->

adr)&

(add+siz>

adr))||((add>

=p->

(add<

adr+p->

size)))

check=0;

else

p=p->

if(check==0)

printf("

\t输入释放区地址或大小有错误!

\n"

);

returncheck;

}

voidinit()

Node*p;

head1=(Node*)malloc(sizeof(Node));

head2=(Node*)malloc(sizeof(Node));

p=(Node*)malloc(sizeof(Node));

head1->

next=p;

head2->

p->

size=MAX_SIZE;

adr=0;

next=NULL;

id=0;

Node*assignment1(intnum,intreq)

Node*before,*after,*ass;

ass=(Node*)malloc(sizeof(Node));

before=head1;

after=head1->

ass->

id=num;

size=req;

while(after->

size<

req)

{

before=before->

after=after->

}

if(after==NULL)

ass->

adr=-1;

if(after->

size==req)

{

before->

next=after->

ass->

adr=after->

adr;

}

after->

size-=req;

adr+=req;

returnass;

voidacceptment1(intaddress,intsiz,intrd)

Node*before,*after;

intinsert=0;

back1=(Node*)malloc(sizeof(Node));

back1->

adr=address;

size=siz;

id=rd;

while(!

insert&

after)

{//将要被回收的分区插入空闲区(按首址大小从小到大插入)

if((after==NULL)||((back1->

adr<

=after->

(back1->

adr>

=before->

adr)))

next=back1;

back1->

next=after;

insert=1;

before=before->

after=after->

if(insert)

if(back1->

adr==before->

adr+before->

size)

{//和前边分区合并

size+=back1->

size;

next=back1->

free(back1);

elseif(after&

back1->

adr+back1->

size==after->

adr)

{//和后边分区合并

size+=after->

id=after->

id;

free(after);

after=back1;

\t首先分配算法回收内存成功!

\t首先分配算法回收内存失败!

Node*assignment2(intnum,intreq)

Node*before,*after,*ass,*q;

q=(Node*)malloc(sizeof(Node));

before=head2;

after=head2->

q=after;

adr=q->

q->

before=head2;

after=head2->

if(after==NULL)

{

before->

next=q;

q->

}

else

while((after->

size)<

(q->

size))

{

before=before->

after=after->

}

return(ass);

voidacceptment2(intaddress,intsiz,intrd)

back2=(Node*)malloc(sizeof(Node));

back2->

if(head2->

next==NULL)

{//空闲队列为空

head2->

next=back2;

size=back2->

{//空闲队列不为空

while(after)

if(back2->

adr==after->

adr+after->

{//和前边空闲分区合并

after->

size+=back2->

back2=after;

before=before->

after=after->

before=head2;

after=head2->

if(after->

adr==back2->

adr+back2->

{//和后边空闲区合并

back2->

while(!

insert)

{//将被回收的块插入到恰当的位置(按分区大小从小到大)

if(after==NULL||((after->

size>

back2->

size)&

(before->

insert=1;

break;

\t最佳适应算法回收内存成功!

\t最佳适应算法回收内存失败!

voidprint(charchoice)//输出空闲区队列信息

if(choice=='

||choice=='

p=head1->

p=head2->

if(p)

\n空闲区队列的情况为:

\t编号\t首址\t终址\t大小\n"

while(p)

printf("

\t%d\t%d\t%d\t%d\n"

p->

id,p->

adr,p->

size-1,p->

size);

voidmenu()//菜单及主要过程

charchose;

intch,num=0,r,add,rd;

while

(1)

system("

cls"

-------存储管理动态分区分配及回收算法-------\n"

F最先适应算法\n"

B最佳适应算法\n"

E退出程序\n"

----------------------------------------------\n"

请选择算法:

"

cin>

chose;

//scanf("

%c"

&

chose);

if(chose=='

e'

||chose=='

E'

exit(0);

system("

while

(1)

if(chose=='

printf("

最先适应算法:

b'

B'

最佳适应算法:

printf("

1分配内存\n"

2回收内存\n"

3查看内存\n"

4返回\n"

----------------------------------------------\n\n"

请选择:

scanf("

%d"

ch);

fflush(stdin);

switch(ch)

case1:

输入申请的分区大小:

scanf("

r);

if(chose=='

assign=assignment1(num,r);

else

assign=assignment2(num,r);

if(assign->

adr==-1)

{

printf("

分配内存失败!

}

分配成功!

分配的内存的首址为:

%d\n"

assign->

adr);

break;

case2:

输入释放的内存的首址:

add);

输入释放的内存的大小:

输入释放的内存的编号:

rd);

if(check(add,r,chose))

if(chose=='

acceptment1(add,r,rd);

else

acceptment2(add,r,rd);

case3:

print(chose);

break;

case4:

menu();

voidmain()//主函数

init();

menu();

四、实验结果

五、实验总结

通过这次实验我练习了存储管理动态分区分配及回收算法,对操作系统中动态可变分区存储管理有了更深刻的了解。

刚开始编程时并没有什么思路,查阅相关书籍,浏览网上的论坛后,才对这次实验有了编程思路,在编程中总会遇到各种意想不到问题,这些问题一定要解决。

在解决问题的同时,自己的编程能力也在提高。

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

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2