内存分配的buddy算法

来源:互联网 发布:淘宝店铺女装名字大全 编辑:程序博客网 时间:2024/05/21 17:31

buddy算法是用来做内存管理的经典算法,目的是为了解决内存的外碎片。


例子

  buddy算法将所有空闲页框分组为10个块链表,每个块链表的每个块元素分别包含1,2,4,8,16,32,64,128,256,512个连续的页框,每个块的第一个页框的物理地址是该块大小的整数倍。如,大小为16个页框的块,其起始地址是16*2^12(一个页框的大小为4k,16个页框的大小为16*4K,1k=1024=2的10次方,4k=2的12次方)的倍数。
  例,假设要请求一个128个页框的块,算法先检查128个页框的链表是否有空闲块,如果没有则查256个页框的链表,有则将256个页框的块分裂两份,一份使用,一份插入128个页框的链表。如果还没有,就查512个页框的链表,有的话就分裂为128,128,256,一个128使用,剩余两个插入对应链表。如果在512还没查到,则返回出错信号。




其实从图中也可以看出来,你申请多大2 pow(i),会到指定链表2 pow (i)对应索引中查找,有则直接分配,没有则找2 pow(i+1),分裂2 pow(i+1),分配申请空间后,把剩下的空闲链到下对应的2 pow(j-1) 结点上



这个算法的目的就是减少内在的碎片