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