一、首次适应算法
1、算法思想
每次从低地址开始查找,找到第一个能满足大小的空闲分区。
2、如何实现
空闲分区以地址递增的次序排列,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区。
3、常用的数据结构
空闲分区表、空闲分区链
4、优缺点
优点:①为分配大的内存空间创造了条件
②不需要重新排序,算法开销小
缺点:①不断被划分,会留下许多难以利用的小分区,产生碎片。
5、图示
空闲分区表↑
空闲分区链(按起始地址有小到大排序)↓
二、最佳适应算法
1、算法思想
由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域,因此为了保证大进程到来时能有连续的大空间,可以尽可能的留下大空间,优先使用小空间。
2、如何实现
空闲分区按容量递增次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足的第一个空闲分区。
3、优缺点
优点:①避免大材小用,更能满足大进程需求
缺点:①产生难以利用的小分区,产生碎片
②算法开销大,每次需要重新排序
4、图示
空闲分区表↑
空闲分区链(由分区大小由小到大排序)↓
注意:有更小的空闲分区,需要更新空闲分区链
三、最坏适应算法(最大适应算法)
1、算法思想
为了解决最佳适应算法的问题(即留下太多难以利用的小碎片),可以在每次分配时优先使用最大的连续空闲区,这样分配后剩余的空闲区就不会太小,更方便使用。
2、如何实现
空闲分区按容量递减次序链接,每次分配内存时顺序查找空闲分区链,找到大小能满足要求的第一个空闲分区。
3、优缺点
优点:①可减少难以利用的碎片
缺点:①大分区被用完,不利于大进程,算法开销大
4、图示
空闲分区表↑
空闲分区链(由分区大小由大到小排序)↓
四、循环首次适应算法(邻近适应算法)
1、算法思想
首次适应算法每次都从链头开始查找,可能会导致低地址部分出现很小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销,如果每次都从上次查找结束的位置开始检索,可解决上述问题。
2、如何实现
空闲分区以地址递增的顺序排列(循环链表),每次分配内存师从上次查找结束的位置开始查找空闲分区链,找到大小能满足要求的第一个空闲分区链。
3、优缺点
优点:①不是每次从头开始检索,算法开销小
②使空闲分区分布得更均匀
缺点:①会缺乏大的空闲分区