在整个系统生命周期中,物理内存页面可以用于存储不同类型的数据。它可以是系统内部的数据结果,如供驱动程序使用的DMA缓冲区、从文件系统读取的数据、用户空间分配的内存等 。
根据内存页面的使用场景不同,Linux内存管理系统采用不同的管理策略。因为内存页面可以缓存任何来源的数据,所以它是可以被释放并被重新利用的。例如,即可以读取硬盘的数据到内存中,也可通过交换将内存页面的数据再写入到硬盘(内存回收)。
在大部份情况下,如果内存页面在内核空间用于DMA缓存区,那么它是不能直接被回收再利用的,并且一直持有该页面空间,直到用户去主动释放。但是,在某些情况下,即使是内核空间的页面也可以被回收。例如从文件系统中重复读取数据到内存中,如果内存不存,那么内存管理系统可以根据一定的算法策略对内存进行回收再利用。
Linux内存管理系统可以同步或异常的进行页面内存的回收。在系统刚启动时,大部份内存是空闲的,能够立即满足空闲页面的请求。随着系统的负载的增加,可用于直接分配的空闲页面越来越少,当它少于某一阀值的时候,一个分配请求到来就会唤醒kswapd守护进程,它将对内存页面进行异步扫描,判断它们的可用性后,要么释放,要么交换到存储设备中。随着内存使用量的继续增加,到达另一个最小的阀值,这个阀值触发直接回收的操作,在这种情况下,内存分配立即停止,直到回收足够多的内存页面来满足请求。