内存
是操作系统非常重要的资源,操作系统要运行一个程序,必须先把程序代码段的指令和数据段的变量从硬盘加载到内存中,然后才能被运行。如下图所示:
但内存资源是有限的,随着系统中运行的进程越来越多,系统中可用的内存就会越来越少。那么,当可用内存不足时,Linux 内核是怎么处理的呢?
本文将会介绍,当可用内存不足时,Linux 内核的处理方式。
一、内存不足的处理方式
我们思考一下,当系统的可用内存不足时,进程继续申请内存会发生什么事情?
当系统的可用内存不足时,内核为了保证进程有足够的内存可用,将会对内存进行回收工作。内存回收工作主要包括以下几个步骤:
- 内核为了加速某些操作(如文件 I/O),会对操作的结果进行缓存(如文件页缓存),而缓存使用的内存是可以被回收的。所以,当可用内存不足时,首先会回收内核中的缓存。
- 如果回收内核缓存后,系统的可用内存仍然处于不足。那么,内核将会触发
swap
机制。swap
机制会将某些进程所占用的内存交换(写入)到硬盘中,然后释放这些内存,从而让系统有更多可用的内存。本文将会重点介绍swap
机制。 - 如果触发
swap
机制后,系统的可用内存仍不能满足系统需求,那么将会触发OOM(Out Of Memory)
机制。OOM
机制将会挑选一些进程,然后将这些进程杀死来,从而获取更多可用内存。
由于回收内存的方式有三种,所以本文重点以 swap
机制作为分析对象,来介绍当内存不足时,内核是怎么进行内存回收工作的。
二、swap机制原理
在分析 swap
机制的实现前&