接上一篇博文:buddy 系统分配器之快速分配(1)
源码基于:Linux5.4
在上一文中主要分析了prepare_alloc_pages() 和 alloc_flags_nofragment(),为了真正申请操作中做一些准备工作,虽然是准备工作,但是涉及的细节还是比较多的,所以用了单独一篇博文。本文将接上一文,详细剖析快速分配的核心函数 get_page_from_freelist().
- include/linux/mmzone.h
-
- #define for_next_zone_zonelist_nodemask(zone, z, zlist, highidx, nodemask) \
- for (zone = z->zone; \
- zone; \
- z = next_zones_zonelist(++z, highidx, nodemask), \
- zone = zonelist_zone(z))
一个for 循环,查询不大于 highidx 的zone。
- mm/page_alloc.c
-
- if (cpusets_enabled() &&
- (alloc_f