minsize,如果空闲区的大小减去作业需求长度得到的值小于等于 minsize,不再
将空闲区分成己分分区和空闲区两部分,而是将整个空闲区都分配给作业。
内存分配与回收所使用的结构体:
为便于对内存的分配和回收,建立两张表记录内存的使用情况。一张为记录
作业占用分区的“内存分配表”,内容包括分区起始地址、长度、作业名 /标志
(为 0 时作为标志位表示空栏目);一张为记录空闲区的“空闲分区表”,内容包
括分区起始地址、长度、标志(0 表空栏目,1 表未分配)。两张表都采用顺序
表形式。
关于分配留下的内存小碎片问题:
当要装入一个作业时,从“空闲分区表”中查找标志为“1”(未分配)且满足
作业所需内存大小的最小空闲区,若空闲区的大小与作业所需大小的差值小于
或等于 minsize,把该分区全部分配给作业,并把该空闲区的标志改为“0”(空
栏目)。同时,在已分配区表中找到一个标志为“0”的栏目登记新装人作业所占
用分区的起始地址,长度和作业名。若空闲区的大小与作业所需大小的差值大
于 minsize。则把空闲区分成两部分,一部分用来装入作业,另外一部分仍为空
闲区。这时只要修改原空闲区的长度,且把新装人的作业登记到已分配区表中。
内存的回收:
在可变分区方式下回收内存空间时,先检查是否有与归还区相邻的空闲区
(上邻空闲区,下邻空闲区)。若有,则将它们合件成一个空闲区。程序实现
时,首先将要释放的作业在“内存分配表”中的记录项的标志改为“0”(空栏目),
然后检查“空闲区表”中标志为‘1’(未分配)的栏目,查找是否有相邻的空闲区,
若有,将之合并,并修改空闲区的起始地址和长度。
六:数据结构
(1)已分配表的定义:
struct
{float address; //已分分区起始地址
float length; //已分分区长度,单位为字节
评论8
最新资源