当物理内存出现不足时,Linux内存管理子系统需要释放部分物理页面内存。这一人任务由内核的交换守护进程kswapd完成,该内核守护进程实际是一个内核线程,它在内核初始化时启动,并周期的运行。就是为了保证系统中具有足够的空闲页面,从而使内存管理子系统能够正常运行法。
一.交换的基本原理
在计算机技术的发展史上很早就有了把内存的内容与一个专用的磁盘空间交换技术,在Linux中,把用作交换的磁盘空间叫交换文件或交换区。
当空闲内存数量小于一个固定的极限值时,就执行换出操作。换出操作包含把进程的整个地址空间拷贝到磁盘上。反之,当调度算法选择出一个进程时,整个进程又被从磁盘中交换出来。但是在现在,交换的单位是页面而不是进程。但交换还是需要付出一定的代价,尤其是时间的代价。页面交换是不得已而为之,因为页面交换用时间交换空间,所以在时间要求比较紧急的实时系统中,是不宜采用页面交换机制的。因为这一点,所以Linux给用户提供了一种选择,可以通过命令或系统调用开启或关闭交换机制。
在页面交换中,页面置换算法是影响交换性能的关键性指标,其复杂性主要与换出有关。
我们在这里所提到的页或页面指的是其中存放的数据,所谓页面的换入换出实际上是指页面中数据的换入换出。
1.那种页面被换出
实际上,交换的最终目的是页面的回收。而在内存中并非所有的页面都是可以被换出的,只有与用户空间建立映射的页面才会被换出,而内核空间中内核所占的页面则常驻页面。
可以把用户空间中的页面按其内容和性质分为以下几种。
(1)进程映像所占的页面,包括进程的代码段,数据段,堆栈段以及动态分配的“存储堆”。(进程的代码段