连续内存分配( 二 )


在首次适应和最佳适应之间的选择可能会影响碎片的量(对一些系统来说首次适应更好,对另一些系统最佳适应更好) 。另一个影响因素是从空闲块的哪端开始分配(顶端还是末端) 。不管使用哪种算法,外部碎片始终是个问题 。
根据内存空间总的大小和平均进程大小的不同,外部碎片的重要程度页页不同,例如,对采用首次适应方法的统计说明 。不管使用什么优化,假定有N个可分配块,那么可能有0.5N个外部为外部碎片 。即1/3的内存可能不能使用 。这一特性称为50%规则 。
一种解决外部碎片的问题的方法是紧缩(compaction),紧缩的目的是移动内存内容,以便所有空间合并成一整块 。但紧缩并非总是可能的 。如果重定位是静态的,并且在汇编时或装入市进行的,那么就不能紧缩 。紧缩仅在重定位是动态并在运行时可采用 。如果地址被动态重定位,可以首先移动程序和数据,然后再根据新基地址的值来改变基地址寄存器,如果能采用紧缩,还需要评估其开销,最简单的合并算法是简丹的将所有进程移动到内存的一端,而将所有的孔移到内存的另一端,以便生成一个大的空闲块,这种方案开销较大 。
另一种可能解决碎片问题的方法是允许物理地址空间为非连续 。这样只要有物理内存就可以为进程分配,这种方案有两种互补的实现技术: 分页和分段,这两种技术也可以合并 。




推荐阅读