动态分区分配方式的模拟实验报告模板Word格式文档下载.docx

上传人:b****3 文档编号:8272756 上传时间:2023-05-10 格式:DOCX 页数:43 大小:21.19KB
下载 相关 举报
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第1页
第1页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第2页
第2页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第3页
第3页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第4页
第4页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第5页
第5页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第6页
第6页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第7页
第7页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第8页
第8页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第9页
第9页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第10页
第10页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第11页
第11页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第12页
第12页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第13页
第13页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第14页
第14页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第15页
第15页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第16页
第16页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第17页
第17页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第18页
第18页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第19页
第19页 / 共43页
动态分区分配方式的模拟实验报告模板Word格式文档下载.docx_第20页
第20页 / 共43页
亲,该文档总共43页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

动态分区分配方式的模拟实验报告模板Word格式文档下载.docx

《动态分区分配方式的模拟实验报告模板Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《动态分区分配方式的模拟实验报告模板Word格式文档下载.docx(43页珍藏版)》请在冰点文库上搜索。

动态分区分配方式的模拟实验报告模板Word格式文档下载.docx

四﹑设计思路和方法:

首次适应算法(First-fit):

当要分配内存空间时,就查表,在各空闲区中查找满足大小要求的可用块。

只要找到第一个足以满足要球的空闲块就停止查找,并把它分配出去;

如果该空闲空间与所需空间大小一样,则从空闲表中取消该项;

如果还有剩余,则余下的部分仍留在空闲表中,但应修改分区大小和分区始址。

最佳适应算法(Best-fit):

当要分配内存空间时,就查找空闲表中满足要求的空闲块,并使得剩余块是最小的。

然后把它分配出去,若大小恰好合适,则直按分配;

若有剩余块,则仍保留该余下的空闲分区,并修改分区大小的起始地址。

内存回收:

将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。

并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。

五﹑主要数据结构和算法:

主要数据结构:

定义一个空闲区说明表结构

structfreearea{

intID;

//分区号

longsize;

//分区大小

longaddress;

//分区地址

intstate;

//状态

}ElemType;

线性表的双向链表存储结构

structDuLNode//doublelinkedlist

{

ElemTypedata;

structDuLNode*prior;

//前趋指针

structDuLNode*next;

//后继指针

}DuLNode,*DuLinkList;

算法:

首次适应算法:

是在分配内存时,从链首开始顺序查找,直到找到一个大小能够满足要求的分区,即进行分配。

最佳适应算法:

是在分配内存时,从链首开始顺序查找,查找到链尾,并记录一个大小不小于要求的分区的最小分区,在查找完毕后进行分配。

六﹑程序代码和输出

1程序代码如下

//***************************************************************

//********动态分区分配方式的模拟*********

#include<

iostream.h>

stdlib.h>

#defineFree0//空闲状态

#defineBusy1//已用状态

#defineOK1//完成

#defineERROR0//出错

#defineMAX_length640//最大内存空间为640KB

typedefintStatus;

typedefstructfreearea//定义一个空闲区说明表结构

//----------线性表的双向链表存储结构------------

typedefstructDuLNode//doublelinkedlist

DuLinkListblock_first;

//头结点

DuLinkListblock_last;

//尾结点

Statusalloc(int);

//内存分配

Statusfree(int);

//内存回收

StatusFirst_fit(int,int);

//首次适应算法

StatusBest_fit(int,int);

//最佳适应算法

voidshow();

//查看分配

StatusInitblock();

//开创空间表

StatusInitblock()//开创带头结点的内存空间链表

block_first=(DuLinkList)malloc(sizeof(DuLNode));

block_last=(DuLinkList)malloc(sizeof(DuLNode));

block_first->

prior=NULL;

next=block_last;

block_last->

prior=block_first;

next=NULL;

data.address=0;

data.size=MAX_length;

data.ID=0;

data.state=Free;

returnOK;

}

//-----------------------分配主存-------------------------

Statusalloc(intch)

intID,request;

cout<

<

"

请输入作业(分区号):

;

cin>

>

ID;

请输入需要分配的主存大小(单位:

KB):

request;

if(request<

0||request==0)

{

cout<

分配大小不合适,请重试!

endl;

returnERROR;

}

if(ch==2)//选择最佳适应算法

if(Best_fit(ID,request)==OK)cout<

分配成功!

elsecout<

内存不足,分配失败!

returnOK;

else//默认首次适应算法

if(First_fit(ID,request)==OK)cout<

//------------------首次适应算法-----------------------

StatusFirst_fit(intID,intrequest)//传入作业名及申请量

//为申请作业开辟新空间且初始化

DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode));

temp->

data.ID=ID;

data.size=request;

data.state=Busy;

DuLNode*p=block_first->

next;

while(p)

if(p->

data.state==Free&

&

p->

data.size==request)

{//有大小恰好合适的空闲块

p->

returnOK;

break;

}

data.size>

request)

{//有空闲块能满足需求且有剩余"

temp->

prior=p->

prior;

next=p;

data.address=p->

data.address;

prior->

next=temp;

prior=temp;

data.address=temp->

data.address+temp->

data.size;

data.size-=request;

p=p->

returnERROR;

//--------------------最佳适应算法------------------------

StatusBest_fit(intID,intrequest)

intch;

//记录最小剩余空间

DuLNode*q=NULL;

//记录最佳插入位置

while(p)//初始化最小空间和最佳位置

(p->

request||p->

data.size==request))

{

q=p;

ch=p->

data.size-request;

{//空闲块大小恰好合适

{//空闲块大于分配需求

if(p->

data.size-request<

ch)//剩余空间比初值还小

{

ch=p->

//更新剩余最小值

q=p;

//更新最佳位置指向

}

if(q==NULL)returnERROR;

//没有找到空闲块

else

{//找到了最佳位置并实现分配

temp->

prior=q->

next=q;

data.address=q->

q->

data.address+=request;

data.size=ch;

//-----------------------主存回收--------------------

Statusfree(intID)

DuLNode*p=block_first;

data.ID==ID)

data.ID=Free;

data.state==Free)//与前面的空闲块相连

p->

data.size+=p->

next=p->

next->

data.state==Free)//与后面的空闲块相连

prior=p;

break;

//---------------显示主存分配情况------------------

voidshow()

+++++++++++++++++++++++++++++++++++++++\n"

+++主存分配情况+++\n"

分区号:

data.ID==Free)cout<

Free"

p->

data.ID<

起始地址:

data.address<

分区大小:

data.size<

KB"

状态:

data.state==Free)cout<

空闲"

已分配"

——————————————"

//-----------------------主函数---------------------------

voidmain()

//算法选择标记

动态分区分配方式的模拟\n"

************************************\n"

**1)首次适应算法2)最佳适应算法**\n"

请选择分配算法:

ch;

Initblock();

//开创空间表

intchoice;

//操作选择标记

while

(1)

********************************************\n"

**1:

分配内存2:

回收内存**\n"

**3:

查看分配0:

退出**\n"

请输入您的操作:

cin>

choice;

if(choice==1)alloc(ch);

//分配内存

elseif(choice==2)//内存回收

intID;

cout<

请输入您要释放的分区号:

cin>

free(ID);

elseif(choice==3)show();

//显示主存

elseif(choice==0)break;

//退出

else//输入操作有误

输入有误,请重试!

continue;

2输入和输出结果

(1)首次适应算法

动态分区分配方式的模拟

************************************

**1)首次适应算法2)最佳适应算法**

1

********************************************

回收内存**

退出**

130

3

+++++++++++++++++++++++++++++++++++++++

+++主存分配情况+++

130KB

已分配

——————————————

Free

510KB

空闲

2

60

60KB

190

450KB

100

100KB

290

350KB

4

200

*****

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2