基于顺序搜索和索引搜索的动态分区分配算法 总结

基于顺序搜索的动态分区分配算法

#######

首次适应算法(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大小的连续内存。每个页框块的第一个页框的物理地址是


该块大小的整数倍。


特点:在回收空闲分区,需要对空闲分区进行合并,所以其时间性能比快速适应算法差,但由于采用索引搜索,比顺序搜索法好空间性能,由于对空闲分区进行合并,减少了小的空闲分区,提高了空闲分区的可以用率,故快于自适应算法,比顺序搜索法略差


#################

哈希算法



利用哈希快速查找的优点,以及空间可利用空闲区的分布规则简历哈希函数,构造一张以空闲分区大小为关键字的哈


希表,记录空闲分区的链表表头指针。程序分配的时候根据所需大小,通过哈希函数计算,得到表中位置,得到想应


的空闲分区表,实现最佳分配策略


缺点:如果对空闲分区的分类较细,则相应索引表的表项也就多,因此会显著地增加搜索索引表的表项的时间开销
有点:查找效率高








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