动态分区分配算法

基于顺序搜索的动态分区分配算法

1.首次适应算法(FF):

所谓的首次的意思以地址递增链接。因此在分配内存的时候,从链首开始查找,直到找到一个大小能满足要求的空闲分区为之。

2.循环首次适应算法(NF):

和首次适应算法的区别就是,在为进程分配内存空间的时候,不再是都从链首开始查找, 而是从上次找到的空闲的分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区。

3.最佳适应算法(BF):

将所有的空闲空间按其容量从小到大的顺序形成一空闲分区链,然后进行分配。

4.最坏适应算法(WF):

将所有的空闲空间按其容量从大到小的顺序形成一空闲分区链,然后进行分配。 当系统很大的时候,基于顺序搜索的动态分区分配算法可能会很慢,所以有:

基于索引搜索的动态分区分配算法

1.快速适应算法:

将空闲分区根据其容量大小进行分类,对于每一类具有相同容量的所有分区,单独设立一个空闲分区链表,这样系统中存在多个空闲分区链表。同时,在内存中设立一张管理索引表,其中的每一个索引表项对应了一种空闲分区类型。 在搜索可分配空闲分区时,第一步根据进程的长度,从索引表中去寻找能容纳它的最小空闲区链表;第二步是从链表中取下第一块进行分配即可。 优先是查找效率高,缺点是,该算法在分配空闲分区时,是以进程为单位的,一个分区只属于一个进程,因此在为进程所分配的一个分区中,或多或少存在一定的浪费。

2.伙伴系统:

伙伴系统方式是动态分区分配和固定分区分配的一种折衷方案。 伙伴系统规定,分配的分区和空闲分区大小都是2^k,k为整数,l≤k ≤m。2^1表示分配的最小分区大小,2^m表示分配的最大分区大小。2^m是整个可分配的内存大小。系统中也要建立一种管理索引表,指明每个链表表头。

分区分配方法: 开始时,整个分区是2^m,在系统运行过程中,由于不断划分,可能会形成若干不连续的空闲分区,将它们分类,每一类具有相同大小,且每类建立一个空闲分区双向链表,系统中有若干个双向链表。 当需要为进程分配大小为n的区块时,首先计算一个i,使2^(i-1)≤n ≤2^i,然后在大小为2i的空闲分区链表中查找。 分区回收: 若回收大小为2^i的分区,若有伙伴分区,则合并为2^(i+1)的分区,进而可能需要合并为2^(i+2)的分区…… 算法性能取决于查找空闲分区的位置和分割、回收空闲分区所花费的时间。

猜你喜欢

转载自blog.csdn.net/william_munch/article/details/82838447