采用首次适应算法的动态分区分配模拟课程设计实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<<" "<size<<"K"<

}

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)

相关文档
最新文档