Advertisement

为进程分配大内存使用__get_free_pages

阅读量:

Table 11.2. Low-Level Page Allocations Methods

Flag

Description

alloc_page(gfp_mask)

用于分配一个单独的页面,并返回指向其 page 结构的指针

alloc_pages(gfp_mask, order)

用于分配 2order 个页面,并返回指向第一个页面的 page 结构的指针

__get_free_page(gfp_mask)

用于分配一个单独的页面,并返回指向其逻辑地址的指针

__get_free_pages(gfp_mask, order)

用于分配 2order 个页面,并返回指向第一个页面逻辑地址的指针

get_zeroed_page(gfp_mask)

用于分配一个页面,将其内容清零,并返回指向其逻辑地址的指针

在我的代码实现过程中,从未涉及过大页连续物理内存的申请操作,通常采用的是 kmalloc 或 dma_alloc_coherent 这类方式。ARC 模块中相关的 DMA 函数存在编写不当的问题,因此还是应当回归基础方法,使用 __get_free_pages 并配合 dcache 的无效化操作来完成内存申请更为稳妥。

另外,在以往的认知中,slab 分配器采用的是伙伴系统算法,且最大可申请 128K 的连续内

全部评论 (0)

还没有任何评论哟~