上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.3.2 内存管理
虚拟内存使你的系统看起来好像它有比物理内存更多的内存。事实上,每个进程都有很多(虚拟)内存。它是这样工作的:物理内存和虚拟内存都被划分为固定长度的块,我们称为页面。
图2-3显示了两个进程的虚拟地址空间,每个进程都有自己的页表。这些页表将进程的虚拟页映射到主内存(又名R A M)中的物理页面。
图2-3:虚拟内存管理概览
多个虚拟页可以通过各自的进程级页表指向同一个物理页。在某种意义上,这就是内存管理的核心:有效地为每个进程提供其页面实际存在于RAM中的假象,同时优化地使用现有空间。
每次CPU访问进程的虚拟页面时,原则上CPU必须将进程使用的虚拟地址转换为相应的物理地址。为了加快这一过程(可能是多层的,因此很慢),现代CPU架构支持一种称为转换后援缓冲器(TLB)的片上查找(https://oreil.ly/y3xy0)。TLB实际上是一个小缓存,在发生错误时,它会导致CPU通过进程页表计算页面的物理地址并更新TLB。
传统上,Linux的默认页面大小为4KB,但从内核v2.6.3开始,它支持大页面(https://oreil.ly/7rqLO),以更好地支持现代架构和工作负载。例如,64位Linux允许每个进程使用最多128TB的虚拟地址空间(虚拟是理论上可寻址的内存地址数量),总共大约64TB的物理内存(物理是你机器中的RAM数量)。
好的,这是很多理论信息。让我们从更实际的角度来看一下。一个非常有用的工具是/proc/meminfo接口,它可以计算出内存相关的信息,比如有多少内存可用:
❶列出物理内存(RAM)的详细信息,这里是4GB。
❷列出虚拟内存的详细信息,这比34TB多一点。
❸列出大页面信息,显然这里的页面大小是2MB。
接下来,我们继续讨论下一个内核功能:网络。