1.什么是swap?
swap空间(swap space)是硬盘上的一块区域。虚拟内存是由可访问的物理内存和swap space组成,也即swap space是虚拟内存的一部分。swap存储那些暂时不活跃的内存页面。当操作系统决定要给活跃的进程(应该是指申请物理内存的进程和新创建的进程)分配物理内存空间并且可利用的物理内存不足时会用到swap space。
要清楚Linux中把物理内存的页面分为了两种类型匿名页和文件页。匿名页是指用户进程申请的堆内存所在物理页面;而文件页是指用于page cache(页高速缓存)和buffer cache(buffer缓存,用于缓存磁盘块)的内存页以及通过内存映射获取的文件映射页。文件页通常直接回收就行。匿名页才需要交换到swap space中暂存,因为匿名页里面的内容尽管进程暂时不访问,但还有可能被再次访问,因此不能直接回收。
如果物理内存紧张时,把不活跃的物理内存页面(就是这个物理页面里面的数据不经常访问)从物理内存移动到swap space并且释放该页所占用的物理内存,这就叫换出。对于进程中的虚拟地址空间中的一个页面来说,可以通过页表找到该页对应的物理页是存在于物理内存上还是swap space中。那如果说某个进程要访问的页面在swap space中