基于2.6.32内核源码分析

首选内存区和gfp描述符关系运算

64位系统默认没有开启CONFIG_HIGHMEM选项,因此只有4个内存区DMA(0),DMA32(1),NORMAL(2),MOVABLE(3),因此在gfp标志中关于内存区选择的标志有如下4个,并通过宏GFP_ZONEMASK从gfp标志中提取出这些个标志。 然后通过一个人工定义的映射表将上面的四个gfp标志映射为具体的内存区,进而确定分配内存时首选内存区。

1 #define __GFP_DMA    ((__force gfp_t)0x01u)
2 #define __GFP_HIGHMEM    ((__force gfp_t)0x02u)
3 #define __GFP_DMA32    ((__force gfp_t)0x04u)
4 #define __GFP_MOVABLE    ((__force gfp_t)0x08u)  /* Page is movable */
5 #define GFP_ZONEMASK    (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
View Code

相关文章: