内存管理算法
1. 伙伴算法以页(4k)为单位管理内存,解决的是外部内存碎片问题。
2. slab算法是为了解决小块内存申请的问题,是对伙伴算法的一种补充。
1 伙伴(Buddy)算法
- 参考
- 浅析Buddy算法
- 解析:在Buddy算法中,以页为单位管理内存,把内存按照2的幂次方分组,每一组内内存以链表方式连接,每一个链节点由2的幂次方个连续页组成。比如,第0组,由1个页作为链表节点;第1组,由2个页作为链表节点;第2组,由4个页作为链表节点;第10组,由1024个页作为链表节点。
- 功能:提高内存利用率的同时减少外部内存碎片
- 伙伴定义:
- 两个块具有相同大小
- 物理地址是连续的;
- 伙伴算法原理:
- 申请内存过程:当请求一个一个页(4k)大小的内存时,先向组0请求;如果满足,直接分配;如果组0无法分配,就向上一层组1请求;如果组1满足,返回分配的内存给调用者,且将剩下的一半放入组0的链表中。
- 释放内存过程:释放时先检查所在链表中该位置是否有他的伙伴;如果不存在,则直接释放直接将释放的块插入链表头。如果他所在链表中有伙伴存在,则将其从链表摘下,合并成一个大块,然后继续向后查找合并后的块在更大一级链表中是否有伙伴的存在,直至不能合并或者已经合并至最大块2^10为止
2 slab