当计算机进入休眠状态时,交换数据将如何处理?


12

当计算机进入休眠模式时,它会将RAM的内容保存到交换空间中,以便它可以在重新开机时准确地恢复到中断处。

因此,如果您当前使用的内存多于RAM,该怎么办。在这种情况下,某些原本在RAM中的数据将被保存以进行交换。

一个例子。一台计算机具有1GB的RAM和1GB的交换空间。它目前正在使用100MB RAM和500MB交换空间。因此,需要记住大约1.4GB的内存来保存其状态。但是,交换空间仅为1GB。

在这种情况下会发生什么?

~~编辑~~

如下所述,休眠失败。接下来是一个后续问题:

如果失败,将在哪里报告错误?

Answers:


11

那取决于休眠的实现。即使将问题限制在Linux上,实现也会随着时间而发展。

首先,请考虑将某些RAM用于磁盘缓存。无需将其移至交换,因为可以在系统恢复后从磁盘重新加载它。在具有良好成本/效率平衡的系统上,通常会将大约一半的RAM分配给缓存。(另请参阅为什么在有足够多的RAM时使用swap。)在Linux中,某些早期的实现会将所有分配的内存存储到swap中,但是休眠的当前实现会跳过磁盘缓存。

其次,某些系统在将内存写入交换时会对其进行压缩,这可能会使所需交换的确切数量难以预测。某些版本的Linux休眠支持已支持压缩。我不知道目前的情况是否如此。

如果没有足够的交换空间,通常可以期望的是休眠将失败:系统将尝试将RAM的(有用)内容存储到交换中,并且一旦检测到没有足够的空间,休眠尝试将中止(通常在控制台和系统日志中显示一条错误消息)。据我所知,Linux一直都是这样(不是真的存在另一种明智的行为)。


1
我在virtualbox机器上尝试了此操作,尽管它没有向用户显示任何消息,但它确实失败了(我尝试使用ubuntu 10.4)。哪个系统日志将报告此错误?
大卫·奥尼尔

3
@David:肯定应该有东西/var/log/kern.log。我不知道控制台上是否没有消息是该特定内核版本的怪胎还是故意的Ubuntu配置(我知道他们已经故意抑制了其他控制台输出)。
吉尔斯(Gillles)“所以-别再邪恶了”,2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.