实验报告三 可变分区内存管理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++编程实现了模拟的可变分区内存分配与回收,这样内存的分配在我脑

海中有了更加清晰更加具体的实例加以参考。在本次实验中我采用“最有适应”算法进行内存分配,这使我对基本概念有了更好的理解,也掌握的更加巩固。

以后要多对理论知识加以实现,在实践中不断巩固自己所学到的知识。

相关文档
最新文档