操作系统实验二存储管理动态分区分配及回收算法文档格式.doc
- 文档编号:13168685
- 上传时间:2022-10-07
- 格式:DOC
- 页数:10
- 大小:229KB
操作系统实验二存储管理动态分区分配及回收算法文档格式.doc
《操作系统实验二存储管理动态分区分配及回收算法文档格式.doc》由会员分享,可在线阅读,更多相关《操作系统实验二存储管理动态分区分配及回收算法文档格式.doc(10页珍藏版)》请在冰豆网上搜索。
(二)过程
1、定义check过程,用于检查指定的释放块(由用户键入)的合法性
2、定义assignment1过程,实现FirstFitAlgorithm
3、定义assignment2过程,实现BestFitAlgorithm
4、定义acceptment1过程,实现FirstFitAlgorithm的回收算法
5、定义acceptment2过程,实现BestFitAlgorithm的回收算法
6、定义print过程,打印空闲区队列
(三)执行
程序首先申请一整块空闲区,其首址为0,大小为32767;
然后,提示用户使用哪种分配算法,再提示是分配还是回收;
分配时要求输入申请区的大小,回收时要求输入释放区的首址和大小。
(四)输出
要求每执行一次,输出一次空闲区队列情况,内容包括:
编号首址终址大小
2.主要流程和源代码
实验二源代码
#include<
stdio.h>
stdlib.h>
string.h>
#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->
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;
}
if(after->
size==req)
{
before->
next=after->
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;
next=after;
insert=1;
if(insert)
if(back1->
adr==before->
adr+before->
size)
{//和前边分区合并
size+=back1->
size;
next=back1->
free(back1);
elseif(after&
adr+back1->
size==after->
adr)
{//和后边分区合并
size+=after->
id=after->
id;
free(after);
after=back1;
printf("
\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->
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->
{//和前边空闲分区合并
size+=back2->
back2=after;
adr==back2->
adr+back2->
{//和后边空闲区合并
insert)
{//将被回收的块插入到恰当的位置(按分区大小从小到大)
if(after==NULL||((after->
size>
size)&
(before->
si
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 存储 管理 动态 分区 分配 回收 算法