一句话来说,虚拟内存是通过MMU地址转换和懒加载实现的让应用程序以为自己独享一大块内存的机制,Swap分区是一种使用换入换出机制实现的缓解linux内存不足的缓冲机制。

即使一个Linux系统没有启用Swap分区,虚拟内存也是存在的,二者根本就在不同的维度上。

一个应用程序申请内存时,操作系统会为它的页表(当然这里可以有多级机制,段-页目录-页表之类的)新增一个页,但是在程序真正操作这个地址之前,这个页并不会真的映射到物理内存上,只有当程序开始操作这个地址,操作系统才会通过缺页中断映射这个页。

Swap分区的工作层更底层,Swap分区会在操作系统检测到物理内存不足时运作,将不活跃的内存换出至Swap分区,等到再次访问时再换入

下面这部分是我猜的,找了半天也没找到一张好的linux访问内存的流程图

一个没有swap分区的系统,当应用程序要一个地址,只要这个地址是合法里,肯定在内存里,对于有swap分区的系统,如果内存里没有,那就得到磁盘里去找le