操作系统之内存分配与回收.docx
- 文档编号:466964
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:12
- 大小:410.99KB
操作系统之内存分配与回收.docx
《操作系统之内存分配与回收.docx》由会员分享,可在线阅读,更多相关《操作系统之内存分配与回收.docx(12页珍藏版)》请在冰豆网上搜索。
操作系统之内存分配与回收
操作系统实验
内存的分配与回收
实验报告
1、实验题目:
内存的分配与回收
2、实验内容:
利用可变分区的首次适应算法,模拟内存的分配与回收。
3、实验目的:
掌握可变分区首次适应算法的原理以及其编程实现。
4、实验过程:
1、基本思想:
可变分区分配是根据进程的实际需求,动态地为之分配内存空间。
首次适应算法要求空闲空间链以地址递增的次序链接。
进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。
分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。
内存的回收需要考虑四种情况:
⑴回收分区前后两个分区都空闲,则需要和前后两个分区合并;
(2)回收分区只有前一分区空闲,则与前一分区合并;(3)回收分区只有后一分区空闲,则和后一分区合并;(4)回收分区独立,不考虑合并
。
2、主要数据结构:
structFreeArea{链结点包含的数据:
分区号、大小、起址、标记
intID;
intsize;
longaddress;
intsign;
};
structNode{双链表结点结构体:
数据区、前向指针、后继指针
FreeAreadata;
structNode*prior;
structNode*next;
}*DLinkList;
3、输入、输出:
输入:
I.内存分配时由键盘输入分区ID和大小;
II.内存回收时由键盘输入需要回收的分区ID;
输出:
输出内存的分配情况(按照地址从低到高)
4、程序流程图:
5、实验结果截屏:
6、源程序代码:
#include
usingnamespacestd;
#defineFree0//空闲状态
#defineBusy1//已用状态
#definePBusy2//碎片已用状态
#defineFINISH1//完成
#defineFINISH21//完成
#defineERROR0//出错
#definememory512//最大内存空间为(单位:
KB)
#definemin10//碎片最小值(单位:
KB)
typedefstructFreeArea//空闲链数据
{
intID;
intsize;
longaddress;
intsign;
};
typedefstructNode//空闲连结构
{
FreeAreadata;
structNode*prior;
structNode*next;
}*DLinkList;
DLinkListhead;//头结点
DLinkListtail;//尾结点
intCreate()//初始化
{
head=(DLinkList)malloc(sizeof(Node));//分配内存
tail=(DLinkList)malloc(sizeof(Node));
head->prior=NULL;
head->next=tail;
tail->prior=head;
tail->next=NULL;
tail->data.address=0;
tail->data.size=memory;
tail->data.ID=0;
tail->data.sign=Free;
returnFINISH;
}
intFirstFit(intID,intrequest)//首次适应算法
{
DLinkListtemp=(DLinkList)malloc(sizeof(Node));//新建作业的结点
temp->data.ID=ID;
temp->data.size=request;
temp->data.sign=Busy;
Node*p=head;//插入指针P
while(p)
{
if(p->data.sign==Free&&p->data.size==request)//剩余大小恰好满足{
p->data.sign=Busy;
p->data.ID=ID;
returnFINISH;
break;
}
elseif(p->data.sign==Free&&p->data.size>request&&(p->data.size-request>min))//满足需求且有剩余且不产生碎片
{
temp->prior=p->prior;
temp->next=p;
temp->data.address=p->data.address;
p->prior->next=temp;
p->prior=temp;
p->data.address=temp->data.address+temp->data.size;
p->data.size=p->data.size-request;
returnFINISH;
break;
}
elseif(p->data.sign==Free&&p->data.size>request&&p->data.size-request<=min)//产生碎片时
{
p->data.sign=PBusy;
p->data.ID=ID;
returnFINISH;
break;
}
p=p->next;//若前面的分区都已分配,P指针后移
}
returnERROR;
}
intAllocate()//主存分配
{
intID,request;
cout<<"请输入作业所在分区号:
";
cin>>ID;
cout<<"请输入分配的主存(单位:
KB):
";
cin>>request;
if(request<0||request==0)
{
cout<<"分配的主存必须是正整数!
"< returnERROR; } if(FirstFit(ID,request)==FINISH) cout<<"分配成功! "< else cout<<"内存不足,分配失败! "< } intRecycle(intID)//回收 { Node*p=head; while(p) { if(p->data.ID==ID) { p->data.sign=Free; //p->data.ID=Free; if((p->prior->data.sign==Free)&&(p->next->data.sign==Free))//与前后的空闲块相连 { p->prior->data.size=p->prior->data.size+p->data.size+p->next->data.size; p->prior->next=p->next->next; if(p->next->next==NULL)//若p->next是最后一个结点 {p->prior->data.ID=Free;p->next=NULL;} else{p->next->next->prior=p->prior;} break; } if(p->prior->data.sign==Free)//与前面的空闲块相连 { p->prior->data.size+=p->data.size; p->prior->next=p->next; p->next->prior=p->prior; break; } if(p->next->data.sign==Free)//与后面的空闲块相连 { p->data.size+=p->next->data.size; if(p->next->next==NULL)//若p->next是最后一个结点 p->next=NULL; else{ p->next->next->prior=p; p->next=p->next->next;} break; } break; } p=p->next; } cout<<"分区: "< returnFINISH; } voidshow()//显示 { cout<<"主存分配情况\n"; Node*p=head->next; while(p) { cout<<"分区号: "; if(p->data.ID==Free) cout<<"Free"< else cout< cout<<"起始地址: "< cout<<"分区大小: "< cout<<"状态: "; if(p->data.sign==Free) cout<<"空闲"< elseif(p->data.sign==PBusy) cout<<"碎片已分配"< else cout<<"已分配"< p=p->next; } cout< } voidmain() { Create(); intchoice; inti; for(i=0;;i++) { cout<<"请输入操作: "; cout<<"1.分配内存2.回收内存3.显示主存0.退出"; cout< cin>>choice; if(choice==1)//分配内存 Allocate(); elseif(choice==2)//内存回收 {intID; cout<<"请输入要释放的分区号: "; cin>>ID; Recycle(ID); } elseif(choice==3)//显示主存 show(); elseif(choice==0)//退出 break; else//非法输入 { cout<<"输入有误! "< continue; } } } WelcomeTo Download! ! ! 欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 之内 分配 回收