- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验名称: 操作系统动态分配
姓 名: 杨秀龙
学 号: 1107300432
专业班级: 创新实验班111
指导老师: 霍林
实验题目
内存动态分区的分配与回收内存
实验目的
有利于我们更好的了解内存动态分区分配的操作情况,掌握可变分区首次适应算法的原理以及其编程实现。
设计思想
可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回收需要考虑四种情况:
收分区前后两个分区都空闲,则需要和前后两个分区合并;
回收分区只有前一分区空闲,则与前一分区合并;
回收分区只有后一分区空闲,则和后一分区合并;
回收分区独立,不考虑合并
主要数据结构
主要的数据结构有两个:空闲分区表结构和表的链结构。根据空闲分区的作用,空闲分区表结构必须包括(分区号、分区起始地址、分区状态、分区数据大小)。由于采用的是双向链表的结果,所以表的链结构包括(空闲分区表的信息、首指针、尾指针)
结构程序代码如下:
typedef struct Body
{
int ID;
int size;
int address;
int sign;
};
typedef struct Node
{
Body data;
struct Node *prior;
struct Node *next;
}*DLinkList;
流程图
退出
退出
选0
输入有误
3 or0
选择0-3操作
操作界面
开始
选3
显示内存分配
选2
回收内存
选1
分配内存
输入分区号
输入分区号
结束合并后回收合并后回收该分区后一个分区空闲该分区前一个分区空闲合并后回收该分区前后都空闲结束将分区从空闲链移出,并修改相应数据结构整块分配判断是否会有碎片内存不足判断剩余空间是否足够输入分区大小
结束
合并后回收
合并后回收
该分区后一个分区空闲
该分区前一个分区空闲
合并后回收
该分区前后都空闲
结束
将分区从空闲链移出,并修改相应数据结构
整块分配
判断是否会有碎片
内存不足
判断剩余空间是否足够
输入分区大小
运行结果
图(1)主界面
图(1)主界面
图(2)分配3个分区后的分配情况
图(2)分配3个分区后的分配情况
图(3)回收1、3分区后的分配情况
图(3)回收1、3分区后的分配情况
图(4)再次分配4分区后的分配情况
图(4)再次分配4分区后的分配情况
附录:
源代码如下:
#includeiostream.h
#includestdio.h
#define Free 0 //空闲
#define Zhanyong 1 //占用
#define FINISH 1 //完成
#define ERROR 0 //出错
#define memory 512 //最大内存
#define min 10 //碎片值
typedef struct Body
{
int ID;
int size;
int address;
int sign;
};
typedef struct Node
{
Body data;
struct Node *prior;
struct Node *next;
}*DLinkList;
DLinkList head; //头结点
DLinkList tou; //尾结点
int Create()//初始化
{
head=(DLinkList)malloc(sizeof(Node));
tou=(DLinkList)malloc(sizeof(Node));
head-prior=NULL;
head-next=tou;
tou-prior=head;
tou-next=NULL;
tou-data.address=0;
tou-data.size=memory;
tou-data.ID=0;
tou-data.sign=Free;
return FINISH;
}
int FirstFit(int ID,int space)//首次适应算法
{
DLinkList NewNode=(DLinkList)malloc(sizeof(Node));//新建作业的结点
NewNode-data.ID=ID;
NewNode-data.size=space;
NewNode-data.sign=Zhanyong
原创力文档


文档评论(0)