操作系统存储管理动态分区分配及回收算法附源码Word下载.docx

上传人:b****3 文档编号:14408782 上传时间:2022-10-22 格式:DOCX 页数:15 大小:141.57KB
下载 相关 举报
操作系统存储管理动态分区分配及回收算法附源码Word下载.docx_第1页
第1页 / 共15页
操作系统存储管理动态分区分配及回收算法附源码Word下载.docx_第2页
第2页 / 共15页
操作系统存储管理动态分区分配及回收算法附源码Word下载.docx_第3页
第3页 / 共15页
操作系统存储管理动态分区分配及回收算法附源码Word下载.docx_第4页
第4页 / 共15页
操作系统存储管理动态分区分配及回收算法附源码Word下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

操作系统存储管理动态分区分配及回收算法附源码Word下载.docx

《操作系统存储管理动态分区分配及回收算法附源码Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统存储管理动态分区分配及回收算法附源码Word下载.docx(15页珍藏版)》请在冰豆网上搜索。

操作系统存储管理动态分区分配及回收算法附源码Word下载.docx

(2)size——分区大小

(3)next——指向下一个分区的指针

2、定义3个指向node结构的指针变量:

(1)head1——空闲区队列首指针

(2)back1——指向释放区node结构的指针

(3)assign——指向申请的存分区node结构的指针

3、定义1个整形变量:

free——用户申请存储区的大小(由用户键入)

(二)过程

1、定义check过程,用于检查指定的释放块(由用户键入)的合法性

2、定义assignment1过程,实现FirstFitAlgorithm

3、定义assignment2过程,实现BestFitAlgorithm

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

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

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

(三)执行

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

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

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

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

首址和大小。

实验代码

Main.cpp

#include<

stdio.h>

stdlib.h>

string.h>

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->

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

当前位置:首页 > PPT模板 > 艺术创意

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

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