源码基于:Linux5.4
在Linux 操作系统中,当内存充足时,内核会尽量多地使用内存作为文件缓存(page cache),从而提高系统的性能。文件缓存页面会添加到文件类型的 LRU 链表中。当内存紧张时,文件缓存页面会被丢弃,或者把修改的文件缓存页面回写到存储设备中,与块设备同步之后便可释放出物理内存。现在的应用程序转向内存密集型,无论系统中有多少物理内存都是不够用的,因此Linux 系统会使用存储设备作为交换分区,内核将很少使用的内存换出到交换分区,以便释放出物理内存,这个机制称为 页交换(swapping),这些处理机制统称为 页面回收(page reclaim)。
在最近几十年操作系统的发展过程中,出现了很多页面交换算法,其中每个算法都有各自的优点和缺点。Linux 内核中采用的页交换算法主要是经典 LRU 链表算法和第二次机会(second chance)法。
LRU 是 Least Recently Used 的缩写,意为最近很少使用。
这个算法的核心思想是:回收的页面应该是最近使用得最少的,为了实现这个目标,最理想的情况是每个页面都有一个年龄项,用于记录最近一次访问页面的时间,可惜x86 CPU硬件并不支持这个特性