![当我们有文件映射和请求分页时,为什么休眠要求交换空间的大小大致等于系统总 RAM 的大小?](https://linux22.com/image/215729/%E5%BD%93%E6%88%91%E4%BB%AC%E6%9C%89%E6%96%87%E4%BB%B6%E6%98%A0%E5%B0%84%E5%92%8C%E8%AF%B7%E6%B1%82%E5%88%86%E9%A1%B5%E6%97%B6%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E4%BC%91%E7%9C%A0%E8%A6%81%E6%B1%82%E4%BA%A4%E6%8D%A2%E7%A9%BA%E9%97%B4%E7%9A%84%E5%A4%A7%E5%B0%8F%E5%A4%A7%E8%87%B4%E7%AD%89%E4%BA%8E%E7%B3%BB%E7%BB%9F%E6%80%BB%20RAM%20%E7%9A%84%E5%A4%A7%E5%B0%8F%EF%BC%9F.png)
据我了解,内存中包含程序文本和共享库等内容的页面实际上会映射到该关联文件而不是交换(即映射到 /usr/bin/ls 的一段)。因此,当内核释放内存时,它不需要复制这些页面进行交换,因为当发生页面错误时,它们可以从关联的文件复制回内存。
因此,我们仅将交换空间用于匿名页面(即内存中与某些真实世界文件不相关的页面)。鉴于这一事实,我假设大部分内存页面永远不需要复制到交换空间,因为它们只是根据需要直接从关联的现实世界文件复制到内存中。所以,我的问题是这样的:当大部分内存页面根本不映射到交换空间时,为什么休眠需要大约等于系统总内存的交换空间?
答案1
事实并非如此。休眠图像的默认目标(请参阅那个image_size
设定)大约是已安装内存量的 2/5。