因此在后来linux-2.4.x的更新中, 删除了这个字段, 取而代之的是page->flags的最高ZONE_SHIFT位和NODE_SHIFT位, 存储了其所在zone和node在内存区域表zone_table的编号索引. 那么内核在初始化内存管理区时, 首先建立管理区表zone_table. 参见mm/page_alloc.c?v=2.4.37, line 38 代码语言
alloc_flags |= alloc_flags_nofragment(ac.preferred_zoneref->zone, gfp_mask);//用于内存碎片化方面的一个优化,首选zone是高端zone。 /* First allocation attempt */ page = get_page_from_freelist(alloc_mask, order, alloc_flags, &ac);//从伙伴系统的空闲链表分配内存,成功返回第一个页面的page if...
【file:/mm/page_alloc.c】staticboolfree_pages_prepare(structpage *page,unsignedintorder){inti;intbad =0;trace_mm_page_free(page, order);kmemcheck_free_shadow(page, order);if(PageAnon(page)) page->mapping =NULL;for(i =0; i < (1<< order); i++) bad +=free_pages_check(page + i...
这很容易检查,因为空闲内存块的分配阶存储在第1个struct page实例的private成员中,而page_order可以读取该值。 下列代码用于确定一对伙伴是否能够合并: mm/page_alloc.c static inline void __free_one_page(struct page *page,struct zone *zone, unsigned int order) { int migratetype = get_pageblock_migrat...
name:是一个以NULL结束的字符串表示这个区的名字。内核启动期间初始化你这个值,其代码位于mm/page_alloc.c中。三个区的名字分别为DMA、Normal、HighMem 三、页分配 下面是 内核实现的接口,通过这些接口在内核内分配和释放内存 内核提供了一种请求内存的底层机制,并提供了对它进行访问的几个接口。所...
alloc_page(mask) 是前者在order = 0情况下的简化形式,只分配一页 include/linux/gfp.h?v=4.7, line 483 get_zeroed_page(mask) 分配一页并返回一个page实例,页对应的内存填充0(所有其他函数,分配之后页的内容是未定义的) mm/page_alloc.c?v=4.7, line 3900 __get_free_pages(mask, order) __get_...
分配内存操作时的区域顺序,当调用free_area_init_core()时,由mm/page_alloc.c文件中的build_zonelists()函数设置 nr_zones 当前节点中不同内存域zone的数量,1到3个之间。并不是所有的node都有3个zone的,比如一个CPU簇就可能没有ZONE_DMA区域 node_mem_map node中的第一个page,它可以指向mem_map中的任何一...
get_zeroed_page的实现也没什么困难, 对__get_free_pages使用__GFP_ZERO标志,即可分配填充字节0的页. 再返回与页关联的内存区地址即可. // http://lxr.free-electrons.com/source/mm/page_alloc.c?v=4.7#L3900unsigned longget_zeroed_page(gfp_t gfp_mask) ...
源码路径 :linux-4.12\mm\page_alloc.c#3029 二、启用 cpuset 检查判定 如果 启用了 cpuset 功能 , 用户设置了 ALLOC_CPUSET 标志位 , 要求 检查 cpuset , 如果cpuset 不允许当前 进程 分配 该 内存节点 内存页 , 则直接 continue , 本次循环 " 备用区域列表 " 操作退出 ,...
一、__alloc_pages_nodemask 函数源码分析 ( 快速路径 | 慢速路径 ) 二、get_page_from_freelist 快速路径 调用函数 完整源码 在【Linux 内核 内存管理】物理分配页 ② ( __alloc_pages_nodemask 函数参数分析 | __alloc_pages_nodemask 函数分配物理页流程 ) 博客中 , 分析了 __alloc_pages_nodemask 函数...