物理内存组织方式
- SMP: CPU 通过总线访问内存, 称为 SMP 对称多处理器, 采用平坦内存模型, 物理页号连续, 总线成为瓶颈
- NUMA: CPU 都有本地内存, 访问内存不用总线, 称为 NUMA 非一致内存访问
采用非连续内存模型,页号不连续 - 稀疏内存模型
下面以NUMA 为例.
节点
- 数据结构 pglist_data 表示 NUMA 节点
包括 id,page 数组,起始页号, 总页数, 可用页数
区域 zone
-
节点分为多个区域 zone
ZONE_DMA; ZONE_NORMAL; ZONE_HIGHMEM, ZONE_MOVABLE -
数据结构 zone 表示 区域
包含第一个页页号; 区域总页数; 区域实际页数; 被伙伴系统管理的页数; 用 per_cpu_pageset 区分冷热页(热页, 被 CPU 缓存的页)
页
- 数据结构 page 表示,
分配方式:- 匿名页分配;
- 分配小块内存:
- Linux 采用 slab allocator 技术; 申请一整页, 分为多个小块存储池, 用队列维护其状态(较复杂)
- slub allocator 更简单
- slob allocator 用于嵌入式
- page 记录: 第一个 slab 对象; 空闲列表; 待释放列表
页分配
- 使用伙伴系统 进行管理分配
- Linux 把空闲页分组为 11 个页块链表, 链表管理大小不同的页块(页大小 2^i * 4KB)
Be First to Comment