实验报告三 可变分区内存管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三可变分区内存管理
班级:网络工程081 学号:0813072013 姓名:刘国画
实验日期:2010.11.18
实验内容
可变分区内存管理。
实验目的
(1)体会可变分区内存管理方案。
(2)掌握此方案的内存分配过程、内存回收过程和紧凑算法的实现的实现。
实验目标:
编制一个程序模拟实现可变分区内存管理。实验时,假设系统内存容量为100KB。分配时使用my_malloc(i, j)函数实现,作业释放内存时使用
my_free(handle)函数实现,内存情况输出用my_memlist( )实现。
实验步骤:
1.编写主界面,界面上有三个选项:分配内存、回收内存、查看内存。选择分配内存时,要求输入作业的进程号和作业长度,然后使用my_malloc分配内存,报告内存分配结果。回收内存时要求输入进程号,使用my_free实现回收。查看内存时,使用my_memlist实现输出内存使用情况和空闲情况。
2.编写my_malloc(i, j)函数,实现进程i申请j KB内存,要求程序判断是否能分配,如果能分配,要把分配的首地址handle输出到屏幕上。不能分配输出字符串“NULL”。要考虑不能简单分配时,是否符合紧凑的条件,如符合则采用紧凑技术。然后再分配。分配时可采用最佳适应算法。
3.编写my_free(handle)函数,释放首地址为handle的内存块。释放成功返回Success,否则返回Failure。
4.编写my_memlist( )函数,要求输出内存使用情况和空闲情况。
5.内存情况输出的格式为:
ID Address Len Process
其中:
ID:内存分区号
Address:该分区的首地址
Len:分区长度
Process:如果使用,则为使用的进程号,否则为NULL
实验设计
数据结构设计:
可变分区管理方式预先不将内存划分为几个区域,而是将内存除操作系统
占用区域外的空间看做一个大的空闲区。实现可变内存的分配和回收主要考虑:第一,设计记录内存使用情况的数据表格,用来记录空闲区和作业占用的区域;第二,在设计的数据表格基础上设计内存分配算法;第三,在设计的数据表格
基础上设计内存回收算法。
所有分区情况随时可能发生变化,数据结构设计必须满足这一特征。由于
分配时空闲区有时会变成两个分区—空闲区和已分分区。分配内存和回收内存
的主要操作均在空闲区,这样为了方便对内存空间的分配和回收,就建立两张
分区表记录内存使用情况,一张是记录空闲区的“空闲区表”,一张记录作业
占用分区的“已分分区表”。实验中的结构定义如下。
已分配区表的定义:
#define n 10 //假定系统允许的最大进程数为n
struct
{
float address; //已分分区起始地址
float length; //已分分区长度,单位为字节
int ID; //已分分区内存分区号
char process; //已分分区使用的进程号
}used_table[n]; //已分配区表
空闲区表的定义:
#define m 10 //假定系统允许的空闲区表最大为m
struct
{ float address; //空闲区起始地址
float length; //空闲区长度,单位为字节
int ID; //空闲区内存分区号
int process; //空闲区的进程号为0
}free_table[n]
解决方法:
当要装入一个作业时,从空闲区表中查找标志位“为分配”的空闲区,从中找出一个能容纳该作业的空闲区。如果找到空闲区正好等于该作业的长度,则把该分区全部分配给作业。可变分区方式的内存分配流程图如下:
可变分配方式的内存回收:在可变分区方式下回收内存空间时,应该检查是否有与归还区相邻的空闲区,若有,则应该合并成一个空闲区。在实现回收时,首先将作业归还的区域在已分配表中找到,将该栏目的状态变为“空”,然后,检查该空闲区表中标志为“未分配”的栏目,查找是否有相邻空闲区;最后,合并空闲区,修改空闲区表。
实验结果
图一:功能选择菜单
图二:输入进程,进程名分别为a、b,长度分别为32,48
图三:输出空闲分区表
图四:输出内存分配情况
图五:回收内存操作
程序使用说明
在VC++ 6.0中使用该程序,单击运行,会弹出运行菜单,如实验结果中图一所示,选择相应栏目进行可变分区内存分配与回收操作。
实验体会
通过本次实验,我对可变分区内存的分配与回收有了更加深刻的理解,我
利用C++编程实现了模拟的可变分区内存分配与回收,这样内存的分配在我脑
海中有了更加清晰更加具体的实例加以参考。在本次实验中我采用“最有适应”算法进行内存分配,这使我对基本概念有了更好的理解,也掌握的更加巩固。
以后要多对理论知识加以实现,在实践中不断巩固自己所学到的知识。