教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 初中教育 >

动态分区分配方式的模拟实验报告模板

来源:网络收集 时间:2026-05-24
导读: 华北电力大学 实 验 报 告 实验名称 课程名称 专业班级:通信09K2 学生姓名: 宫旭飞 学 号: 091903010107 成 绩: 指导教师: 张铁峰 实验日期: 2011.10.28 华 北 电 力 大 学 实 验 报 告 一﹑实验目的:了解动态分区分配方式中使用的数据结构和分配算法

华北电力大学

实 验 报 告

实验名称

课程名称

专业班级:通信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字,全部文档内容请下载后查看。喜欢就下载吧 ……

动态分区分配方式的模拟实验报告模板.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/47782.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)