【存储管理——内存分配算法】

  • Post author:
  • Post category:其他




内存分配

分区分配算法主要有FF分配算法、BF分配算法、WF分配算法、buddy分配算法



FF分配

FF分配:First Fit ,首次适应算法,

从空闲分区表的第一个表目起查找该表

,把最先能够满足要求的空闲区分配给作业。

若要满足FF算法,空闲分区表(空闲区链)中的

空闲分区地址要从小到大进行排序

。算法优先使用低地址部分空闲区。

优点:能够减少查找时间。

缺点:在低地址空间造成许多小的空闲区,在高地址空间保留了大的空闲区。



BF分配

BF分配:Best Fit,最佳适配算法,

从全部空闲区中找到能满足作业要求且大小最小的空闲分区,


若要满足BF算法,空闲分区表(空闲区链)中的空闲区要按照从小到大的顺序进行排序,且

从表头

开始查找第一个满足要求的自由分区分配。

优点:使碎片最小化。

缺点:该算法保留了大的空闲区,但造成较多的小空闲区。



WF分配

WF分配:Worst Fit,最差适配算法,

从全部空闲区中找到能满足作业要求且大小最大的空闲分区。


若要满足WF算法,需要将空闲区链中的空闲分区按从大到小进行排序,

从表头

开始查找第一个满足要求的自由分区分配。

优点:使空闲区表中的结点大小趋于均匀,适用于内存大小范围较窄的系统。减少了小的碎片产生。

缺点:保留了较小的空闲分区。



buddy分配



伙伴

这里给出伙伴的概念,满足以下三个条件的称为伙伴:

1)两个块大小相同;

2)两个块地址连续;

3)两个块必须是同一个大块中分离出来的;



解释

伙伴系统中可用内存块的大小为2k个字,L≤K≤U,其中2L表示分配的最小块的尺寸,2U表示分配的最大块的尺寸,通常2U是可供分配的整个内存的大小。

最初,可用于分配的整个空间被视为一个大小块为2U的块。

若请求的大小s满足2U-1 ≤ s ≤ 2U,则分配整个空间。否则,该块分成两个大小相等的伙伴,大小均为2U-1。

若有2U-2 < s ≤ 2U-1,则给该请求分配两个伙伴中的任何一个;否则,其中的一个伙伴又被分成两半,持续这一过程,直到产生大于等于s的最小块,并且分配给该请求。

在任何时候,伙伴系统中为所有大小为2i的“空洞”维护一个列表。空洞可通过对半分裂从i+1列表中移出,并且在i列表中产生两个大小为2i的伙伴。当i列表中的一对伙伴都变成未分配的块时,将他们从i列表中移出,合并为i+1列表中的一个块。



版权声明:本文为CharilePuth原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。