Skip to content

Linux 内核 MM (Memory Management) 子系统深度分析

概述

本文档是 Linux 内核 MM (Memory Management) 子系统的全面深度分析,涵盖从页面分配到回收的完整架构。

目录结构

核心框架

内存管理

MM 架构

用户空间
    |
    v
系统调用 (malloc, mmap, brk, ...)
    |
    v
MM 子系统
    |
    +---> 页面分配 (page_alloc.c)
    |           |
    |           +---> __alloc_pages()
    |           +---> get_page_from_freelist()
    |           +---> SLUB (kmalloc/slub.c)
    |
    +---> 缺页中断 (memory.c)
    |           |
    |           +---> handle_mm_fault()
    |           +---> do_anonymous_page()
    |           +---> do_fault()
    |           +---> do_swap_page()
    |           +---> do_wp_page() (COW)
    |
    +---> 页面回收 (vmscan.c)
    |           |
    |           +---> kswapd (后台)
    |           +---> shrink_lruvec()
    |           +---> folio_check_references()
    |
    +---> Swap (swapfile.c, swap_state.c)
    |           |
    |           +---> swap_in / swap_out
    |           +---> swap cache
    |
    +---> OOM Killer (oom_kill.c)
    |           |
    |           +---> out_of_memory()
    |           +---> oom_badness()
    |
    v
页表 (PTE/PMD/PUD/PGD)
    |
    v
物理内存 (DRAM/PMEM)

核心概念

内存区域 (Zone)

区域说明
ZONE_DMA适用于 DMA 的低内存
ZONE_DMA3232位 DMA 可访问
ZONE_NORMAL直接映射的内核内存
ZONE_HIGHMEM高端内存 (32位)
ZONE_MOVABLE可移动页区域

GFP 标志

标志说明
GFP_KERNEL内核普通分配,可等待
GFP_ATOMIC原子分配,不能等待
GFP_USER用户空间分配
GFP_HIGHUSER高用户优先级

页面状态

状态说明
PG_locked页面被锁定
PG_dirty页面有未刷新的修改
PG_active页面在 active LRU
PG_referenced页面被访问过
PG_swapbacked页面有 swap 后备

任务统计

类别数量
核心框架3
内存管理4
总计7

来源

本分析基于 Linux 内核 6.8+ 源码。

深度分析

  • mm_deep_dive_r1.md - 深度分析 R1: Buddy, Slab, vmalloc, mmap, PageCache
  • mm_deep_dive_r2.md - 深度分析 R2: SLUB Freelist, kfree/slab_free, kmem_cache_alloc, Folio, Compaction, Per-CPU Sheaves

基于 VitePress 构建