物理内存管理
物理内存组织方式 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)