物理内存管理

物理内存组织方式

  • 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

发表回复