存储器管理实验报告Word文档格式.docx

上传人:b****1 文档编号:15012446 上传时间:2022-10-26 格式:DOCX 页数:17 大小:149.84KB
下载 相关 举报
存储器管理实验报告Word文档格式.docx_第1页
第1页 / 共17页
存储器管理实验报告Word文档格式.docx_第2页
第2页 / 共17页
存储器管理实验报告Word文档格式.docx_第3页
第3页 / 共17页
存储器管理实验报告Word文档格式.docx_第4页
第4页 / 共17页
存储器管理实验报告Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

存储器管理实验报告Word文档格式.docx

《存储器管理实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《存储器管理实验报告Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

存储器管理实验报告Word文档格式.docx

    了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。

二、实验内容

用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程()和回收过程()。

其中,空闲分区通过分区链来管理,在进行内存分配时,系统优先使用空闲区低端的空间。

请分别用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。

三、实验主要仪器设备

软件环境:

VC++6编程环境

四、实验原理及设计方案

1.实验原理:

可变分区调度算法有:

最先适应分配算法,循环首次适应算法,最佳适应算法,最坏适应算法。

首次适应算法():

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

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

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

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

用户提出内存空间的申请:

系统根据申请者的要求,按照一定的分配策略分析内存空间的使用情况,找出能满足请求的空闲区,分给申请者;

当程序执行完毕或主动归还内存资源时,系统要收回它所占用的内存空间或它归还的部分内存空间。

最佳适应算法():

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

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

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

内存回收:

将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空,并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。

每当一个进程被创建时,内存分配程序首先要查找空闲内存分区链,从中寻找一个合适的空闲块进行划分,并修改空闲内存分区链,系统根据回收区的首址,从空闲区链中找到相应的插入点,此时出现如下四种情况:

(1)回收区与插入点的前一个空闲区F1相邻接,此时可将回收区直接与F1合并,并修改F1的大小;

(2)回收区与插入点的后一个空闲分区F2相邻接,此时可将回收区直接与F2合并,并用回收区的首址作为新空闲区的首址,大小为二者之和;

(3)回收区同时与插入点的前后两个空闲分区邻接,此时需将三者合并;

(4)回收区不与任何一个空闲区邻接,此时应建一新的表项

2.主要数据结构的说明

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

{

;

分区号

分区大小

分区地址

状态

};

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

{

*;

前趋指针

后继指针

},*;

算法;

  首次适应算法:

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

  最佳适应算法:

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

   

3.程序流程图

首次适应算法

最佳适应算法

F

T

TF

4.实验程序

<

>

N10000

n1空闲分区的个数

n2作业区的个数

{

起址

结束

长度

}[N];

1(**b)

(*(*)a)(*(*)b);

}

2(**b)

()

n1=1;

初始时只有一个空闲区

n2=0;

初始没有作业

[0]0;

[0]1023;

[0]1024;

1()打印空闲分区

i;

(0<

n1)

("

空闲分区起止结束长度\n"

[i][i][i]);

2()打印作业分区

n2)

作业分区:

起止结束长度\n"

;

t12;

();

1();

("

输入1装入新作业,输入0回收作业,输入-1结束\n"

);

(("

"

))

(1)装入新作业

请输入作业的占用空间的长度"

0;

{

([i]>

)首次适应算法

1;

}

内存分配失败\n"

{[n2][i];

[n2][n2];

[n2];

n2;

作业数加1

([i])该分区全部用于分配,删除该空闲分区

(<

n1-1)

[j][1];

[j][1];

}

n1;

}

该空闲分区部分用于分配,剩余的留在空闲分区中

{

[i];

}

}

(0)

{

输入要回收的作业"

{

[])

([i][])待回收的作业上面有空闲分区

t1;

}

[])

t2;

}

()

{

[n1][];

n1;

(1()1);

n2-1)

n2;

1;

[t1][];

[t1][];

(<

{

[t1][t2];

[t1]([][t2]);

(2<

n1-1)

}

{

("

操作结束\n"

;

1();

2();

0;

}

{;

}[6]={{10,30,1},{100,60,1},{200,80,1},{300,60,1},{400,180,1},{700,200,1}};

()

6)

([i]1[i]>

[i];

1;

([i]1[i])

[i]0;

[i];

(0)

0;

()

(0<

([j]>

[1])

[j];

[j];

[1];

([j]0[1]1)

1=02=03=0;

请输入回收区的起始地址:

\n"

请输入回收区的大小:

(([i])([i]1))

t1=1;

(0<

(([j][j])([j]1))

[i]0;

t2=1;

;

(t20)

[i];

}

(t10)

(([i][i])([i]1))

t3=1;

;

(t30)

(0<

([j]0)

{

[j];

[j]1;

}

\n起始地址|大小|是否空闲\n\n"

("

%3d|%3d|%3d\n"

[i][i][i]);

()

\n是否有作业请求空闲区N:

(()'

y'

初始空闲区状态:

();

请输入请求空闲区的作业大小:

分配后空闲区状态:

()

没有适合的空闲区大小!

作业起始地址:

\n"

作业大小:

是否有其他作业的请求?

YN:

五、算法及运行结果及分析

1.运行结果:

2.实验总结:

通过运行内存分配和回收模拟的程序对内存管理理解加深了,在动态分区管理方式中,能灵活地根据作业需要,动态地为之分配内存空间,其中关键是分区分配算法,一旦内存块使用完毕,可以回收给系统以分配给其他的作业使用。

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

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1