首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 内核 内存管理】分区伙伴分配器 ② ( free_area 空闲区域结构体源码 | 分配标志位 | GFP_ZONE_TABLE 标志位区域类型映射表 |分配标志位对应的内存区域类型 )

内核源码 linux-4.12\include\linux\mmzone.h#95 位置 ; MIGRATE_TYPES 是枚举类型 , 值为 4 ; struct free_area { struct...Do not use this directly. */ #define ___GFP_DMA 0x01u #define ___GFP_HIGHMEM 0x02u #define ___GFP_DMA32...#define GFP_ZONE_TABLE ( \ (ZONE_NORMAL << 0 * GFP_ZONES_SHIFT) \ | (OPT_ZONE_DMA << ___GFP_DMA...ZONE_NORMAL << ___GFP_MOVABLE * GFP_ZONES_SHIFT) \ | (OPT_ZONE_DMA << (___GFP_MOVABLE | ___GFP_DMA...-4.12\include\linux\gfp.h#296 上述标志位对应的区域类型如下 : ___GFP_DMA 标志 , 对应 ZONE_DMA 内存区域类型 ; ___GFP_HIGHMEM 标志

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深入理解 Linux 物理内存分配全链路实现

    前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...image.png gfp_mask 掩码中这些区域修饰符 zone modifiers 定义在内核 /include/linux/gfp.h 文件中: #define ___GFP_DMA...如果掩码既没有设置 ZONE_HIGHMEM 也没有设置 __GFP_DMA,则走到最后的分支,默认优先从 ZONE_NORMAL 区域中进行内存分配,如果容量不够则降级至 ZONE_DMA 区域中分配...__GFP_DMA & __GFP_HIGHMEM ZONE_DMA __GFP_HIGHMEM ZONE_HIGHMEM -> ZONE_NORMAL -> ZONE_DMA 除了上述介绍 gfp_t...__GFP_DMA #define GFP_DMA32 __GFP_DMA32 #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM) GFP_ATOMIC

    70410

    深度解读 Linux 内核级通用内存池 —— kmalloc 体系

    而在被大规模运用的服务器 Linux 操作系统中,slab allocator 体系采用的是 slub 实现,所以本文我们还是以 slub 实现来讨论。...关于 alloc_pages 函数的详细内容,感兴趣的同学可以回看下笔者之前的文章 《深入理解 Linux 物理内存分配全链路实现》。...如果 gfp_t flags 明确指定了 __GFP_DMA,则内核向 kmalloc 内存池申请的内存均来自于 ZONE_DMA 物理内存区域。...通常情况下 kmalloc 内存池中的内存都来源于 NORMAL 直接映射区 // 如果没有特殊设定,则从 NORMAL 直接映射区里分配 if (likely((flags & (__GFP_DMA...// DMA 区域中的内存是非常宝贵的,如果明确指定需要从 DMA 区域中分配内存 // 则选取 DMA 区域中的 kmalloc 内存池 return flags & __GFP_DMA

    85830
    领券