unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
用于以gfp_mask分配方式分配2的order次方个连续的物理页
其源码分析如下:
unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
{
struct page *page;
/*
* __get_free_pages() returns a 32-bit address, which cannot represent
* a highmem page
*/
#可见通过这个函数不能申请到高端内存
VM_BUG_ON((gfp_mask & __GFP_HIGHMEM) != 0);
#首先通过alloc_pages 申请到page,然后通过 page_address 将page 转成虚拟地址返回给用户
#使用,由于这里已经判断page是否为null了。所以用于在调用__get_free_pages 只要判断
#返回值是0就表示调用失败了.
page = alloc_pages(gfp_mask, order);
if (!page)
return 0;
return (unsigned long) page_address(page);
}
内存管理API之__get_free_pages
最新推荐文章于 2024-07-22 20:12:27 发布