由于当一个系统很大时,系统内的内存分区可能会很多,相应的空闲分区链就可能很长,这时采用顺序搜索分区的方法可能会很慢。为了提高搜索空间的分区的速度,在中大型系统中往往会采用基于索引搜索的动态分区分配算法,比如我们所熟知的哈希算法、快速适应算法以及伙伴系统。
1)哈希算法
由于分类搜索算法和伙伴系统算法中,都是将空闲分区根据分区大小进行分类,对于每一类具有相同大小的空闲分区,单独设立一个空闲分区链表。在为进程分配空间时,需要在每一张管理索引表中查找到所需要的空间大小所对应的表项,从中得到对应的空间内分区链表表头指针,从而通过查找一个空闲分区。如果对空闲分区分类比较细,则相应索引表的表项也就较多,因此会显著的增加搜索索引表的表项的时间开销。
哈希算法就是利用哈希快速查找的优点,以及空闲分区在可利用空闲分区表中的分布规律,建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一个对应的空闲分区链表表头指针。
当进行空闲分区分配时,根据所需要的空闲 分区大小,通过哈希函数计算,即得到在哈希表中的位置,从中得到相应的空闲分区链表,实现最佳分配策略。
2)快速适应算法(分类搜索法)
该算法就是将空闲分区根据容量大小进行分类,对于每一类具有相同容量的所有空闲分区,单独设立一个空闲分区链表,这样的系统中存在多个空闲分区链表。同时,在内存总设立一张管理索引表,其中的每一个索引表项对应了一种空闲分区类型,并记录了该类型空闲分区链表表头的指针。空闲分区的分类是根据进程常用的空间大小进行划分的。
该算法在搜索可分配的空闲分区时分为两步:第一步是根据进程的长度,从索引表中寻找到能容纳它的最