关于内存分配中伙伴算法和slab机制的问题

发布于 2022-10-15 05:08:04 字数 203 浏览 26 评论 0

最近在看伙伴算法的时候,发现了一些问题,想请教一下大家:
1)slab分配器中不是有热高速缓存跟冷高速缓存的吗?但是他们的创建跟伙伴算法分配内存有关系吗?
2)假设伙伴算法中,在2^3上,有3个内存快,假设是a,b,c,,a在链表头,依次往后,a跟b是伙伴,都没有被分配出去,c的伙伴被分配出去了,如果有个进程需要2^3大小的内存快,是从链表头取a还是优先取已经有伙伴分配出去的c?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

辞旧 2022-10-22 05:08:04

回复 1# scorpio215215

第一个问题:
     slab分配器的创建是基于伙伴系统。也就是说slab的页框申请是使用伙伴系统算法的。
第二个问题:
     根据伙伴系统算法不会存在a和b两个物理地址联系的伙伴。因为伙伴系统的回收算法明确表明,如果存在伙伴,那么就会把这两个伙伴合并成一个更大的空闲块。

自由如风 2022-10-22 05:08:04

2楼说的没错
1.slab分配是基于buddy算法的.
2.在某个大小的链表中的每个内存块,不可能有伙伴.

半枫 2022-10-22 05:08:04

回复 2# 瀚海书香

    具体来讲应该是:

            slab---per-cpu page --- buddy system

梦醒灬来后我 2022-10-22 05:08:04

回复 2# 瀚海书香

两个内存块的合并不是由一个进程来控制的吗?  那个进程我忘记了
也就是说 一般情况下不会考虑到两个内存块合并  是当内存不够大的时候  才会寻找伙伴  然后合并  以支持大的内存块分配出去吗?

孤独陪着我 2022-10-22 05:08:04

2楼正解

尬尬 2022-10-22 05:08:04

回复  瀚海书香

两个内存块的合并不是由一个进程来控制的吗?  那个进程我忘记了
也就是说 一般情况 ...
scorpio215215 发表于 2011-06-08 23:23

不是在回收的时候就合并的吗?俺是知其然不知其所以然。

心清如水 2022-10-22 05:08:04

回复 1# scorpio215215

    lz说的热高速缓存,冷高速缓存应该不是slab里的吧,应该是每CPU页框高速缓存里的。目的是分配单个页框。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文