Skip to main content

15 物理内存管理

物理内存的组织方式

平坦内存模型(Flat Memory Model):每个页有一个结构 struct page 表示,放在一个数组里面,根据页号通过下标找到相应的 struct page 结构。整个物理内存的布局非常简单、易管理。

SMP(Symmetric multiprocessing),对称多处理器。

NUMA(Non-uniform memory access),非一致内存访问。

节点

  • 每一个节点都有自己的 ID:node_id;
  • node_mem_map 就是这个节点的 struct page 数组,用于描述这个节点里面的所有的页;
  • node_start_pfn 是这个节点的起始页号;
  • node_spanned_pages 是这个节点中包含不连续的物理内存地址的页面数;
  • node_present_pages 是真正可用的物理页面的数目。

区域

数据结构 zone

struct page:组成物理内存的基本单位

  • 匿名页(Anonymous Page):用一整页的内存,或者直接和虚拟地址空间建立映射关系。
  • 仅需分配小块内存。

页的分配

小内存的分配

使用 slub 分配器进行分配

分配缓存块的时候,要分两种路径,快速通道 fast path 和 普通通道 slow path。

页面换出

页面只有在被使用的时候,才会放在物理内存中。如果过了一段时间不被使用,即便用户进程并没有释放它,物理内存管理也有责任做一定的干预。

内存管理系统应该主动去做,内核线程 kswapd 在系统初始化的时候就被创建,会进入一个无限循环,直到系统停止。在这个循环中,如果内存使用没有那么紧张,那它就可以放心睡大觉;如果内存紧张了,就需要去检查一下内存,看看是否需要换出一些内存页。