内存的分配与回收实验报告

上传人:pu****.1 文档编号:423821979 上传时间:2023-11-05 格式:DOC 页数:13 大小:151.50KB
返回 下载 相关 举报
内存的分配与回收实验报告_第1页
第1页 / 共13页
内存的分配与回收实验报告_第2页
第2页 / 共13页
内存的分配与回收实验报告_第3页
第3页 / 共13页
内存的分配与回收实验报告_第4页
第4页 / 共13页
内存的分配与回收实验报告_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《内存的分配与回收实验报告》由会员分享,可在线阅读,更多相关《内存的分配与回收实验报告(13页珍藏版)》请在金锄头文库上搜索。

1、实验报告专业 网络工程 班级 08102班 学号 01号 姓名 胡双双课程名称操作系统 学年20102011 学期 下课程类别专业必修 限选任选实践实验时间 2010年12 月9 日实验名称实验三:内存分区与回收实验目的和要求全面理解内存分配的三种方法及回收,掌握解决该问题的算法思想。实验软硬件要求Pentium(R) Dual-Core CPU 3.2M内存WINDOWS XP ProfessionalVisual C+6.0实验内容、方法和步骤问题描述:初始化一内存空间,要求用最先适应算法、最优适应算法及最坏适应算法实现动态分配内存,并可进行回收。功能要求:可对内存进行分区,回收及打印,用

2、户可选择最先适应算法、最优适应算法及最坏适应方法三种算法对内存进行分配。实验结果:见截图小结此次实验的难点是内存的回收及动态分配问题,三个分区的算法相对来说简单一点,设计者必须考虑内存回收时,上为空闲区,下为空闲区,上下都为空闲区及上下都不为空闲区四种情况。动态分区的基本思想是先初始化一空闲内存空间为1024,然后动态对其进行分区,分区的过程中可选择是按首次适应算法、最优适应算法或者最坏适应算法进行分配,动态分区过程中,可以边分配边回收。在设计过程中,还要注意一些细节问题,比如在分配内存时,工作名不能重复,否则可能导致打印时混淆重复的内存区,所以,本实验中,用pdname()函数来进行判定是否

3、重名。评定成绩:批阅教师: 年月日 一、问题概述初始化一内存空间,要求可对内存进行分区,回收及打印,用户可选择最先适应算法、最优适应算法及最坏适应方法三种算法对内存进行分配。二、设计流程图(1)首次适应算法(first_fit)流程图开 始比size大的空内存结 束Yi没有超过终值Y待进入的内存进入空内存区将剩下的内存独立为空内存块NN没有找到比要分配的大的内存快,分配失败(2)最优适应算法(best_fit)流程图 开 始查找大于size的空闲空间将其分区号存入id大小存入min空闲区大小小于min将空闲区分割,一部分分配给size,一部分为空闲区 结 束Yi没有超过极值寻找比size大的空

4、闲区YY空闲区空间=申请空间将空闲区直接分配给sizeNNN(3)最坏适应算法(worst-_fit)流程图与最佳适应算法类似(4)内存回收流程图 开 始判断空闲区上下内存情况上为空将上面的空闲区合并,并回收下为空将下面的空闲区合并,并回收上下都为空将上下的空闲区合并,并回收上下都不为空直接将其回收 结 束三、数据定义struct used_tableint ID;/分区号char WorkName;/工作名int WorkSize;/工作空间int address;/开始地址bool state;/状态0表示未分配 1表示已分配J100;void Init();int search();in

5、t pdname(char c);void print();void begin();int first_fit(char c,int i);int best_fit(char c,int i);int worst_fit(char c,int i);void reclaim();int free(char c);四、源程序#include void Init();int search();int pdname(char c);void print();void begin();int first_fit(char c,int i);int best_fit(char c,int i);int

6、 worst_fit(char c,int i);void reclaim();int free(char c);struct used_tableint ID;/分区号char WorkName;/工作名int WorkSize;/工作空间int address;/开始地址bool state;/状态0表示未分配 1表示已分配J100;void Init() /主存表的初始化J0.ID=1; /分区号 J0.address =0;J0.state =0;J0.WorkName =NULL;J0.WorkSize =1024;for(int i=1;i100;i+)Ji.ID =i+1;Ji.

7、state =0;Ji.WorkName =NULL; Ji.address =Ji-1.address +Ji.WorkSize ;int search() /返回空闲空间int sizeAll=1024; /主存总空间int sizeUse=0; /已用空间int sizeKY; /可用工作空间for(int i=0;i100;i+)if(Ji.state=1)sizeUse=sizeUse+Ji.WorkSize ; sizeKY=sizeAll-sizeUse;return sizeKY;/返回空闲空间int pdname(char name) /判断作业名for(int i=0;i1

8、00;i+)if(Ji.WorkName =name)cout输入工作名重复,分配失败!endl;return 0;return 1;void print() /输出函数cout分区号 工作名 开始地址 工作空间 状态endl;for(int i=0;i100;i+)coutJi.ID Ji.WorkName Ji.address Ji.WorkSize Ji.stateendl; if(Ji.state=0&Ji+1.state=0&Ji+2.state=0)break;void begin() char name;int size;int c=1;cout请输入工作名:name;cout请

9、分配空间:size;if(pdname(name)cout请选择要选的算法 1:首次适应算法 2:最佳适应算法:3:最坏适应算法 c;if(c!=1&c!=2&c!=3)c=1;switch(c)case 1:first_fit(name,size);break;case 2:best_fit(name,size);break;case 3:worst_fit(name,size);break;int first_fit(char name,int size) /首次适应算法for(int i=0;i=size&Ji.state=0)int temp=Ji.WorkSize;int sum=J

10、i+1.address ;Ji.WorkSize=size;Ji.WorkName=name;Ji.address=Ji-1.address +Ji-1.WorkSize ;Ji+1.address=Ji.address +Ji.WorkSize ;Ji.state =1;if(tempsize) /将i项分成两项for(int j=100;ji+1;j-)Jj.address =Jj-1.address;Jj.state =Jj-1.state ;Jj.WorkName =Jj-1.WorkName ;Jj.WorkSize =Jj-1.WorkSize ;Ji+2.address =sum

11、;Ji+1.state =0;Ji+1.WorkName =NULL;Ji+1.WorkSize =temp-size;cout成功分配!endl;for(int j=i;j100;j+)if(Jj.state =0&Jj+1.state =0&Jj+2.state =0)/查找以后表 条件为3个连续空闲的空间 则视为以后都空闲Jj.WorkSize =search();/将剩余空间放入j中return 1;if(i=100)cout主存空间已满!endl;return 0;return 0;int best_fit(char name,int size) /最佳适应分配算法/查找一个大于size的空闲空间,将此空间的ID存入id,Worksize存入min int min=1025;int id=-1; for(int i=0;i100;i+)if(Ji.state =0&Ji.WorkSize =size)id=i;min=Ji.WorkSize;cout最佳适应空间的id:id+1空间大小:minendl;/将作业存入Ji项int temp=Jid.WorkSize -size;if(temp=0)/空闲空间大小恰好等于申请空间大小直接存入Ji.WorkName =name;Ji.state =1;el

展开阅读全文
相关资源
相关搜索

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

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