基于顺序搜索的动态分区分配算法
#######首次适应算法(FF) first fit
空闲分区排成一个链,从链首开始查找,知道找到一个大小能满足的要求的分区为止。
特点:优点:保留高地址大空间去,为大作业分配空间创造条件
缺点:低地址部分不断配分割,形成许多难以利用的空闲区碎片
#########
循环首次适应NF next fit
不是每次都是从链首查找,而是从上次找到的空闲分区开始查找,找到下一个能满足要求的空闲分区,最后一个不满
足就返回第一个开始查找,找到第一个适合的
特点:优点:避免了FF算法产生过多的空闲去碎片,并提高了查找空闲分区的效率
缺点:无法很好的保留大空间区
########
最佳适应算法BF best fit
把空闲分区按照大小排成一个链,从链首开始查询,找到第一个适合的空闲分区
特点:优点:每次找到的空闲分区都是当前看来最佳的空闲分区。
缺点:该空闲分区被分割后,空闲区碎片变得极小,十分难以利用
########
最坏适应算法WF worst fit
总是挑选一个最大的空闲分区,从中分割一部分空间给作业用。
特点:优点:剩下的空闲分区不至于太小,产生碎片的可能性最小 查找只要从最大查找即可,查找算法效率高
缺点: 通NF 无法很好保留大空间区
-----------------------------------------------------------
基于索引搜索的动态分区分配算法
############快速适应算法
将空闲分区按照大小进行分类,相同的一类就设立一个空闲分区表,这样就有不同的空闲分区表。作业分配的时候,
就在表中选择适当大小的空闲分区分配。
有点:不会对任何分分区产生分割,所以能保留大的分区,满足对大空间的需求,也不会差生内存碎片。查找效率高
。
缺点:1为了合并有效分区,在分区归还内存是的算法复杂,系统开销较大。
2空间换时间 在分配空闲分区中,是以进程为单位,一个分区只属于一个进程,或多或少存在浪费。
#################
伙伴系统
也可以说是linux伙伴系统了 linux内核采用
把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个
连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是
该块大小的整数倍。
特点:在回收空闲分区,需要对空闲分区进行合并,所以其时间性能比快速适应算法差,但由于采用索引搜索,比顺序搜索法好空间性能,由于对空闲分区进行合并,减少了小的空闲分区,提高了空闲分区的可以用率,故快于自适应算法,比顺序搜索法略差
#################
哈希算法
利用哈希快速查找的优点,以及空间可利用空闲区的分布规则简历哈希函数,构造一张以空闲分区大小为关键字的哈
希表,记录空闲分区的链表表头指针。程序分配的时候根据所需大小,通过哈希函数计算,得到表中位置,得到想应
的空闲分区表,实现最佳分配策略
缺点:如果对空闲分区的分类较细,则相应索引表的表项也就多,因此会显著地增加搜索索引表的表项的时间开销
有点:查找效率高