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

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

内核源码 linux-4.12\include\linux\mmzone.h#95 位置 ; MIGRATE_TYPES 是枚举类型 , 值为 4 ; struct free_area { struct...#95 二、分配标志位 ---- 申请 物理页 时 , 内存区域 类型 是 根据 最低的 4 个标志位 确定的 ; 常用的 4 个标志位如下 , 这些标志位定义在 Linux 内核源码 linux...-4.12\include\linux\gfp.h#296 上述标志位对应的区域类型如下 : ___GFP_DMA 标志 , 对应 ZONE_DMA 内存区域类型 ; ___GFP_HIGHMEM 标志..., 对应 ZONE_HIGHMEM 内存区域类型 ; ___GFP_DMA32 标志 , 对应 ZONE_DMA32 内存区域类型 ; #ifdef CONFIG_HIGHMEM #define OPT_ZONE_HIGHMEM...ZONE_HIGHMEM #else #define OPT_ZONE_HIGHMEM ZONE_NORMAL #endif #ifdef CONFIG_ZONE_DMA #define OPT_ZONE_DMA

1.3K20

Linux 内核 内存管理】物理内存组织结构 ⑤ ( 内存区域 zone 类型简介 | 内存区域类型zone_type 枚举源码分析 | zone_type 枚举源码 )

可移动区域 6、ZONE_DEVICE 设备区域 三、zone_type 枚举源码 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 内存页 Page , Linux...物理内存 " ; 一、内存区域 zone 类型简介 ---- " 内存节点 " 是内存管理的 最顶层结构 , " 内存节点 " 再向下划分 , 就是 " 内存区域 " , " 内存区域 " 的类型 在 Linux...内核中使用 enum zone_type 枚举类型进行描述 , zone_type 枚举定义在 Linux 内核源码的 linux-4.12\include\linux\mmzone.h#293 位置...高端内存区域 ZONE_HIGHMEM 中的 HIGHMEM 是 " 高端内存区域 " , 这是 32 位架构中的概念 , DMA 和 DMA32 又称为 " 低端内存区域 " , 内核空间 与...-4.12\include\linux\mmzone.h#293

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

Linux-3.14.12内存管理笔记【建立内核页表(1)】

前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。...include/asm/setup.h) #define MAXMEM_PFN PFN_DOWN(MAXMEM) 其中PFN_DOWN(x)的定义为: (file:/include/linux...Linux是一个支持多硬件平台的操作系统,各种硬件芯片的分页并非固定的2级(页全局目录和页表),仅仅Intel处理器而言,就存在3级的情况(页全局目录、页中间目录和页表),而到了64位系统的时候就成了4...所以Linux为了保持良好的兼容性和移植性,系统设计成了以下的4级分页模型,根据平台环境和配置的情况,通过将页上级目录和页中间目录的索引位设置为0,从而隐藏了页三级目录和页中间目录的存在。...由此管中窥豹,看到了Linux内存分页映射模型的存在和相关设计,暂且也就先了解这么多。 分析宏是一件很乏味的事情,不过以小见大却是一件很有意思的事情。

1.8K41

物理地址和虚拟地址的分布

进一步,针对不同的用途,Linux内核将所有的物理页面划分到3类内存管理区中,如图,分别为ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM。 ?...ZONE_HIGHMEM 的范围是 896M~结束,该区域即为高端内存,内核不能直接使用。 Linux内核空间虚拟地址分布 ?...而将用户数据、页表(PT)等不常用数据放在 ZONE_HIGHMEM 里,只在要访问这些数据时才建立映射关系(kmap())。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...,Linux 采取了动态映射的方法,即按需的将 ZONE_HIGHMEM 里的物理页面映射到 kernel space 的最后 128M 线性地址空间里,使用完之后释放映射关系,以供其它物理页面映射。

2K111

物理地址和虚拟地址的分布

进一步,针对不同的用途,Linux内核将所有的物理页面划分到3类内存管理区中,如图,分别为ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM。 ?...ZONE_HIGHMEM 的范围是 896M~结束,该区域即为高端内存,内核不能直接使用。 Linux内核空间虚拟地址分布 ?...而将用户数据、页表(PT)等不常用数据放在 ZONE_HIGHMEM 里,只在要访问这些数据时才建立映射关系(kmap())。...Linux物理地址和虚拟地址的关系 ? Linux 将 4G 的线性地址空间分为2部分,0~3G 为 user space,3G~4G 为 kernel space。...,Linux 采取了动态映射的方法,即按需的将 ZONE_HIGHMEM 里的物理页面映射到 kernel space 的最后 128M 线性地址空间里,使用完之后释放映射关系,以供其它物理页面映射。

2K31

物理内存是如何组织管理的

Linux针对如何合理的使用物理内存,软件上设计了多种的内存管理方法。今天我们就来讨论下Linux是如何组织物理内存的,通俗的说就是如何管理电脑的内存条的。...Linux使用节点(node),区域(zone),页(page)三级结构来描述整个物理内存。...DMA_ZONE是因为在X86架构下,有些DMA设备只能访问16M以下的地址,所以设计出了DMA_ZONE,当DMA设备访问内存时,从DMA_ZONE去获取内存 HIGHMEM_ZONE: HIGHMEM_ZONE...而896-4G的不能映射的区域就叫highmem_zone了。此处896是经典的x86架构的值,arm架构的值没研究。...通常将HIGHMEM_ZONE的内存区域称为高端内存,896M以下的内存称为低端内存,低端内存是线性映射的 ?

1.5K10

Linux分区页框分配器

分区页框分配器 页框分配在内核里的机制我们叫做分区页框分配器(zoned page frame allocator),在linux系统中,分区页框分配器管理着所有物理内存,无论你是内核还是进程,都需要请求分区页框分配器...如果规定从HIGHMEM区获取,就按照顺序从 ZONE_HIGHMEM -> ZONE_NORMAL -> ZONE_DMA 获取。 ?...可以看页框分配器的核心函数是__alloc_pages_nodemask,在讲这个函数之前我们先看下两个标志: gfp_mask __GFP_DMA:请求在ZONE_DMA区域中分配页面; __GFP_HIGHMEM...:请求在ZONE_HIGHMEM区域中分配页面; __GFP_MOVABLE:ZONE_MOVALBE可用时在该区域分配页面,同时表示页面分配后可以在内存压缩时进行迁移,也能进行回收; __GFP_RECLAIMABLE

1.4K30

Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

由于NUMA存储结构的引入,这就需要相应的管理机制来支持, linux 2.4版本就已经开始对其支持了。...于是当前分析的3.14.12版本,linux的物理内存管理机制将物理内存划分为三个层次来管理,依次是:Node(存储节点)、Zone(管理区)和Page(页面)。 ?...ZONE_HIGHMEM区则是系统除了ZONE_DMA和ZONE_NORMAL区后剩下的物理内存,这个区不能直接被内核映射,x86环境中,该区通常为896M以后的内存。 为什么要有高端内存的存在?...linux内核的设计就是腾出32个页全局目录项,256的1/8。那么32个页全局目录项对应多大的内存空间?算一下可以知道是128M,也就是说直接映射的内存空间是896M。...这里sparse memory涉及到linux的一个内存模型概念。linux内核有三种内存模型:Flat memory、Discontiguous memory和Sparse memory。

82920
领券