实验五动态分区分配方式内存管理模拟

上传人:公**** 文档编号:424249502 上传时间:2023-12-07 格式:DOC 页数:35 大小:1.40MB
返回 下载 相关 举报
实验五动态分区分配方式内存管理模拟_第1页
第1页 / 共35页
实验五动态分区分配方式内存管理模拟_第2页
第2页 / 共35页
实验五动态分区分配方式内存管理模拟_第3页
第3页 / 共35页
实验五动态分区分配方式内存管理模拟_第4页
第4页 / 共35页
实验五动态分区分配方式内存管理模拟_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《实验五动态分区分配方式内存管理模拟》由会员分享,可在线阅读,更多相关《实验五动态分区分配方式内存管理模拟(35页珍藏版)》请在金锄头文库上搜索。

1、20142015学年 第一学期专 业 计算机科学与技术 班 级 专升本 学 号 姓 名 日 期 2014-12-5 实验题 目实验五 动态分区分配方式内存管理模拟实验目的1、 掌握连续分配方式内存管理理论;2、 掌握动态分区分配方式内存管理理论;实验理论基础动态分区分配:根据进程的实际需要,动态地创建分区为之分配内存空间,在实现动态分区分配时,将涉及分区分配中所使用的数据结构,分区分配算法和分区的分配与回收操作等问题。1) 分区分配中的数据结构 空闲分区表:一个数据表,用于记录每个空闲块的情况,如起始地址、大小、使用情况等; 空闲分区链表:把所有的空闲分区链接成一个链表,便于内存空间查看与分配

2、回收。2) 分配算法 首次适应法:空闲分区按首地址递增次序组织,每次查找时从链首出发,寻找满足要求的内存块。 循环首次适应算法:空闲分区按首地址递增次序组织,每次从上次查找的下一个空闲块开始查找,直到找到满足要求的内存块。 最佳适应法:空闲分区按空闲分区大小址递增次序组织,每次查找时从链首出发,寻找满足要求的最小内存块进行分配。 最坏适应法:空闲分区按空闲分区大小递减次序组织,每次查找时直接判断最大空闲分区是否满足要求。3) 内存分配过程利用分配算法找到满足要求的内存块,设请求的内存大小为size: 若找到的空闲分区的大小等于size,完全分配; 若找到的空闲分区大小大于size,且一分为二后

3、,剩余大小小于1K,则不再分割,作为整体进行分配;否则一分为二,剩余部分仍然作为空闲分区存在; 若无满足要求空闲分区,则分配失败4) 内存回收根据释放区首址和大小,查找空闲分区表/链表,判断是否有相邻的空闲分区存在: 释放区与前空闲区相邻:将释放区与前空闲区合并为一个空闲区。其首址仍为前空闲区首址,大小为释放区大小与空闲区大小之和。 释放区与前后两个空闲区相邻:将这三个区合为一个空闲区,其首址为前空闲区首址,大小为这三个区大小之和,并取消原后空闲区表目。 释放区与后空闲区相邻:则把释放区合并到后空闲,首地址为释放区首地址,大小为二者大小之和。 释放区不与任何空闲区相邻:将释放区作为一个空闲区,

4、将其大小和首址插入到空闲区表的适当位置。实验内容和步骤1、要求编写一个动态分区分配管理程序实现一块模拟内存空间的管理,包括内存分配与回收功能。具体要求完成功能:1) 模拟实现640K内存空间的管理2) 设计内存分配结构,记录内存使用情况3) 设计内存分配算法(首次适应法、最佳适应法两种算法)4) 设计内存回收算法(考虑相邻空间的合并)5) 可动态显示内存分区状况 以下提供了该实例的部分源代码,要求同学们根据理论基础部分内容分析该源代码,并将缺失的程序代码补充完整,然后调试这段程序,最终按要求给出相应的结论。/*/* 动态内存分区方式的模拟 */*#include#include#define

5、Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define MAX_length 640 /最大内存空间为640KBtypedef int Status;typedef struct freearea/定义一个空闲区说明表结构int ID; /分区号long size; /分区大小long address; /分区地址int state; /状态ElemType;/- 线性表的双向链表存储结构 -typedef struct DuLNode /double linked listElemType data

6、;struct DuLNode *prior; /前趋指针struct DuLNode *next; /后继指针DuLNode,*DuLinkList;DuLinkList block_first; /头结点DuLinkList block_last; /尾结点Status alloc(int);/内存分配Status free(int); /内存回收Status First_fit(int,int);/首次适应算法Status Best_fit(int,int); /最佳适应算法void show();/查看分配Status Initblock();/开创空间表Status Initbloc

7、k()/开创带头结点的内存空间链表block_first=(DuLinkList)malloc(sizeof(DuLNode);block_last=(DuLinkList)malloc(sizeof(DuLNode);block_first-prior=NULL;block_first-next=block_last;block_first-data.state=3;block_last-prior=block_first;block_last-next=NULL;block_last-data.address=0;block_last-data.size=MAX_length;block_

8、last-data.ID=0;block_last-data.state=Free;return OK;/- 分 配 主 存 -Status alloc(int ch)int ID,request;coutID;coutrequest;if(request0 |request=0)cout分配大小不合适,请重试!endl;return ERROR;if(ch=2) /选择最佳适应算法if(Best_fit(ID,request)=OK) cout分配成功!endl;else cout内存不足,分配失败!endl;return OK;else /默认首次适应算法if(First_fit(ID,r

9、equest)=OK) cout分配成功!endl;else cout内存不足,分配失败!next;/请在此处添加为作业申请新空间且初始化的代码/请在此处完成首次适应算法的代码,分两种情况:有大小恰好合适的空闲块和有空闲块能满足需求且有剩余。 注意函数返回值。/- 最佳适应算法 -Status Best_fit(int ID,int request)/请在此处添加为作业申请新空间且初始化的代码DuLNode *p=block_first-next;DuLNode *q=NULL; /记录最佳插入位置/请在此处完成最佳适应算法的代码,重点:要查找到最小剩余空间的分区,即最佳插入位置if(q=NU

10、LL) return ERROR;/没有找到空闲块else/请插入找到了最佳位置并实现内存分配的代码!/- 主 存 回 收 -Status free(int ID)DuLNode *p=block_first;while(p)if(p-data.ID=ID)p-data.state=Free;p-data.ID=Free;cout内存块找到,准备回收!endl;if(p=block_last) cout内存块为最后一块!next;cout回收成功!endl;return OK;/- 显示主存分配情况 -void show()cout+n;cout+ 主 存 分 配 情 况 +n;coutnext;while(p)coutdata.ID=Free) coutFreeendl;else coutdata.IDendl;cout起始地址:data.addressendl;cout分区大小:data.size KBendl;coutdata.state=Free) cout空 闲endl;else cout已分配endl;coutnext;/- 主 函 数-void main()int ch;/算法选择标记cout

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 销售管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号