alloc_pages()和get_free_pages()的返回值之间的差异

时间:2013-08-20 04:59:11

标签: memory-management linux-kernel

为什么我们要求alloc_pages()返回指向结构页面的指针,这与其他内存分配器函数(get_free_pages(),kmalloc())不同? 请提供一个用例。 它与HIGHMEM区域分配有关吗?

1 个答案:

答案 0 :(得分:3)

alloc_pages(mask, order)分配2阶页面并返回struct page的实例以表示保留块的开始。如果只请求一个页面,alloc_page(mask)是order = 0的较短表示法。

__get_free_pages(mask, order) and __get_free_page(mask)的工作方式与 以上函数但返回保留内存块的虚拟地址而不是页面实例。

kmalloc(size, mask)保留一个大小为bytes的内存区域,并返回一个指向该区域开头的void指针。如果内存不足(内核中非常不可能的情况,但必须始终满足),结果就是空指针。

掩码指定有关请求的详细信息:

• memory zone
• behavior of allocator (blocking/unblocking request, etc.)
• e.g. GFP_KERNEL, GFP_ATOMIC, GFP_DMA, etc

alloc_pages() and __get_free_pages() : allocate pages, at low level

kmalloc() : allocate physically contiguous sequence of bytes

有关详细信息,请参阅professional linux kernel architecture by wolfgang mauerer