Ram*_*m27 2 linux memory memory-management memory-alignment linux-kernel
我今天接受了采访,并被问到这个问题.如果要求您分配大小为2KB的内存并且分配的内存应该是页面对齐的,那么您将使用什么内核内存分配策略.
KMALLOC处理较小的内存分配策略,但它支持的最低单位是4KB,这是物理页面的大小.我问他,他是否期待平板分配器?他没有积极回答.
对于页面对齐的内存分配,请使用alloc_pages/alloc_page.您也可以使用_ _get_free_pages/__ get_free_page.__get_free_page最终只使用alloc_pages.这些函数用于从物理内存分配页面.这些的分配器是物理内存分配器或伙伴分配器
你假设kmalloc分配最小4KB的内存是错误的.该用kmalloc是基于slab分配器.做一个cat/proc/slabinfo你会知道已经为kmalloc创建了几个slab.这些slab将使用kmalloc减少分配的内部内存碎片.因此,如果你分配4个字节,那么将只从kmalloc-8的kmalloc slab(4个字节的内部碎片)中分配8个字节.如果分配9个字节,则从kmalloc-16 slab分配16个字节,依此类推.
kmalloc,alloc_page/s,__ get_free_page/s不需要页表.返回的虚拟内存地址只是偏移的地址.
虽然你没有问过,但我会提到vmalloc是另一种使用资源映射分配器的分配技术.通过使用内核主页表(swapper_pg_dir)访问通过vmalloc分配的非连续内存
Mel Gorman书和Professional Linux内核架构书中提到了不同的Linux分配器.通过这些,它会有所帮助.
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |