内存空间的分配与回收
程序测试 按照自己编写的测试数据,通过输出空闲分区 链来检测分配过程是否正确执行。每个作业申 请后输出一次空闲分区链查看结果与预期是否 相同。另外可多次修改测试数据来查看程序的 运行情况。
动态分区分配与回收—首次适应
算法思想
内存空间不预先划分,分配过程根据用户需求 将某一个满足条件的分区按需分配,进行分割, 一部分分配给作业,另一部分仍留在空闲分区链 中。作业完成后回收对应内存要进行相邻空闲分 区的合并。
内存空间的分配与回收
实验目的
内存是处理机能直接存取指令和数据的存储器,能否合理
地利用内存,在很大程度上将影响到整个计算机系统的性 能。内存分配是指在多道作业和多进程环境下,如何共享 内存空间。内存回收是指当作业执行完毕或进程运行结束 后将主存空间归还给系统。内存的分配与回收跟所用的内 存空间分配算法有关。本实验主要要求掌握内存的固定分 区分配和可变分区分配的相关算法。
合并,形成一个新节点
Y
有下邻接节 点 N 返回
合并,形成一个新节点
程序测试 按照自己编写的测试数据,通过输出空闲分区 链来检测分配过程是否正确执行。每个作业申 请后输出一次空闲分区链查看结果与预期是否 相同。另外可多次修改测试数据来查看程序的 运行情况。
内存固定分区分配与回收
算法思想
预先将内存空间划分成若干个空闲分区,分 配过程根据用户需求将某一个满足条件的分 区直接分配(不进行分割),作业完成后回 收对应内存。整个分配过程分区大小和个数 不发生变化。
内存分配流程
从头开始查找
Y 检索完
N 返回
N
m.size>u.size
继续检索下一个表项
相关数据结构(与固定分区同) 分配流程
从头开始查找 Y
检索完
N
返回
N
m.size>u.size
继续检索下一个表项
Y
从该分区中划出 u.size大小的分区
将该分区分配给请求者并 修改有关数据结构
返回
内存回收流程
回收某一作业分区
空闲分区链空 N 找适当的插入位置
Y
置为链首节点 返回
Байду номын сангаас
Y 有上邻接节 点 N
Y
将该分区分配给请求者并 修改有关数据结构
返回
内存回收
将对应分区放入分区链首
相关数据结构
1.内存空闲分区 struct linkk { int size; int addr; int state; struct linkk *next; }; 2. 内存作业分区 struct jobtab { int jno; int size; int addr; int flag; };