genalloc ― 通用内存分配器(二)

2014-11-24 08:13:41 · 作者: · 浏览: 2
如果申请的内存大于一个最小单元,查找连续的nbits个单元 */
bit = find_next_bit(chunk->bits, bit + nbits,bit + 1);
if (bit - start_bit < nbits)
continue;
}
addr = chunk->start_addr + ((unsigned long)start_bit << order); /* 计算申请的内存的起始地址 */
while (nbits--)
__set_bit(start_bit++, chunk->bits); /* 将申请到的单元全部标记为已用 */
spin_unlock_irqrestore(&chunk->lock, flags);
read_unlock(&pool->lock);
return addr;
}
spin_unlock_irqrestore(&chunk->lock, flags);
}
read_unlock(&pool->lock);
return 0;
}
因为是用的最先适配原则,所以逻辑比较简单,我们也可以根据自己的需求实现最适合分配器以及伙伴分配器。