常见内存分配算法:首次适应算法(FirstFit)循环首次适应算法(NextFit)最佳适应算法(BestFit)最坏适应算法(WorstFit)

一、首次适应算法(First Fit):该算法从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按      照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链    中。
     特点: 该算法倾向于使用内存中低地址部分的空闲区,在高地址部分的空闲区很少被利用,从而保留了高地址部分的大空闲        区。显然为以后到达的大作业分配大的内存空间创造了条件。
     缺点:低地址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低地址部分开始,会增加查找的开销。
二、循环首次适应算法(Next Fit):该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再每次从链首开始查      找,直至找到一个能满足要求的空闲分区,并从中划出一块来分给作业。
     特点:使内存中的空闲分区分布的更为均匀,减少了查找时的系统开销。
     缺点:缺乏大的空闲分区,从而导致不能装入大型作业。
三、最佳适应算法(Best Fit):该算法总是把既能满足要求,又是最小的空闲分区分配给作业。为了加速查找,该算法要求将        所有的空闲区按其大小排序后,以递增顺序形成一个空白链。这样每次找到的第一个满足要求的空闲区,必然是最优的。孤立        地看,该算法似乎是最优的,但事实上并不一定。因为每次分配后剩余的空间一定是最小的,在存储器中将留下许多难以利用        的小空闲区。同时每次分配后必须重新排序,这也带来了一定的开销。
     特点:每次分配给文件的都是最合适该文件大小的分区。
     缺点:内存中留下许多难以利用的小的空闲区。
四、最坏适应算法(Worst Fit):该算法按大小递减的顺序形成空闲区链,分配时直接从空闲区链的第一个空闲区中分配(不能      满足需要则不分配)。很显然,如果第一个空闲分区不能满足,那么再没有空闲分区能满足需要。这种分配方法初看起来不太        合理,但它也有很强的直观吸引力:在大空闲区中放入程序后,剩下的空闲区常常也很大,于是还能装下一个较大的新程序。
           最坏适应算法与最佳适应算法的排序正好相反,它的队列指针总是指向最大的空闲区,在进行分配时,总是从最大的空闲       区开始查寻。
           该算法克服了最佳适应算法留下的许多小的碎片的不足,但保留大的空闲区的可能性减小了,而且空闲区回收也和最佳适       应算法一样复杂。
      特点:给文件分配分区后剩下的空闲区不至于太小,产生碎片的几率最小,对中小型文件分配分区操作有利。
      缺点:使存储器中缺乏大的空闲区,对大型文件的分区分配不利。

你可能感兴趣的:(操作系统)