Linux驱动开发之内存管理基础
内存管理主要分为:
- 物理内存管理
- 虚拟内存管理
物理内存管理
页
物理内存以页(page frame
)为单位,一般为4K,如果是4G的内存那么,将会有一个大小为4G/4K=1M
的数组mem_map
,每一项保存着每一页的地址。
Zone
Zone是一些连续物理页的合集,参看下面的图3-2。将物理页分成了3个Zone区:
- ZONE_HIGHMEM:物理内存高于896M的区域
- ZONE_NORMAL:常规内存区域,如果DMA可以在此区域做内存访问,也可以使用这块区域
- ZONE_DMA:0~nM,不同的架构和不同的芯片都可能不一样
因为数组mem_map与物理页对应,因此mem_map也被默认分为了上面三个区域。
内存节点
分为两种:
- UMA:只有一个内存节点,CPU访问内存的内存的任何地址的速度是一样的。
- NUMA:多
个
处理器,每个处理器都有自己的本地内存,通过总线通讯。访问本地内存比访问其他节点的内存快。
物理页面分配器:伙伴系统
伙伴系统的特征与作用:
- 使用物理页为单位 ...