unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
功能:以gfp_mask的方式分配2^order个物理页面
gfP_mask:分配的方式,指出如何分配在哪分配如GFP_KERNEL
order:分配2^order个页面
返回值:返回分配的第一个页的逻辑地址
头文件: #include <gfp/linux.h>
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
{
struct page *page;
VM_BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0);
page = alloc_pages(gfp_mask, order);
if (!page)
return 0;
return (unsigned long) page_address(page);
}
unsigned long get_zeroed_page(gfp_t gfp_mask)
功能:获得物理页地址返回的是虚拟地址类似于__get_free_pages但此函数会将页数据清零
gfp_mask:分配方式 GFP_KERNEL GFP_ATOMIC
内核代码:
unsigned long get_zeroed_page(gfp_t gfp_mask)
{
return __get_free_pages(gfp_mask | __GFP_ZERO, 0);
}
头文件:#include <linux/gfp.h>
此函数申请的空间用fre