unsigned long get_zeroed_page(gfp_t gfp_mask) 用于申请一个页,其内容会被清零.
其源码分析如下:
unsigned long get_zeroed_page(gfp_t gfp_mask)
{
#可以看到这里添加了一个flags,__GFP_ZERO。这个flag 会对申请到的页清零
return __get_free_pages(gfp_mask | __GFP_ZERO, 0);
}
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);
#这里的order是零,申请一个page
page = alloc_pages(gfp_mask, order);
if (!page)
return 0;
#将page 转成虚拟地址返回给用户
return (unsigned long) page_address(page);
}
内存管理API之get_zeroed_page
最新推荐文章于 2023-11-12 16:20:11 发布