动态分区分配方式的模拟实验报告模板
华北电力大学
实 验 报 告
实验名称
课程名称
专业班级:通信09K2 学生姓名: 宫旭飞
学 号: 091903010107 成 绩:
指导教师: 张铁峰 实验日期: 2011.10.28
华 北 电 力 大 学 实 验 报 告
一﹑实验目的:了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储 管理方式及其实现过程的理解。
二﹑实验内容:(1)用 C 语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程 alloc()和 回收过程 free()。其中,空闲分区通过分区链来管理;在进行内存分配时,系统优先使用 空闲区低端的空间。 (2)假设初始状态下,可用内存空间为 640K,并有下列请求序列: ◎作业 1 申请 130KB。 ◎作业 2 申请 60KB。 ◎作业 3 申请 100KB。 ◎作业 2 释放 60KB。 ◎作业 4 申请 200KB。 ◎作业 3 释放 100KB。 ◎作业 1 释放 130KB。 ◎作业 5 申请 140KB。 ◎作业 6 申请 60KB。 ◎作业 7 申请 50KB。 ◎作业 6 释放 60KB。 请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后 显示出空闲内存分区链的情况。
四﹑设计思路和方法:首次适应算法(First-fit) 首次适应算法(First-fit):当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的 可用块。只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;如果该空闲空间与所 需空间大小一样,则从空闲表中取消该项;如果还有剩余,则余下的部分仍留在空闲表中,但应修改 分区大小和分区始址。 最佳适应算法(Best-fit):当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得 最佳适应算法(Best-fit): ): 剩余块是最小的。然后把它分配出去,若大小恰好合适,则直按分配;若有剩余块,则仍保留该余下 的空闲分区,并修改分区大小的起始地址。 内存回收: 内存回收:将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空 闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改 分区大小及起始地址。
华 北 电 力 大 学 实 验 报 告
五﹑主要数据结构和算法: 主要数据结构和算法
六﹑程序代码和输出1 程序代码如下//*************************************************************** //******** 动态分区分配方式的模拟 ********* //*************************************************************** #include<iostream.h> #include<stdlib.h> #define Free 0 //空闲状态 #define Busy 1 //已用状态 #d
efine OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 640 //最大内存空间为 640KB typedef int Status; typedef struct freearea//定义一个空闲区说明表结构 { int ID; //分区号 long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; //---------- 线性表的双向链表存储结构 -----------typedef struct DuLNode //double linked list { ElemType data; 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();//开创空间表3
华 北 电 力 大 学 实 验 报 告
Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first->prior=NULL; block_first->next=block_last; block_last->prior=block_first; block_last->next=NULL; block_last->data.address=0; block_last->data.size=MAX_length; block_last->data.ID=0; block_last->data.state=Free; return OK; } //----------------------- 分 配 主 存 ------------------------Status alloc(int ch) { int ID,request; cout<<"请输入作业(分区号):"; cin>>ID; cout<<"请输入需要分配的主存大小(单位:KB):"; cin>>request; if(request<0 ||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,request)==OK) cout<<"分配成功!"<<endl; else cout<<"内存不足,分配失败!"<<endl; return OK; } } //------------------ 首次适应算法 ----------------------Status First_fit(int ID,int request)//传入作业名及申请量4
华 北 电 力 大 学 实 验 报 告{ //为申请作业开辟新空间且初始化 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode)); temp->data.ID=ID; temp->data.size=request; temp->data.state=Busy; DuLNode *p=block_first->next; while(p) { if(p->data.state==Free && p->data.size==request) {//有大小恰好合适的空闲块 p->data.state=Busy; p->data.ID=ID; return OK; break; } if(p->data.state==Free && p->data.size>request) {//有空闲块能满足需求且有剩余" 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-=request; return OK; break; } p=p->next; } return ERROR; } //-------------------- 最佳适应算法 -----------------------Status Best_fit(int ID,int request) { int ch; //记录最小剩余空间 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode)); temp->data.ID=ID; temp->data.size=request; temp->data.state=Busy; DuLNode *
p=block_first->next; DuLNode *q=NULL; //记录最佳插入位置 while(p) //初始化最小空间和最佳位置 {5
华 北 电 力 大 学 实 验 报 告if(p->data.state==Free && (p->data.size>request || p->data.size==request) ) { q=p; ch=p->data.size-request; break; } p=p->next; } while(p) { if(p->data.state==Free && p->data.size==request) {//空闲块大小恰好合适 p->data.ID=ID; p->data.state=Busy; return OK; break; } if(p->data.state==Free && p->data.size>request) {//空闲块大于分配需求 if(p->data.size-request<ch)//剩余空间比初值还小 { ch=p->data.size-request;//更新剩余最小值 q=p;//更新最佳位置指向 } } p=p->next; } if(q==NULL) return ERROR;//没有找到空闲块 else {//找到了最佳位置并实现分配 temp->prior=q->prior; temp->next=q; …… 此处隐藏:4263字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)




