http://blog.chinaunix.net/uid-20729583-id-1884604.html /* *下面的alloc_pages(gfp_mask,order)函数用来请求2^order个连续的页框 */ #define alloc_pages(gfp_mask, order) \ alloc_pages_node(numa_node_id(),…
这个函数是内存分配的入口函数,最终会调用__alloc_pages_nodemask函数,关于内存分配的所以内容都会在这个函数中实现。它在mm/page_alloc.c中实现如下: struct page * __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, int preferred_nid,//alloc_pages函数最终调用此函数,伙伴系统核心函数 nodemask_t ...
在上述代码中,第一步是声明需要分配的页面数量num_pages。然后,调用alloc_pages函数从物理内存池中分配...
二、__alloc_pages_nodemask 函数完整源码 代码语言:javascript 复制 /* * This is the 'heart' of the zoned buddy allocator. */struct page*__alloc_pages_nodemask(gfp_t gfp_mask,unsigned int order,struct zonelist*zonelist,nodemask_t*nodemask){struct page*page;unsigned int alloc_flags=ALLOC_WM...
*/ struct dev_pagemap *pgmap; /* ZONE_DEVICE pages are never on an * lru or handled by a slab * allocator, this points to the * hosting device page map. */ struct { /* slub per cpu partial pages */ struct page *next; /* Next partial slab */ #ifdef CONFIG_64BIT int pages;...
与UMA的alloc_pages()相比较,UMA只有一个节点,contig_page_data.UMA与NUMA共同使用__alloc_pages === include/linux/mm.h343352===343#ifndefCONFIG_DISCONTIGMEM//只有这个无定义,才使用uma的__alloc_pages344staticinlinestructpage *alloc_pages(intgfp_mask,unsignedlongorder)83345{346/* 347 * Gets optimi...
page =alloc_pages(gfp_mask, order);if(!page)return0;return(unsignedlong)page_address(page); }EXPORT_SYMBOL(__get_free_pages); 在这种情况下, 使用了一个普通函数而不是宏, 因为alloc_pages返回的page实例需要使用辅助 函数page_address转换为内存地址. 在这里,只要知道该函数可根据page实例计算相关页的...
一、__alloc_pages_nodemask 函数源码分析 ( 快速路径 | 慢速路径 ) 在__alloc_pages_nodemask 函数中 , 先调用 get_page_from_freelist 函数 , 尝试使用 " 快速路径 " 分配内存 , 如果内存分配失败 , 再跳转到 out 处 , 使用 " 慢速路径 " 分配...
prepare_alloc_pages函数负责为alloc_context结构体的局部变量ac赋予初始值,尤其是high_zoneidx和zonglist的设定,其依据是分配掩码gfp_mask。根据gfp_mask的不同,优先分配的内存zone也有所不同。例如,对于仅包含ZONE_DMA32和ZONE_NORMAL两个zone的内存节点,high_zoneidx值决定了优先分配的zone。finali...
__alloc_pages_nodemask 函数 定义在 Linux 内核源码的 linux-4.12\mm\page_alloc.c#4003 位置 , 函数原型如下 : /* * This is the 'heart' of the zoned buddy allocator. */ structpage* __alloc_pages_nodemask(gfp_tgfp_mask,unsignedintorder, ...