我希望能够在强制或意外关机的情况下让我的计算机恢复到最后的状态(打开程序等),而无需实际让机器进入休眠或混合睡眠状态。
这可能吗?Windows 会从休眠或混合睡眠时创建的休眠数据启动,但是否可以在 Windows 中手动创建/更新此休眠数据?
是否有第三方程序可以完成类似的事情?(不包括虚拟机)我不需要精确的状态保存,但至少需要一种记住打开的内容并再次打开它们的方法。
目前,我会在 1 小时不活动后让系统进入睡眠状态(混合睡眠),这样如果发生断电,系统就可以从混合睡眠状态数据启动。这很好,但它使我无法全天候运行任何系统,而不必处理偶尔的断电问题。(这种情况似乎比正常情况更频繁地发生)
答案1
至少有两个原因导致你不能这样做。
第一。休眠功能之所以能实现,得益于ACPI 电源状态。这并非“将 RAM 转储到硬盘并关机”那么简单。RAM 并不是一切,还有一些设备需要恢复到之前的状态。这就是 ACPI 加入进来的地方 - 它允许您在进入 S5 状态时暂停设备,并在返回 S0 时恢复它们。但 S5 意味着关机,因此您不能在不关闭计算机的情况下使计算机休眠。
第二个。假设我们有一些硬件可以让正在运行的计算机休眠,同时保持其运行。这会产生一个类似于您在处理并行计算时可能遇到的问题。
计算机按顺序工作。它们逐个执行一系列简单(非常简单,例如“将该数字增加 4”)指令。现代 PC 具有多核 CPU,理论上可以同时处理多个指令,但这并不总是可行的。例如,假设我们有三条指令。
- 从用户读取 X。
- 将 X 乘以 2。
- 将 X 增加 7。
步骤 2 必须等到步骤 1 完成才能进行,因为此时 X 是未知的。同样,步骤 3 必须等到步骤 2 完成才能进行,因为 X 的值很可能在步骤 2 中发生变化。这些步骤必须逐一处理。
现在让我们假设我们有一台处理银行转账的计算机。你的银行账户上有一定数额的钱,你想把 100 美元转到你朋友的账户上。该算法如下所示,出于某种原因必须逐步处理:
- 将您账户的关联金额减少 100 美元。
- 将您朋友账户上的金额增加 100 美元。
- 传输已处理,因此将其从传输队列中移除。
计算机开始处理此传输,并且突然在步骤 1 和步骤 2 之间由于断电而关闭。
现在,如果计算机不是“休眠但运行”,它将开始启动并意识到出了问题 - 它会知道应该验证所有最近的操作。一切都很好。
但是,如果它在开始处理第 1 步之前处于“休眠但活跃”状态,则会出现问题 - 计算机不知道出了什么问题,因为它记得休眠时一切都很好。但硬盘上的数据已更新,并且已从您的帐户中提取了 100 美元,但尚未转移到您朋友的帐户。但计算机不知道这一点,因为它是在休眠后发生的。
计算机将从你的账户中再取出 100 美元并将其转给你的朋友。第一笔 100 美元已经没了。
正在运行的系统“休眠”可能会引发成千上万个类似的问题。
答案2
如果您要在虚拟机中工作,您可以完成类似的事情。使用虚拟机,您可以在任何时间点拍摄计算机快照并恢复到快照。这可以通过 VMWare、Hyper-V 和 VirtualBox 来实现。