Linux内存系统

Linux操作系统实现了一套完整的虚拟内存系统,管理进程的地址空间和缺页处理。

内存区域描述符(vm_area_struct)

  • 每个进程的虚拟地址空间由一组区域(area) 组成,每个区域对应连续的虚拟地址段。
  • 区域描述符记录了区域的起始地址、结束地址、读写执行权限以及是否与其他进程共享。
  • Linux按页表结构维护这些区域,但区域是比页表更粗粒度的管理单元,便于快速查找。

缺页处理流程

  1. MMU触发缺页异常,内核进入缺页处理函数。
  2. 内核检查触发地址是否位于某个已注册的内存区域内:
    • 若不在任何区域内(如解引用NULL指针),触发段错误(SIGSEGV),终止进程。
    • 若在区域内且权限正确,尝试从磁盘加载数据。
    • 若访问权限违反(如写只读页),也触发段错误。
  3. Linux使用最近最少使用(LRU)近似算法选择牺牲页。

交换机制:当物理内存不足时,内核线程kswapd负责将不常用的页交换到磁盘。

链接到