实验目的
体会可变分区内存管理方案,掌握此方案的内存分配过程、内存回收过程和紧凑算法的实现。
实验内容
编制一个程序模拟实现可变分区内存管理。实验时,假设系统内存容量为 1000KB 。分配时使用 malloc(pid, length) 函数实现,作业释放内存时使用 mfree(handle)函数实现,内存情况输出用 mlist()函数实现。
编写主界面
编写主界面,界面上有三个选项:分配内存、回收内存、查看内存。选择分配内存时,要求输入作业的进程号和作业长度,然后使用 malloc 函数分配内存,并报告内存分配结果。回收内存时要求输入进程号,使用 mfree 函数实现回收。查看内存时,使用 mlist 函数实现输出内存使用情况和空闲情况。
编写 malloc(pid, length) 函数
编写 malloc(pid, length)函数,实现进程 pid 申请 length KB 内存,要求程序判断是否能分配,如果能分配,要把分配内存的首地址 handle 输出到屏幕上。不能分配则输出字符串“NULL”。要考虑不能简单分配时,是否符合紧凑的条件,如符合则采用紧凑技术。然后再分配。分配时可在最佳适应算法、最差适应算法和首次适应算法中任选其一。
编写 mfree(handle) 函数
编写mfree(handle)函数,释放首地址为handle 的内存块。释放成功返回Success,否则返回 Failure。
编写 mlist() 函数
编写 mlist()函数,要求输出内存使用情况和空闲情况。输出的格式为:
1 | ID Address Length Process |
ID 内存分区号
Address 该分区的首地址
Length 分区长度
Process 如果使用,则为使用的进程号,否则为NULL
实现
mfree(handle) 函数应该考虑 4 种情况:
- 要释放的内存块前后内存块都是已分配内存块;
- 要释放的内存块前是空闲内存块;
- 要释放的内存块前是空闲内存块;
- 要释放的内存块前后都是空闲内存块;
在这里实现的时候释放时不考虑前后内存块的情况,直接标为空闲状态,合并留待需要紧凑时再实现。
1 |
|