经典的allocation algorithm
原文链接:原英文链接
- First Fit:寻找第一个合适的资源空间
优势:因为只需要找到第一个符合条件的部分,所以该算法很快
劣势:会出现占用的空间内剩余的资源比较少,产生资源碎片而导致资源浪费的情况 - Best Fit:寻找满足资源限制并且分配资源后剩余资源空间最少,遍历整个搜索空间去寻找最接近资源需求的空间
优势:资源利用率会比ff要好很多
劣势:比ff要更慢一些,并且会剩余很多难以利用的空闲小资源 - Worst Fit:与best Fit相反,分配剩余资源最大的空间,所以此空间内的剩余资源会比较多不至于出现小碎片资源
优势:bf小碎片出现的情况
劣势:如果有一个资源非常大的任务,因为之前大空间的资源已经被分配了因此此任务不能被分配了 - Buddy’s System(伙伴系统)
在伙伴系统中,可用块的大小采用2的整数次幂的形式。例如2、4、8、16等。取决于内存的大小。当请求大小为2k的空闲块时,将从大小为2k的空闲块列表中分配一个空闲块。如果没有大小为2k的空闲块可用,则将下一个较大的大小为2k + 1的块分成两半,称为伙伴,以满足请求。
例如:假设总内存大小为512KB,而让进程P1交换70KB。由于资源列表仅针对2的幂,因此128KB将足够大。最初没有128KB,也没有256KB的块。因此,将512KB的块拆分为两个256KB的伙伴,将一个进一步拆分为两个128KB的块,并将其中一个分配给该进程。下一个P2需要35KB。将35KB舍入为2的幂,则需要64KB的块。因此,当128KB块拆分为两个64KB好友时。同样,将在整个256KB中调整过程P3(130KB)。在以这种方式满足要求后(当该块空闲时),可以将两个块/伙伴重新组合以形成两倍大的原始块(当下半个伙伴也空闲时)。
优势:伙伴系统更快。释放大小为2k的块时,将搜索内存大小为2k的空洞以检查是否可以合并。
劣势:就内存利用率而言,它通常变得效率低下。由于必须将所有请求取整为2的幂,因此将35KB的进程分配给64KB,从而浪费了29KB的额外开销,从而导致内部碎片。伙伴之间可能有孔洞,导致外部碎片。 - Next Fit:ff的改进版,记录同规格作业所占用空间的地址。当刚开始的时候找到一个空闲的空间,当下一次开始的时候不需要重新搜索,直接返回空间的地址即可。