一文读懂Linux内核内存映射与页表

💡 原文中文,约3900字,阅读约需10分钟。
📝

内容提要

本文介绍了内存映射和页表的工作原理,进程通过内存映射将虚拟内存地址映射到物理内存地址,通过页表记录映射关系。大页可以减少页表大小和遍历次数,避免swap和减少内存开销。建议关闭透明大页。

🎯

关键要点

  • 内存映射将虚拟内存地址映射到物理内存地址,进程不能直接访问物理内存。
  • 每个进程都有独立的虚拟地址空间,分为内核空间和用户空间。
  • 内核维护页表记录虚拟地址与物理地址的映射关系,页表大小受页大小影响。
  • 大页通常为2MB,减少页表大小和遍历次数,降低内存开销。
  • 大页的优点包括减少页表大小、遍历次数和避免swap。
  • 大页的缺点包括需要预先分配和可能导致内存浪费。
  • 大页的分配需要检查系统支持情况并设置相关参数。
  • 透明大页在某些Linux系统中默认开启,可能导致问题,建议关闭。

延伸问答

内存映射的作用是什么?

内存映射将虚拟内存地址映射到物理内存地址,使得进程能够间接访问物理内存。

页表的主要功能是什么?

页表记录虚拟地址与物理地址的映射关系,帮助操作系统管理内存。

大页的优点有哪些?

大页可以减少页表大小、降低遍历次数、避免swap,并减少内存开销。

使用大页时需要注意哪些缺点?

大页需要预先分配,可能导致内存浪费,并且在调整内存时需要重新配置。

如何检查系统是否支持大页?

可以通过查看/proc/meminfo中的HugePages部分来确认系统支持情况。

透明大页的默认设置是什么?

在某些Linux系统中,透明大页默认开启,但可能导致性能问题,建议关闭。

➡️

继续阅读