我正在阅读由Marshall McKusick和George Neville-Neil撰写的freeBSD书。在内核内存管理中,它提到了以下有关区域分配器的内容:
每种内存类型都有自己的区域,从中可以进行所有分配。在一个区域中分配的内存不能被任何其他区域或一般内存分配器使用。
我的问题是:
1)这里提到了哪些内存类型?
2)区域分配器上下文中不同区域的含义是什么?
如果有人也可以提供一些更好地解释这一点的参考,我们将不胜感激。
感谢。
答案 0 :(得分:1)
FreeBSD中的区域分配器是uma(9)。
从手册页:
区域分配器首次出现在FreeBSD 3.0中。这是彻底的 在FreeBSD 5.0中更改为slab allocator。
区域类似于内存池中的内存竞技场/区域,但正如手册页所述,具有类似slab分配器的功能。正如您的引言所暗示的那样,您不能uma_zalloc()
从一个区域uma_zfree()
然后{{1}}进入不同的区域。这与内部簿记有关。
对于内存类型,我假设它引用了不同的内核结构,其中不同的内核结构可能每个都有一个区域。