关于内存分配中伙伴算法和slab机制的问题
最近在看伙伴算法的时候,发现了一些问题,想请教一下大家:
1)slab分配器中不是有热高速缓存跟冷高速缓存的吗?但是他们的创建跟伙伴算法分配内存有关系吗?
2)假设伙伴算法中,在2^3上,有3个内存快,假设是a,b,c,,a在链表头,依次往后,a跟b是伙伴,都没有被分配出去,c的伙伴被分配出去了,如果有个进程需要2^3大小的内存快,是从链表头取a还是优先取已经有伙伴分配出去的c?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
回复 1# scorpio215215
第一个问题:
slab分配器的创建是基于伙伴系统。也就是说slab的页框申请是使用伙伴系统算法的。
第二个问题:
根据伙伴系统算法不会存在a和b两个物理地址联系的伙伴。因为伙伴系统的回收算法明确表明,如果存在伙伴,那么就会把这两个伙伴合并成一个更大的空闲块。
2楼说的没错
1.slab分配是基于buddy算法的.
2.在某个大小的链表中的每个内存块,不可能有伙伴.
回复 2# 瀚海书香
具体来讲应该是:
slab---per-cpu page --- buddy system
回复 2# 瀚海书香
两个内存块的合并不是由一个进程来控制的吗? 那个进程我忘记了
也就是说 一般情况下不会考虑到两个内存块合并 是当内存不够大的时候 才会寻找伙伴 然后合并 以支持大的内存块分配出去吗?
2楼正解
不是在回收的时候就合并的吗?俺是知其然不知其所以然。
回复 1# scorpio215215
lz说的热高速缓存,冷高速缓存应该不是slab里的吧,应该是每CPU页框高速缓存里的。目的是分配单个页框。