源码基于:Linux5.4
对于数据结构 pg_data_t 在 zone初始化一文中已经简单地阐述了,其中成员变量 node_zonelists 也进行了简单地说明,但是涉及其初始化的过程因为内容比较多,还是另开一篇博文进行记录。
- include/linux/mmzone.h
-
- enum {
- ZONELIST_FALLBACK, /* zonelist with fallback */
- #ifdef CONFIG_NUMA
- ZONELIST_NOFALLBACK, /* zonelist without fallback (__GFP_THISNODE) */
- #endif
- MAX_ZONELISTS
- };
-
- typedef struct pglist_data {
- struct zone node_zones[MAX_NR_ZONES];
- struct zonelist node_zonelists[MAX_ZONELISTS];
其他的成员都在 zone初始化一文中说明过,这里不过多叙述,这里重复列举只是为了引出成员变量 node_zonelists 数组,对于UMA 来说数组个数为1,也就是ZONELIST_FALLBACK。
有一个备用的zonelist,当首选的内存节点和区