采用首次适应算法的动态分区分配模拟课程设计实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 需求分析
1)本程序要求实现对内存的动态分配与回收的模拟,同时,在内存的分配时还必须使用首次适应算法,最后,还要显示内存块分配和回收后空闲内存分区链的情况。
2)要实现对作业的内存分配,首先要有一个对作业进行创建和分配内存的模块,其中,该模块在分配内存时要使用首次适应算法;要实现对内存的回收,要有一个内存回收的模块,其中,该模块在回收内存时要考虑内存回收的四种情况;最后,还要有一个能显示内存空闲分区链的情况的模块。
2 概要设计
1)首次适应算法的结构如图1:
图1 首次适应算法的结构图
2)数据结构:
struct Fq
{
int size,o,no;
Fq *before,*next;
};
其中,Fq表示结构体的名字(类型),size表示分区的可用空间大小,o表示该分区的状态(是否已分配),no表示该分区中的作业标志,*before表示该结点的向前指针,*next表示该结点的向后指针。
3)各种函数说明:
void alloc(int b,int no,Fq *p);
对作业no进行内存分配的功能函数;其中,参数b表示需求的内存大小,参数no表示作业的编号,参数*p表示空闲分区链的第一个非空结点的指针;
void free(Fq *c);
将地址为c的分区的内存回收;其中,参数*c表示要回收内存的结点;
void create(Fq *head);
创建新作业的子函数;其中,参数*head表示空闲分区链的链首指针;要配合函数alloc()使用;
void cha(Fq *head);
查看内存中的空闲分区链的子函数;其中,参数*head表示空闲分区链的链首指针;
void hui(Fq *head);
回收内存的子函数;其中,参数*head表示空闲分区链的链首指针;要配合函数free()使用;
3 运行环境
1)操作系统: Windows XP ( 32位 / DirectX 11 )
2)电脑: X86 兼容台式电脑
处理器: 英特尔 Pentium(奔腾) 双核*************
内存: 2 GB
4 开发工具和编程语言
1)开发工具:Visual C++ 6.0;
2)编程语言:C++语言;
5 详细设计
1)程序结构如图2:
图2 程序结构图
2)●主菜单模块:
void main()//主函数
{
Fq *head=new Fq;head->next=new Fq;
head->next->size=MAXSIZE;
head->next->o=0;
head->next->next=NULL;
int choice=0;
do
{
cout<<"请选择你要进行的操作:"< cout<<"1、创建新作业 2、查看空闲分区链 3、回收内存空间 0、退出"< cin>>choice; switch(choice) { case 1: create(head);break; case 2: cha(head);break; case 3: hui(head);break; case 0: break; default: cout<<"输入错误!"< } }while(choice!=0); } ●创建新作业模块: void create(Fq *head)//创建作业子函数 { Fq *p=head->next;p->before=head; int no=0,b=0; cout<<"请输入要创建的作业的编号:";cin>>no; cout<<"请输入作业的需求空间大小:";cin>>b; alloc(b,no,p);//此处调用功能函数alloc() } ●查看空闲分区链模块: void cha(Fq *head)//查看内存中的空闲分区链的子函数 { Fq *p=head->next;p->before=head; int i=0; cout<<"空闲分区链的情况为:"< while(p!=NULL) { if(p->o==0) { cout<<"空闲分区"<<++i<<" "< } p=p->next; } } ●回收内存空间模块: void hui(Fq *head)//回收内存的子函数 { Fq *p=head->next;p->before=head; int no=0; cout<<"请输入要回收内存的作业号:";cin>>no; while(p!=NULL) { if(p->no==no) { free(p);//此处调用功能函数free() cout<<"作业"< return ; } else p=p->next; } } ●内存分配功能函数模块: void alloc(int b,int no,Fq *p)//对作业no进行内存分配的子函数{ while(p!=NULL) { if(p->o==1) {p=p->next;} else { if(p->size>b) { if(p->size-b<=min_size)