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

上传人:b****6 文档编号:20934699 上传时间:2023-01-26 格式:DOCX 页数:13 大小:35.49KB
下载 相关 举报
操作系统实验二存储管理动态分区分配及回收算法文档格式.docx_第1页
第1页 / 共13页
操作系统实验二存储管理动态分区分配及回收算法文档格式.docx_第2页
第2页 / 共13页
操作系统实验二存储管理动态分区分配及回收算法文档格式.docx_第3页
第3页 / 共13页
操作系统实验二存储管理动态分区分配及回收算法文档格式.docx_第4页
第4页 / 共13页
操作系统实验二存储管理动态分区分配及回收算法文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

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

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

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

的合法性

过程,过程,过程,过程,

实现实现实现实现

FirstFitAlgorithmBestFitAlgorithmFirstFitAlgorithmBestFitAlgorithm

的回收算法的回收算法

print过程,打印空闲区队列

(3)执行

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

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

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

分配时要求输入申请区的大小,

首址和大小。

(4)输出

要求每执行一次,输出一次空闲区队列情况,内容包括:

编号首址终址大小

2.主要流程和源代码实验二源代码

回收时要求输入释放区的

 

#include<

stdio.h>

#include<

stdlib.h>

string.h>

#defineMAX_SIZE32767typedefstructnode{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;

elsehead=head2;

p=head->

next;

while((p!

=NULL)&

&

check)

if(((add<

p->

adr)&

(add+siz>

adr))||((add>

=p->

(add<

adr+p->

size)))check=0;

elsep=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)

adr=-1;

}

else

if(after->

size==req)

before->

next=after->

ass->

adr=after->

adr;

{after->

size-=req;

after->

adr+=req;

returnass;

voidacceptment1(intaddress,intsiz,intrd){

Node*before,*after;

intinsert=0;

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

back1->

adr=address;

back1->

size=siz;

id=rd;

while(!

insert&

after)

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

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

adr<

=after->

(back1->

adr>

=before->

adr))){

next=back1;

next=after;

insert=1;

if(insert)

{if(back1->

adr==before->

adr+before->

size)

{//和前边分区合并before->

size+=back1->

size;

next=back1->

free(back1);

elseif(after&

adr+back1->

size==after->

adr)

{//和后边分区合并back1->

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

while(after->

after=after->

q=after;

before->

adr=q->

q->

q->

after=head2->

next=q;

while((after->

size)<

(q->

size))

return(ass);

voidacceptment2(intaddress,intsiz,intrd)

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

back2->

if(head2->

next==NULL)

{//空闲队列为空

next=back2;

size=back2->

{//空闲队列不为空

while(after)

if(back2->

adr==after->

adr+after->

{//和前边空闲分区合并before->

size+=back2->

back2=after;

{if(after->

adr==back2->

adr+back2->

size){//和后边空闲区合并before->

back2->

}before=head2;

insert)

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

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

size>

size)&

(before->

size))){

break;

\t

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

\n"

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

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

if(choice=='

||choice=='

)p=head1->

elsep=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);

p=p->

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

charchose;

intch,num,r,add,rd;

while

(1)

system("

cls"

选择最先适应算法请输入printf("

请输入你的选择:

"

scanf("

%c"

&

chose);

if(chose=='

e'

||chose=='

E'

)exit(0);

F,选择最佳适应算法请输入B,退出程序请输入

E\n\n"

{system("

while

(1){if(chose=='

)printf("

最先适应算法(First-Fit)模拟:

if(chose=='

b'

B'

最佳适应算法(Best-Fit)模拟:

printf("

1.分配内存,2.回收内存,3.查看内存,4.返回\n\n"

scanf("

%d"

ch);

fflush(stdin);

switch(ch)

case1:

输入申请的分区大小:

"

r);

assign=assignment1(num,r);

assign=assignment2(num,r);

if(assign->

adr==-1)

分配内存失败!

分配成功!

分配的内存的首址为break;

case2:

:

%d\n"

assign->

adr);

scanf("

add);

rd);

printf(”输入释放的内存的首址

printf("

输入释放的内存的大小

输入释放的内存的编号

if(check(add,r,chose))

f||chose=='

)acceptment1(add,r,rd);

acceptment2(add,r,rd);

case3:

print(chose);

case4:

menu();

voidmain()//主函数

init();

四、实验结果

卷配jfeSi分配药內存的首址為k先适应蔓法CFlrs*nt>

tS;

^J;

-:

令配內存眾-叵收內存―宜右

•:

扌酉已内存尹花叵収內存二・云右內存#返回

茴y耒号垮lr育+聲F2勺勺勺•己rt:

p&

p自丄「31入慕舜舌_配*AAA先井

1-內

终址

339y

请喻入你的览择泊

1:

-分配内存窪•回收内存,囂沓着内存.4-返回

40存2楓知■-看址拟查酗百檯J_U灯”7■••存齐择区配%的的—算存你霍应内入®

配奧配佳分

■回t>

孚址杏翟Fi栩首-Rmt-如2勺勺好JY-s择存存富呂的囱黑最弟存你常放应内入释簷适配奧入入隹分

最1.

空闲区臥列的情揽为,编号首土止

24UU

Q4400

H佳适应宴法<

Be3t-Plt>

1ft拟2

-分配内存,2.[11收内存亠書看内存沁丿反冋

大小

五、实验总结

通过这次课程设计我练习了用C语言写系统软件,对操作系统中可变分区存储管理有了更深刻的了解。

在写程序的时候也遇到了一些困难。

比如在设计数据结构时特别犹豫,总

想找一个很合适的。

但是,后来才知道,关键要多尝试,而空想是没有用的。

最后我证实了自己的设计的合理性。

还有为了使程序更健壮,在网上下载了几个代码,进行调试,运行、查看结果。

看懂代码和结果后,这次实验也算是成功的一大半了。

总之这次实验还是让我收

获很大,让我在书本上的知识能够运用到实际当中。

这种学以致用的感觉才是最好的。

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

当前位置:首页 > 医药卫生 > 中医中药

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

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